我在网络中的 iptables 中使用以下规则来使用透明代理
* iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
* iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
* iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
但是我的 squid 日志,总是记录网关 IP (172.16.0.1)
您知道不丢失客户端 IP 的替代方法吗?(当然要避免手动设置代理!)
由于 SNAT 规则,您正在丢失客户端 IP。我很想建议您删除该规则。如果您的鱿鱼盒像您的评论所暗示的那样位于网络内部,那么我很确定您不需要进行 SNAT。
不幸的是,您并没有真正向我们提供有关如何设置网络的详细信息。因此,如果出于某种原因需要 SNAT,那么您可能需要重组您的网络。
要查看的另一件事是使用 Group Policies 和/或WPAD自动配置客户端。实际上让浏览器识别出正在使用的代理服务器有一些好处。
我解决了在网关安装 Shorewall 的问题。
您可以通过将代理服务器悬挂在另一个路由器接口上来解决此问题。
如果这样做,您将不需要执行导致您丢失客户端 IP 的 SNAT 技巧,因为进出代理的所有流量都将通过路由器。