我正在使用 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 的停机时间导致相关规则成为某种未分配。手动重新应用 nft 规则(flush + add)可解决此问题,直到下次重新连接。
如何确保重新建立连接后,暂时禁用的规则将自动重新分配给 ppp0?
答案1
我终于知道该如何解决这个问题了。
# 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"
而不是oif/iif ppp0
。后者通过字符串来寻址接口,而不是使用接口 id。引号是可选的,但我认为它很好地强调了不同的解释。
手册页简单地说明:
类型 ifname:接口名称(16字节字符串)。 不一定存在。
我不知道匹配时是否存在性能影响等缺点,但感觉这是正确的解决方案。