我正在使用 debian jessie 上的 nftables 重建我的路由器。在我的 ISP 决定通过重新连接我的 DSL 链路重新分配新的 WAN IP 之前,我有一个工作设置。重新连接后,路由器本身具有在线连接,但伪装不再起作用。
重新连接前的 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 的停机时间会导致相关规则成为某种unassigned。手动重新应用 nft 规则(刷新 + 添加)可以解决此问题,直到下一次重新连接。
如何确保在重新建立连接后将临时禁用的规则自动重新分配给 ppp0?
我终于想出了如何解决这个问题。
你只需要使用
iifname/oifname "ppp0"
而不是oif/iif ppp0
. 后者通过字符串而不是使用接口 id 来寻址接口。引号是可选的,但我认为它很好地强调了不同的解释。手册页简单地说:
我不知道匹配时是否存在性能影响等不利因素,但感觉这是正确的解决方案。