我有一组如下所示的iptable规则:
-A PREROUTING --jump intercept-nat -A intercept-nat --jump DNAT -s 10.10.1.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.10.1.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.1.2.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -s 10.1.2.0/24 ! -d 10.10.1.1/32 -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat"
它的目的是发送80和443stream量到Squid,一个HTTPcaching代理。 我想在iptables规则中放一些行,不会把443stream量导向特定的IP地址到10.10.1.1:3127(squid)
使用案例:我有一个websocket服务器,代理服务器需要连接到,但鱿鱼不支持websockets。 所以我想让stream量绕过鱿鱼
我会做以下几点:
-A PREROUTING -s 10.10.1.0/24 ! -d 10.10.1.1/32 --jump intercept-nat -A PREROUTING -s 10.1.2.0/24 ! -d 10.10.1.1/32 --jump intercept-nat -A intercept-nat -d target-ip -p tcp -m tcp --dport 443 -j RETURN -A intercept-nat --jump DNAT -p tcp -m tcp --dport 80 --to-destination 10.10.1.1:3126 -m comment --comment "intercept-nat" -A intercept-nat --jump DNAT -p tcp -m tcp --dport 443 --to-destination 10.10.1.1:3127 -m comment --comment "intercept-nat"
每当一个数据包的目的地匹配target-ip它就会跳过其他的intercept-nat规则。 我也改变了你的一些规则,使它们更易读易操作;-)。
绕过NAT最简单的方法是接受数据包,这将结束表(PREROUTING)以及链(intercept-nat)中的path。 RETURN将离开链(intercept-nat)并继续通过表(PREROUTING)。
iptables -t nat -A PREROUTING <some criterium> -j ACCEPT
要么
iptables -t nat -A intercept-nat <some criterium> -j ACCEPT
即使我写了-A ,你必须把这一行放在NAT动作之前,或者把它插入到第一个位置。
鉴于你想排除某些stream量从NAT到你的代理,一个规则应该放在其他人之前。 而且我不会把它包含在你的用户定义的链接中,因为这个链在逻辑上意图做NAT,而不是做。
只是:
iptables -t nat -A PREROUTING -d wxyz -p tcp --dport 443 -j ACCEPT
其中wxyz是websocket服务器地址。
另外我会修改你现在的规则(虽然我在这里猜测一些事情):
eth0是外部lan, eth1和eth2是内部的。 REDIRECT来指定要在DNAT目标中使用的目标IP。 消除IP地址的规范可以改善维护,允许重用并使事情更简单。 所有在一起将是:
-A PREROUTING -d wxyz/32 -p tcp -m tcp --dport 443 -j ACCEPT -A PREROUTING ! -i eth0 -j intercept-nat -A intercept-nat -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3126 -m comment --comment "intercept-nat" -A intercept-nat -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127 -m comment --comment "intercept-nat"