Debian

nftable 規則在重新連接時失效(VDSL,ppp0)

  • October 19, 2016

我正在使用 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 字節字元串)。 不必存在。

我不知道匹配時是否存在性能影響等不利因素,但感覺這是正確的解決方案。

引用自:https://serverfault.com/questions/809302