尝试在两个不同的接口上使用源路由

尝试在两个不同的接口上使用源路由

我定义了以下规则:

-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]

相关内容