ファイアウォール (iptables) がブリッジ (brctl) に干渉するのはなぜですか?

ファイアウォール (iptables) がブリッジ (brctl) に干渉するのはなぜですか?

br02 つのインターフェースに「接続された」ブリッジを設定しました。

  • eth0、実際のLANに接続された物理インターフェース、
  • vnet0KVM 仮想インターフェイス (Windows VM に接続)。

そして、転送チェーンには次の単一のファイアウォール ルールがあります。

iptables -A FORWARD -j REJECT

現在、機能している ping は VM からホストへのものだけです。

インターフェイスbr0はホスト マシンの IP アドレスを所有します。ホストの観点からは、IP を「所有」していません。Windows VM には静的 IP 構成がありますeth0vnet0

iptablesルールを に変更するとACCEPT(または、より制限の厳しい を使用するとiptables -A FORWARD -o br0 -j ACCEPT)、すべて正常に動作します。 (つまり、VM から任意の LAN マシンに ping を実行でき、その逆も可能です)。

すべての IP 転送カーネル オプションが無効になっています ( などnet.ipv4.ip_forward = 0)。

では、netfilter ファイアウォールは、有効になっていないものをどのようにブロックできるのでしょうか?

さらに、VM-LAN トラフィックはeth0とのみを意味するはずですvnet0。しかし、FORWARD トラフィックを許可すると「動作する」ように見えます-o br0(ただし、あまり注意深く確認したわけではありません)。

答え1

コメントステファン・シャゼラス氏の著書が答えのヒントを与えてくれます。

によるとBridge-nf よくある質問bridge-nf は、iptables、ip6tables、または arptables がブリッジされたトラフィックを確認できるようにします。

カーネルバージョン2.6.1では、5つのsysctl エントリbridge-nf 動作制御の場合:

  • bridge-nf-call-arptables- ブリッジされた ARP トラフィックを arptables の FORWARD チェーンに渡します。
  • bridge-nf-call-iptables- ブリッジされた IPv4 トラフィックを iptables のチェーンに渡します。
  • bridge-nf-call-ip6tables- ブリッジされた IPv6 トラフィックを ip6tables のチェーンに渡します。
  • bridge-nf-filter-vlan-tagged- ブリッジされた VLAN タグ付き ARP/IP トラフィックを arptables/iptables に渡します。
  • net.bridge.bridge-nf-filter-pppoe-tagged- ブリッジされた pppoe タグ付き IP/IPv6 トラフィックを {ip,ip6} テーブルに渡す

次のコマンドで netfilter ファイアウォール ブロックを無効にすることができます。

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0

関連情報