我试图通过将所有前往端口 80 的传出数据包重新路由到 squid 代理来强制一台 PC 使用远程透明 squid 代理,尽管我在使用确切的 iptables 命令行时遇到了一些困难。
http://tldp.org/HOWTO/TransparentProxy-6.html上的 mini-HOWTO为两个“极端”情况提供了一些很好的链接:一个三(或更多)机器设置,它有一个客户端、路由器和代理,和一个单一的机器设置,所有三个都在同一台机器上。
在我的设置中,我有一台机器(称为 foo),IP 为 192.168.1.100。通常,它通过 192.168.1.1 的路由器连接到 Internet,该路由器执行 NAT 并具有公共 IP。在这种情况下,foo 还通过 OpenVPN 隧道(foo 的隧道地址为 10.8.0.5/6)连接到运行 squid 的名为 bar(远程地址 10.8.0.1)的机器。我想使用 iptables 将所有从 foo 发往端口 80 的传出数据包路由到端口 3128 上 bar 的 squid 代理。
我一直无法弄清楚要使用哪个链和目标;我所有的尝试要么是非法的(-A OUTPUT 没有 -t nat 和 --to-destination),要么只是没有做任何好事(-A PREROUTING、OUTPUT、POSTROUTING 等的各种组合)。
编辑:我认为我得到的最接近的是:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 10.8.0.1:3128
现在,没有端口 80 的流量可以到达任何地方,但至少它正在得到处理。使用 -A PREROUTING 失败...可能是因为数据包来自本地而不是通过机器路由?
如果我对您的理解正确,您想要做的事情不会简单地通过配置 iptables 来处理。REDIR 目标只能用于定位在本地系统上运行的进程。我相信尝试使用 DNAT 目标将其转发到远程 squid 盒会删除远程 squid 盒正确处理请求所需的一些信息
如果你允许我猜一下。我认为您正在尝试将默认网关保留为主机上的 192.168.1.1,然后通过 vpn 发送端口 80 流量,对吗?
远程 squid 需要一些配置才能真正充当透明代理。如果您可以在 squid 主机上设置正确的 iptables 重定向,并且远程主机在网络路径中,那么可以使用一些高级路由来通过 vpn 转发所有端口 80 请求。
PS如果我正确理解您的需求,请添加评论,我可以更新我的答案,提供有关如何设置路由的更多详细信息。
转到 foo 并执行此操作:telnet 10.8.0.1 3128
它有效吗?在这种情况下,您的 vpn 可以正常工作!
你能做一个
它会显示一个页面吗?然后将 squid 配置为透明代理!
在这种情况下,您链接中的简单规则应该有效:
(foo 是您正在处理的 iptables-box)
这行得通吗?
在这里你可以看到一篇关于 squid 和 iptables 的透明代理的简短文章 http://www.linuxconfig.net/2009/11/14/creating-transparent-proxy-with-squid-and-iptables.html