以前也有过类似的问题,但是收到的答案并不令人满意,或者不适用于我的情况。
我有一个透明的squid代理,它可以过滤所有的http,对于一些机器,我的networking的httpsstream量。我使用下面的iptables规则实现了这个function:
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
然而,我想绕过某些域的鱿鱼:当客户端向mydomain.com发出请求时,它应该直接进入networking的网关。
我尝试在其他人之前插入以下规则,如上所述。
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
如果我理解正确,您希望免于强制redirect某个IP地址的stream量。 是的,你错了。
用上面的iptablesconfigurationreplace前两行
iptables -t nat -A PREROUTING -d abcd -j ACCEPT
abcd是免除强制redirect的ip地址。 请注意,像您当前的一对规则,这个规则将需要在强制redirect代码之前 。