
nftables wikiには例ですが、私にはうまくいかないようです。
このページにはカーネル 5.3 以降で動作するはずだと書かれていますが、ページにあるコマンドを正確に実行しようとすると、「プロトコル エラー」と表示されます。
# nft add table bridge filter
# nft add chain bridge filter forward '{type filter hook forward priority 0; }'
# nft add rule bridge filter forward ct state established,related accept
Error: Could not process rule: Protocol error
add rule bridge filter forward ct state established,related accept
^^^^^^^^
- ハードウェア: Raspberry Pi 4
- カーネル: 5.10.92-v8+
nft --version
:v0.9.8 (E.D.S.)
また、最新バージョンのnftablesとそのライブラリをビルドした後、次のことを試しました。
- nftables 1.0.1
- libnftnl 1.2.1
- libmnl-1.0.4
ldd nft
確かに新しいバージョンのライブラリが使用されていることを確認しましたが、それでも同じエラー メッセージが表示されました。
答え1
この機能はカーネル 5.3 以降で利用可能ですが、Raspberry は提供されたカーネルにこれをコンパイルしないことを選択しました。
カーネル構成ファイル(通常はカーネルとしてまたはカーネルから)が見つからなかったため/boot/config-xxx
、インストールイメージを抽出してこれを直接確認しました。以下は、Raspbianのカーネルで利用可能なモジュールの比較です(zipイメージ公式サイトからダウンロード):
$ ls -1 lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nft_reject_bridge.ko
対類似のDebianカーネル同じアーキテクチャの場合:
$ ls -1 lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_conntrack_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_meta_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_reject_bridge.ko
ご覧のとおり、必要なNetfilterサポートnf_conntrack_bridge
は接続トラック一部nft_meta_bridge
とnftables部分は、RaspberryPi OS のデフォルト カーネルでは利用できません (また、組み込みでもありません。grep bridge lib/modules/5.10.92-v8+/modules.builtin
結果はありません)。これらの機能も有効になっているカーネルをビルドする必要があります。
他の珍しい機能も欠けている可能性があります。例えばモジュールnft_synproxy
そしてnft_xfrm
(IPSec フィルタリング用) も存在しません。
一方、非推奨のメソッド(機能の同等性が達成されたら削除される予定)を引き続き使用することもできますが、これも影響します。nftables良くも悪くも:br_netfilter
カーネルモジュールしかしネイティブnftablesこの方法は、新しいカーネル5.3の方法を使用するように設計されているため、特にサポートされていません。特に、iptables'-m physdev --physdev-is-bridged
。