題 2個TAP接口之間的橋接是否需要IP地址?


我試圖在機器上設置openvpn,以便我有2個不同的分接接口(tap0和tap1),然後是連接這些接口的橋接器。 openvpn設置為每個TAP接口的服務器橋配置。 想法是tap0上的客戶端將能夠在tap1上與客戶端通信,反之亦然。

橋中沒有涉及物理網卡,Bridge接口設置為沒有ip / netmask / broadcast。剛剛提出一個“ifconfig brX up”

當兩個客戶端都連接到openvpn服務器時,我能夠在兩個客戶端之間執行ping操作,每個客戶端都有自己的tap接口,但是在嘗試tcpdump網橋接口時我看不到任何流量。

我對某些事情感到有些困惑:

  1. 我是否需要在橋接接口上配置ip?我不太明白它的原因,因為它所要做的就是讓虛擬接口相互通信

  2. 事實上,網橋接口沒有分配的ip / netmask / broadcast,因為當tcpdumping該接口時,我無法在網橋接口上看到ping流量?

  3. 如果對數字2的答案為是,我認為不可能使用iptables來阻止/允許該接口上的流量,對嗎?如果是這樣的話,還有其他方法可以實現在這樣的界面上用iptables做什麼?


3
2018-05-18 19:22


起源


你有ip轉發和proxy_arp啟用? - Marki555


答案:


我是否需要在橋接接口上配置ip?我不太明白它的原因,因為它所要做的就是讓虛擬接口相互通信

不,純網橋僅適用於以太網級別 - 它甚至不會查看IP標頭。當您為br0分配IP地址時,您實際上是將其分配給連接到該網橋的主機操作系統。

但是,您還沒有說過實際添加的內容 tap 接口為 橋口。您需要明確告訴橋接它管理的端口:

  • brctl addif br0 tap0

  • ip link set tap0 master br0

事實上,網橋接口沒有分配的ip / netmask / broadcast,因為當tcpdumping該接口時,我無法在網橋接口上看到ping流量?

沒有。

但橋樑仍有可能處於“學習”模式;它仍然默認為30秒 - 檢查使用 brctl showstp br0。端口可能沒有添加到網橋中(見上文)。端口接口本身可能仍然處於關閉狀態。

(還有,親愛的眾神 為什麼人們認為他們需要設置廣播地址。 實際上,操作系統已經可以從IP中計算出來了〜子網掩碼。手動配置廣播地址幾乎沒有用,只是更容易意外地獲取它 錯誤。)

如果對數字2的答案為是,我認為不可能使用iptables來阻止/允許該接口上的流量,對嗎?如果是這樣的話,還有其他方法可以實現在這樣的界面上用iptables做什麼?

是的,你需要 ebtables 過濾流量;它不通過IP防火牆。

(雖然,我想這並不總是正確的。例如,Untangle防火牆似乎在一個跨線路由器/網橋模式下工作,這有點令人困惑。)


5
2018-05-19 10:15



是的我省略了brctl addif命令,但已經完成了。我沒有設置“ip link”命令,不知道那是做什麼的?運行“brctl showstp br0”時,我看到兩個tap接口都在轉發狀態下連接到它。在tcpdump中仍然沒有流量顯示 - ByteFlinger
結果是一個簡單的tcpdump確實可以工作而不需要一個已分配的地址,由於處理容器而導致流量錯誤地超出了vpn進程,因此我將此標記為答案 - ByteFlinger
@ByteFlinger,謝謝你的回答。你能解釋一下為什麼容器會遇到這個問題嗎?我這裡有類似的問題 stackoverflow.com/q/31904089/842860, 謝謝 - stackoverflower
@stackoverflower對不起,但沒有足夠的容器知識知道原因。我想在我的情況下,所有容器都能夠相互通信,因此它選擇了最簡單的路徑,這是通過eth0而不是我的橋。我應該嘗試一段時間禁用容器到容器的通信,然後再試一次,看看我是否能夠通過橋接而不是 - ByteFlinger
@ByteFlinger,我認為網橋的路由策略仍受主機iptable的影響,特別是源IP NAT。 Docker 默認添加一個 MASQURADE 統治到 POSTROUTE 表與源 172.17.0.0/16,所以來自的任何數據包 172.17.0.0/16 網絡將更改源IP,這可能導致接收方向錯誤的IP發送響應。這是我遇到的問題。 - stackoverflower