nftable 规则在重新连接时无效(VDSL、ppp0)

nftable 规则在重新连接时无效(VDSL、ppp0)

我正在使用 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字节字符串)。 不一定存在。

我不知道匹配时是否存在性能影响等缺点,但感觉这是正确的解决方案。

相关内容