NAT 表中的后路由规则

NAT 表中的后路由规则

我有一个关于使用 iptables 进行 NAT 的奇怪的问题。

当我在规则末尾的 NAT 表的后路由链中执行 SNAT 时,我应该给出 -J ACCEPT 吗?

我看到后路由规则上的计数器在增加,但没有数据包离开机器。那么这是否意味着数据包被自动丢弃了?

答案1

不可以。每条规则只有一个目标 (-j)。这-j SNAT是独有的,您不能为一条规则提供两个目标。如果您需要接受数据包,则应在“过滤器”表的“FORWARD”链中使用“ACCEPT”目标。

仅当存在丢弃数据包的规则或“FORWARD”链的默认策略为“DROP”时,才会丢弃数据包。在这两种情况下,这些计数器都会更新。

更可能的是,路由未启用或者您的路由表不完整。

启用路由:

sysctl net.ipv4.ip_forward=1

答案2

我认为您所需要的是(eth0 朝外):

iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE

而且当然

echo 1 > /proc/sys/net/ipv4/ip_forward

巧合的是,前几天我也在玩这个。上面的方法有效,但我读到的文章有时会说“这不能处理所有流量”,而没有进一步的解释。

相关内容