iptables MASQUERADE 与 SNAT 对于两跳之外的流量

iptables MASQUERADE 与 SNAT 对于两跳之外的流量

我已经成功地使用了这个规则:

iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE

将 NAT 流量从本地 10.0.2.0 子网传到互联网(在 eno1 的远端)。

来自更远的 192.168.3.0 子网的流量(通过 192.168.3 网络上的路由器发送)在通过此 Linux 路由器传到互联网时并未经过 NAT。相反,传出数据包保留其 192.168.3.x 地址,因此没有收到来自互联网服务器的回复。

将 MASQUERADE 规则替换为:

iptables -t nat -A POSTROUTING -o eno1 -j SNAT --to 1.2.3.4

(其中 1.2.3.4 是 eno1 上 Linux 路由器的互联网地址)修复了该问题。

iptables MASQUERADE 是否应该只重写来自 Linux 路由器本地网络的数据包,就像这里的情况一样?或者还有其他的解释吗?

答案1

这很有趣,因为man iptables-extensions

伪装相当于指定到数据包发出的接口的 IP 地址的映射,但也会导致接口关闭时忘记连接

soMASQUERADE相当于SNAT, where--to是从界面中获取的,我很惊讶你看到这两个 wrt 之间的差异。转发的数据包。

此外,我还用于MASQUERADE从我的机器上的网络命名空间转发数据包,并且它工作得很好。

所以我的第一个想法是你看到了一些其他效果,我会仔细检查是否确实是不同的规则造成了差异,而不是其他东西。

相关内容