%20%E3%81%8C%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%20(brctl)%20%E3%81%AB%E5%B9%B2%E6%B8%89%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
br0
2 つのインターフェースに「接続された」ブリッジを設定しました。
eth0
、実際のLANに接続された物理インターフェース、vnet0
KVM 仮想インターフェイス (Windows VM に接続)。
そして、転送チェーンには次の単一のファイアウォール ルールがあります。
iptables -A FORWARD -j REJECT
現在、機能している ping は VM からホストへのものだけです。
インターフェイスbr0
はホスト マシンの IP アドレスを所有します。ホストの観点からは、IP を「所有」していません。Windows VM には静的 IP 構成がありますeth0
。vnet0
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