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

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

我有一个 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。

相关内容