透明代理与鱿鱼/ iptables

我试图强制一台PC使用远程透明鱿鱼代理通过重新路由所有传出的数据包端口80到鱿鱼代理,虽然我有一些困难与确切的iptables命令行。

http://tldp.org/HOWTO/TransparentProxy-6.html上的mini-HOWTO对于两个“极端”情况有一些很好的链接:三个(或更多)具有客户端,路由器和代理的机器设置,并在同一台机器上的所有三个单机设置。

在我的设置中,我有一台机器(称为foo),IP为192.168.1.100。 通常情况下,它通过一个192.168.1.1的路由器连接到互联网,该路由器具有NATfunction,并具有公共IP。 在这种情况下,foo也通过OpenVPN隧道(foo的隧道地址是10.8.0.5/6)连接到运行squid的名为bar(远程地址10.8.0.1)的计算机。 我想使用iptables将所有从foo到80端口的数据包路由到3128端口的squid代理。

我一直无法弄清楚哪个链条和哪个目标使用; 我所有的尝试都是非法的(-output没有-t nat和-to-destination)或者没有做任何好事(-PREROUTING,OUTPUT,POSTROUTING等等的各种组合)。

编辑:最接近我想我得到的是这样的:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 10.8.0.1:3128 

现在,没有任何80端口的stream量在任何地方,但至less它正在处理。 使用-A PREROUTING失败…也许是因为数据包在本地发起而不是通过机器路由?

如果我正确地理解了你,你想要做的事情不会简单地通过configurationiptables来处理。 REDIR目标只能用于定位在本地系统上运行的进程。 我相信试图使用一个DNAT目标转发到远程鱿鱼框将删除远程鱿鱼框需要正确处理请求的一些信息

如果你让我猜一下。 我想你正试图离开你的主机上的默认网关为192.168.1.1,然后发送您的端口80stream量在vpn的权利?

远程鱿鱼需要一些configuration,以便它实际上可以作为一个透明的代理。 如果您可以在squid主机上设置正确的iptablesredirect,并且远程主机位于networkingpath中,则可以使用某些高级路由来跨所有vpn转发所有80端口请求。

PS如果我正确理解您的需求添加评论,我可以更新我的答案与关于如何设置路由的更多细节。

去foo做这个:telnet 10.8.0.1 3128

它工作吗? 在这种情况下,你的VPN的作品!

你能做一个吗?

 GET / HTTP/1.1 Host: www.heise.de 

它会显示一个页面? 然后,鱿鱼被configuration为透明代理工作!

在这种情况下,链接中的简单规则应该可以工作:

 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.8.0.1:3128 iptables -t nat -A POSTROUTING -o eth0 -s local-network -d 10.8.0.1 -j SNAT --to iptables-box 

(foo是你正在使用的iptables-box)

这是否工作?

在这里你可以看到一个关于透明代理与鱿鱼和iptables的简要文章http://www.linuxconfig.net/2009/11/14/creating-transparent-proxy-with-squid-and-iptables.html