我有iptables设置select性路由。 在当前configuration中,它检查dst地址是否在特定链中列出,如果不是,则将stream量redirect到在端口1080上处于活动状态的代理端口。
这工作正常与以下设置:
iptables -t nat -N PROXY # Do not redirect iptables -t nat -A PROXY -d external.proxy.address.1 -j RETURN iptables -t nat -A PROXY -d external.proxy.address.2 -j RETURN iptables -t nat -A PROXY -d 211.96.0.0/255.240.0.0 -j RETURN iptables -t nat -A PROXY -d 211.128.0.0/255.128.0.0 -j RETURN iptables -t nat -A PROXY -d 218.0.0.0/255.128.0.0 -j RETURN ... [and many more address] ... # Redirect everything else to the proxy listening on port 1080 iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080 iptables -t nat -I PREROUTING -p tcp -j PROXY
如上所述,这对proxy1工作正常,但我试图redirect到目的地10.0.0.15类似的方式到不同的代理(proxy2),在端口1088监听。
我尝试了几种方法来取得成功。
configuration我试过了:
iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088 # didn't do anything
最好的办法是什么(如果可能的话)
你的问题是我认为误解RETURN作用。 https://unix.stackexchange.com/questions/191607/iptables-and-return-target#191614可能会有帮助。
目前,您的PROXY连锁店的工作如下:
PREROUTING链,你有(作为第一个子句?) iptables -t nat -I PREROUTING -p tcp -j PROXY 。 PROXY链 PROXY链表示了两件事之一,基本上是:对于stream量有一个带有RETURN操作的规则,或者不存在,并且iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080适用。 RETURN条目匹配,则iptables将返回PREROUTING链,并计算下一条规则。 看来没有“下一个规则”来做你想做的事情。 问题是这样的: iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088
你把这个放在PROXY链中,但是你想要这个redirect的所有stream量实际上被configuration为从你的PROXY链RETURN (即分出)。
你需要代替上面的行是:
iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088
关键是规则所在的链条 。 在PREROUTING中使用此规则,您的RETURN规则将按预期工作,方法是将匹配的stream量从“默认” PROXY规则iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080 ,然后返回到PREROUTING ,其中iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088可以应用。