ebtables では、テーブルBROUTING
内のチェーンは、およびアクションに対して特別な動作を持ちます。はブリッジング/転送パスを意味し、はルーティング/入力パスを意味します。 たとえば、適切な iptables 設定を使用して、すべての非 IPv6 パケットを NAT 経由で通過させ、IPv6 パケットはすべて直接ブリッジするには、次のようにします。broute
ACCEPT
DROP
ACCEPT
DROP
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-legacy
、ebtables-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-nft
(iptables
nftablesバックエンドバリアント)もまだリリースされていない次のバージョン用の同等のパッチ:
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
)