以前也问过类似的问题,但得到的答案并不令人满意或不适用于我的情况。
我有一个透明的 squid 代理,可以过滤我网络中的所有 http 和 https 流量(仅限某些机器)。我使用以下 iptables 规则实现了这一点:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127
然而,我想绕过某些域的 squid:当客户端向 mydomain.com 发出请求时,它应该直接转到网络的网关。
我尝试在上面提到的其他规则之前插入以下规则。
iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
但是这个设置不起作用。我遗漏了什么?有没有更好的方法?
编辑
规则的顺序如下:
iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127
答案1
如果我理解正确的话,您希望免除对特定 IP 地址的流量进行强制重定向。如果是这样,那么您的做法就错了。
将上面配置中的前两行替换iptables
为
iptables -t nat -A PREROUTING -d a.b.c.d -j ACCEPT
免于强制重定向的 IP 地址在哪里a.b.c.d
。请注意,与当前的规则对一样,此规则需要前强制重定向代码。