使用 iptables 或类似工具将流量重定向到代理

使用 iptables 或类似工具将流量重定向到代理

我到处寻找这个问题的答案,但似乎我发现的大部分内容并不是我想要做的(主要是将同一主机上的流量重定向到在该主机上运行的 squid)。

如果可能的话,我想知道如何使用 iptables(或类似的,比如,在 opensuse 上是 SuSEFirewall2)来模拟系统代理设置(即:Ubuntu 中 /etc/environment 中的 HTTP_PROXY_HOST)。

原因是,并非所有服务都使用该设置。许多服务都需要自己的代理设置。我希望在网络层“捕获所有内容”。因此,如果我让 phpcurl 调用远程 Web 服务,则不必在那里定义代理。apt/zypper/yum 等也是如此。我不想在同一台服务器上为所有各种服务配置 25 次不同的代理设置。

我尝试过不同的变化(在本例中,将流量发送到 Squid 代理):

iptables -t nat -A OUTPUT -p tcp -o lo --dport 80 -j DNAT --to 192.168.0.34:3128

但它不起作用。我设置了防火墙规则来阻止来自此主机的所有出站互联网连接,并在 squid 框上启动了 tcpdump 以查看是否有数据包到达那里(没有)。我可以设置我的浏览器以使用笔记本电脑上的 Squid 代理,它可以工作,但如果我没有正确设置 squid,我想我至少会看到通过 tcpdump 发送到 squid 的初始流量。

如果有人对如何处理这个问题有更好的想法,满足上述要求,我愿意接受建议。

答案1

您无法仅使用 iptables 和 squid 等 http 代理来实现这一点,因为大多数网络协议在设计时都没有使用透明代理功能。必须明确配置它们才能使用代理。最接近的做法是使用 socks 代理,例如红袜队

答案2

据我所知,您只是想要一个透明的 http 代理?

http://www.tldp.org/HOWTO/TransparentProxy-6.html

相关内容