我正在debian jessie上使用nftables重build我的路由器。 我有一个工作设置,直到我的ISP决定重新分配一个新的WAN IP通过重新连接我的DSL链接。 在这样的重新连接之后,路由器本身具有在线连接,但是伪装不再起作用。
重新连接之前的nftable设置:
# nft list table nat table ip nat { chain prerouting { type nat hook prerouting priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; policy accept; oif ppp0 masquerade } }
重新连接后的nftable设置:
# nft list table nat table ip nat { chain prerouting { type nat hook prerouting priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; policy accept; oif 8 masquerade } }
所以我假设在重新连接期间ppp0的停机时间导致相关的规则是某种未分配的 。 手动重新应用nft规则(flush + add)解决了这个问题,直到下一次重新连接。
如何确保在连接重新build立之后暂时禁用的规则将被自动重新分配给ppp0?
我终于想出了如何解决这个问题。
# nft list table nat table ip nat { chain prerouting { type nat hook prerouting priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; policy accept; oifname "ppp0" masquerade } }
你只需要使用iifname/oifname "ppp0"而不是iifname/oifname "ppp0" oif/iif ppp0 。 后者通过string来访问接口,而不是使用接口ID。 引号是可选的,但我认为它强调不同的解释。
该manpage简单地说:
inputifname:接口名称(16字节string)。 不必存在。
我不知道在匹配时是否存在性能方面的不利影响,但感觉是正确的解决scheme。