在NAT表中的前传规则

我有一个关于使用iptablesNAT的奇怪问题。

当我在规则末尾的NAT表中做NAT时,我应该给予-J ACCEPT?

我看到的出现规则的计数器增加,但没有数据包离开机器。 那么这是否意味着数据包会自动删除?

没有。每个规则只有一个目标(-j)。 -j SNAT是独占的,你不能为一个规则提供两个目标。 如果您需要接受数据包,则应在“filter”表的“前向”链中使用“接受”目标。

数据包只有在有规则丢弃的情况下才会被丢弃,或者“FORWARD”链的默认策略是“DROP”。 在这两种情况下,这些计数器都会更新。

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

启用路由:

 sysctl net.ipv4.ip_forward=1 

我认为你需要的只是(eth0面向外):

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

而且当然

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

我有一天在玩这个巧合。 以上的工作,但我读的文章有时会说“这不处理所有的交通”没有进一步的解释。