我定义了以下规则:
-A POSTROUTING -j SNAT --to-source [publicip]
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
基本上,我只想让私有网络通过 192.168.0.6。但是,只有一个网络可以工作。使用此配置,只有公共网络可以工作。有什么方法可以实现我想要的吗?
答案1
iptables 规则需要按照先更具体规则再不太具体的顺序进行配置。
正确的顺序应该是:
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
-A POSTROUTING -j SNAT --to-source [publicip]
这有关 iptables 的维基百科文章很好地解释了这一点以及数据包通过链和表的流动。
数据包继续穿过链条,直到:1. 一条规则与数据包匹配,并决定数据包的最终命运,例如通过调用 ACCEPT 或 DROP 之一,或者一个模块返回这样的最终命运 [...]
答案2
解决了这个问题。顺序显然很重要。首先设置私有网络似乎可以解决问题。我还添加了 0.0.0.0/0,很确定这是默认值,所以我认为这没有改变任何东西,但我没有测试来找出原因。
-A POSTROUTING -j SNAT -d 192.168.0.0/24 --to-source 192.168.0.6
-A POSTROUTING -j SNAT -d 0.0.0.0/0 --to-source [publicip]