如何在Linux上使用HTTP CONNECT路由所有传出的TCP连接

我有一个在防火墙后面的Linux系统,但它可以连接到一个HTTP代理,它传递所有CONNECT命令。 如何configurationLinux系统通过HTTP CONNECT进行TCP上的DNS请求,并通过HTTP CONNECTbuild立所有外出的TCP连接(HTTP代理除外)?

我正在寻找一个解决scheme,在任何进程中工作,包括静态链接的二进制文件,它直接调用socket(2)connect(2) 。 (所以LD_PRELOAD不是可接受的解决scheme,因为它不适用于静态链接的二进制文件。)

看看Transocks ,它可以用iptables拦截tcp连接,并通过Socks对它们进行隧道传输。 应该使用静态二进制文件。

TCP上存在DNS,但对于典型的使用情况来说,这是非常不规范的。 我不认为libnsswitch可以使用tcp,但你可以安装一个本地名称服务器说tcp dns。 您需要确保在外部的某个地方有一个recursion的parsing器,它将接受tcp。

如果您在外部控制机器,则可能会更容易设置一些vpn来隧道化UDP通信; 一个tsocksified openvpn,或者用-w选项openssh。