Debianjessieで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ルールを手動で再適用(フラッシュ+追加)すると、次の再接続までこの問題が解決します。
接続が再確立された後、一時的に無効にされたルールが自動的に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バイトの文字列)。 存在する必要はありません。
マッチング時のパフォーマンスへの影響などのマイナス面があるかどうかはわかりませんが、それが正しい解決策のように感じます。