為什麼我的防火牆 (iptables) 會幹擾我的網橋 (brctl)?

為什麼我的防火牆 (iptables) 會幹擾我的網橋 (brctl)?

我設定了一個br0「連接」到兩個介面的橋:

  • eth0,我的實體介面連接到真實的LAN,
  • vnet0,KVM虛擬介面(連接到Windows VM)。

我在前向鏈中有一個防火牆規則:

iptables -A FORWARD -j REJECT

現在,唯一有效的 ping 是從虛擬機器到主機。

br0介面擁有我的主機的 IP 位址。從主機的角度來看,eth0並且不“擁有”任何IP。 vnet0Windows VM 具有靜態 IP 配置。

如果將我的iptables規則更改為ACCEPT(或甚至使用更具限制性的iptables -A FORWARD -o br0 -j ACCEPT),一切都會正常工作! (即我可以從虛擬機 ping 任何 LAN 計算機,反之亦然)。

所有 IP 轉送內核選項均停用(如net.ipv4.ip_forward = 0)。

那麼,netfilter 防火牆如何阻止甚至未啟用的東西呢?

此外,VM-LAN 流量應僅表示eth0vnet0。然而,它看起來像是允許-o br0「有效」的轉送流量(雖然我沒有仔細檢查)。

答案1

評論斯特凡·查澤拉斯 (Stéphane Chazelas) 提供了答案的提示。

根據Bridge-nf 常見問題解答bridge-nf 使 iptables、ip6tables 或 arptables 能夠查看橋接流量。

從核心版本 2.6.1 開始,有五個系統控制條目對於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

相關內容