nftablesテーブルとチェーンの優先順位

nftablesテーブルとチェーンの優先順位

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

関連情報