nftables: ebtables レガシーのような BROUTING 動作を実現するにはどうすればよいでしょうか?

nftables: ebtables レガシーのような BROUTING 動作を実現するにはどうすればよいでしょうか?

ebtables では、テーブルBROUTING内のチェーンは、およびアクションに対して特別な動作を持ちます。はブリッジング/転送パスを意味し、はルーティング/入力パスを意味します。 たとえば、適切な iptables 設定を使用して、すべての非 IPv6 パケットを NAT 経由で通過させ、IPv6 パケットはすべて直接ブリッジするには、次のようにします。brouteACCEPTDROPACCEPTDROP

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

nftables でこの動作を実現するにはどうすればよいですか?

いくつかの投稿と古いnftables マニュアルページこれは実装されていないと示唆しています。また、nftables メーリング リストのスレッド結局、実際に有効な返答は得られませんでした。

まだ実装されていないのでしょうか? もしそうなら、回避策はありますか、それとも ebtables-legacy を使用する必要がありますか? ありがとうございます。

答え1

まだ実装されていないのですか?

はい、しかしまだ数週間だけです(Linuxカーネル6.4は2023-06年末か2023-07年初頭にリリースされる予定です)。ブルートnftablesnetfilter-develは2023-02-24

アップデート: 正式に実装されましたnft(nftables) >= 1.0.8 およびebtables-nft>= 1.8.10 の場合は、この回答の最後にある更新を参照してください。

それはそうだった未リリースに追加Linuxカーネル6.42023-04-26:

ネットフィルター:

  • nf_tables の「brouting」サポートを追加し、パケットをブリッジするのではなくルーティングするように強制します。

そして、まだリリースされていない次の作品に向けて準備中であるnftablesバージョン、おそらく 1.0.8:

meta: メタブルートのサポートを導入

ブリッジの事前ルーティング フックで使用して、ルーティングのためにパケットを IP スタックに転送できます。

これは機能の代替ですebtables -t broute

ありませんebtablesaccept/dropを特別な場合に使用する際の特異性ブルートタイプ。ブルートルール内のフラグ家族タイプフィルターそして事前ルーティング針:

meta broute set 1

そのため、( を使用する代わりにebtables-legacyebtables-nftは のサポートが不足しているため、ブルート最近まで):

ebtables-legacy -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

代わりに次のようなことをします:

table bridge b {
    chain prerouting {
        type filter hook prerouting priority -250; policy accept;
        ether type != ip6 iifname wan meta broute set 1 accept
    }
}

さらに、ebtables-nftiptablesnftablesバックエンドバリアント)もまだリリースされていない次のバージョン用の同等のパッチ:

ebtables-nft: ブルートテーブルエミュレーションを追加

meta broute set 1をエミュレートするにはnew を使用します-t broute-t brouteが指定されている場合は、内部的-j DROPに に自動的に変換されますmeta broute set 1 accept

これにより、(カーネル 6.4 以上では)ebtables-nftの代わりに を使用することで、そのまま受け入れることができます。ebtables-legacy

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i wan

アップデート

  • 上に書いたように、カーネル6.4 は 2023-06-25 頃にリリースされました機能を受け取りました

  • 上に書いたように、nftables1.0.8 は 2023-07-14 頃にリリースされましたbroute をサポートするようになりました:

    • ブリッジ プリルーティング フックからブリッジ ロジックを短絡し、パケットをローカル IP スタックに渡すための broute サポート。

      ... meta broute set 1
      
  • iptables: 1.8.10 は 2023-10-10 頃にリリースされました(バイナリも提供ebtables) は、以下の方法で broute をサポートするようになりましたebtables-nft:

    • ebtables-nft での Broute テーブルのサポート

    このバージョン以降では、以下のコマンドが成功します。

    ebtables-nft -t broute -A BROUTING -p ! ipv6 -j DROP -i wan
    

    上記に書いた内容は、DROP実際にbroute set 1 acceptは以下のように表示されます (表示は通常 OK ですが、変更は通常 OK ではありません)。

    # nft list ruleset
    table bridge broute {
      chain BROUTING {
          type filter hook prerouting priority -2147483648; policy accept;
          iifname "wan" ether type != ip6 counter packets 0 bytes 0 meta broute set 1 accept
      }
    }
    

    (優先度-2147483648は奇妙に見えるかもしれないが、同じであるフックの優先度はebtables-legacy:NF_BR_PRI_FIRST

関連情報