Linux

為什麼連接到網橋的物理介面在我的情況下無法通過 Internet 訪問?

  • September 27, 2020

我有這樣的網路拓撲:

你看,em1(1.1.8.209)是物理介面,我可以通過網際網路進行通信。我創建了兩個 vm 實例:PID 8740PID 8817,都使用網路 IP1.1.8.210/291.1.8.211/29,都使用公共 IP 地址。

現在我可以通過 Internet 與 em1 進行通信了。

但我有一個要求,我想直接訪問這兩個虛擬機,所以我想將 em1 附加到br0.

然後我執行了這個:

brctl addif br0 em1

拓撲變成這樣:

在此處輸入圖像描述

但是,執行此命令後,出現錯誤,我無法再進行通信1.1.8.209。然後我刪除了附件brctl delif br0 em1,然後我現在可以訪問1.1.8.209了。

為什麼我會遇到這個問題?不明白,請幫忙解釋一下原因。

當介面成為橋接埠時,它不再參與路由。

此部落格中描述了低級別的詳細資訊正確隔離 Linux 網橋

  1. 將幀移交給全域或設備特定的協議處理程序(例如 IPv4、ARP、IPv6)。

對於橋接介面,核心已經配置了一個設備特定的接收處理程序,br_handle_frame(). 除了 STP 和 LLDP 幀或啟用了“路由”外,此功能不允許在傳入介面的上下文中進行任何額外處理。因此,在這種情況下永遠不會執行協議處理程序。

這種橋接埠的 IP 地址與傳入的數據包無關。將其設置在它所在的位置仍然會破壞傳出數據包的正確路由,因為它們仍然可以直接通過橋接埠發送(當它們不再應該發送時)。

必須做的是將IP地址移動到系統(或網路名稱空間,甚至是同一位置的veth對的另一個自由端),其另一端連接到網橋,或網橋的自身埠,即網橋本身. 在此移動期間總會有一個小的時間視窗存在中斷,因此本地更改此配置的操作不得依賴於網路訪問(例如:不得依賴於使用中斷路由通過 shell 遠端鍵入命令)。

我將在下面僅使用具有更新語法的更新工具。

例如:

ip address flush dev em1
ip address add 1.1.8.209/29 dev br0

相反,讓網橋不參與路由並使用額外的veth對的末端(在同一網路命名空間中)參與路由的另一種方法可能是:

ip address flush dev em1
ip link add name em1twin type veth peer name br0portem1twin
ip link set br0portem1twin master br0 up
ip link set em1twin up
ip address add 1.1.8.209/29 dev em1twin

在這兩種情況下,如果預設路由(或其他路由)依賴於該地址的存在,則還必須再次添加該路由,因為它消失了。

引用自:https://unix.stackexchange.com/questions/611136