Debian
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 的停機時間會導致相關規則成為某種unassigned。手動重新應用 nft 規則(刷新 + 添加)可以解決此問題,直到下一次重新連接。
如何確保在重新建立連接後將臨時禁用的規則自動重新分配給 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"
而不是oif/iif ppp0
. 後者通過字元串而不是使用介面 id 來定址介面。引號是可選的,但我認為它很好地強調了不同的解釋。手冊頁簡單地說:
鍵入 ifname:介面名稱(16 字節字元串)。 不必存在。
我不知道匹配時是否存在性能影響等不利因素,但感覺這是正確的解決方案。