我有一个 Linux 系统,它位于防火墙后面,但它可以连接到 HTTP 代理,该代理会传递所有 CONNECT 命令。如何配置 Linux 系统以通过 HTTP CONNECT 通过 TCP 发出 DNS 请求,并通过 HTTP CONNECT 建立所有传出的 TCP 连接(与 HTTP 代理的连接除外)?
我正在寻找一种可以在任何进程中工作的解决方案,包括直接调用socket(2)
和的静态链接二进制文件connect(2)
。(因此LD_PRELOAD
不是一个可接受的解决方案,因为它不适用于静态链接的二进制文件。)
答案1
看一下穿袜,它可以使用 iptables 拦截 tcp 连接并通过 Socks 建立隧道。应该可以与静态二进制文件一起使用。
TCP 上的 DNS 是存在的,但对于典型用途来说,它相当不标准。我认为 libnsswitch 不能使用 tcp,但您可以安装一个使用 tcp dns 的本地名称服务器。您需要确保在外部某处有一个可以接受 tcp 的递归解析器。
如果您可以控制外部的机器,则可能更容易设置一些 vpn 来传输 UDP 流量;tsocksified openvpn,或带有 -w 选项的 openssh。