nftablesの設定に問題があります。
2つのテーブルがあり、各テーブルには同じフックがありますが、名前と優先順位の異なるチェーンがあります。
表は、includeパラメーターによってロードされる別々のファイルにあります。
優先順位のため、VPN-POSTROUTINGチェーンがインターネットチェーンの前に実行されると思います。しかし、私の設定では、INTERNETチェーンが最初に実行されます。
table ip nat {
chain INTERNET {
type nat hook postrouting priority srcnat + 1; policy accept;
oifname br2 masquerade
}
}
table ip vpn {
chain VPN-POSTROUTING {
type nat hook postrouting priority srcnat - 1; policy accept;
oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 accept
}
}
私の間違いはどこにありますか?
編集:ルールを変更し、すべてのチェーンを同じテーブルに追加しましたが、結果は同じでした。
次に、ABの提案に従ってルールにカウンタとログを追加しました。
チェーンの順序は優先順位に対応しますが、VPNの許可ルールをトリガーしません。
仮面舞踏会ルールの直前にインターネットチェーンにVPN受諾ルールを追加すると、期待どおりに機能します。
答え1
歴史的に、特定のフック(事前ルーティング、入力、出力...)にはNATチェーンがありました。 nat ステートメントを実行するか、単にパケットをチェーンの終わりに受け入れると、単一チェーンのフック内処理も終了します。そしてnftables同じフックに複数のチェーンが許可され、1つのチェーンを終了すると、次のチェーンが続行されます。したがって、最初のチェーンが何もしないと(受け入れによって)、次のチェーンではこれを行う機会がありますが、これは意図された目的ではありません。
この問題を解決するために、最初のチェーン(または他のチェーン)は、次の各チェーンにメッセージを残してアクションを取ることができます。次のチェーンのフラグ(すべての値)を設定して動作を変更できます。
代わりにフラグを設定してもaccept
効果はありません(チェーンを空白のままにするとデフォルトのVPN-POSTROUTING
ポリシーも適用されます)accept
。したがって、ルールをVPN-POSTROUTING
次のように置き換えます。
nft add rule ip vpn VPN-POSTROUTING oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 mark set 0xdeaf
このフラグが設定されると、残りのルールを適用せずに動作を変更するために他のチェーンで使用できます。次のルールを挿入して始めますip nat INTERNET
。
nft insert rule ip nat INTERNET mark 0xdeaf accept