Linux
iptables - 橋接和轉發鏈
我已經設置
br0
了包含兩個介面eth0
和tap0
brctl addbr br0 brctl addif eth0 brctl addif tap0 ifconfig eth0 0.0.0.0 promisc up ifconfig tap0 0.0.0.0 promisc up ifconfig br0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
我的預設
FORWARD
鏈策略是DROP
iptables -P FORWARD DROP
當我不添加以下規則時,流量不會通過網橋。
iptables -A FORWARD -p all -i br0 -j ACCEPT
據我了解
iptables
只負責IP層。
ebtables
應該負責過濾乙太網橋上的流量。那麼為什麼我必須在 iptable 的 FORWARD 鏈中添加 ACCEPT 規則呢?
由於 br-nf 程式碼可用作 linux 2.4 的更新檔並在 linux 2.6 中使用:
br-nf 程式碼使橋接的 IP 幀/數據包通過 iptables 鏈。Ebtables 過濾乙太網層,而 iptables 只過濾 IP 數據包。
由於您正在處理的流量是 ip,
iptables
因此規則仍然適用,因為br-nf將橋接數據包傳遞到iptables
.這是一個很好的閱讀互動的資源,它詳細介紹了br-nf程式碼的功能,包括如何禁用所有或部分功能(即不將橋接流量傳遞給 iptables)。