Networking
了解 Linux 中的虛擬交換機
我對在 Linux 中設置虛擬交換機的方式感到困惑。我進行如下:
ip link add name br0 type bridge ip link set br0 up
這應該會創建一個名為 br0 的虛擬交換機。現在,假設我的機器上有一個名為 eth0 的物理網路設備和一個由 KVM/qemu 創建的 tap 設備 vnet0。tap 設備會自動附加到 br0(通過配置),可以手動添加 eth0:
ip link set eth0 master br0
兩個設備現在都應該連接到交換機 br0。
我將 IP 地址 192.168.1.1 分配給 eth0,將 192.168.1.2 分配給虛擬化內部的網路介面。當然,tap 介面本身對這個地址一無所知。
如果我使用物理交換機而不是虛擬交換機進行此設置,我希望能夠從主機系統 ping 地址 192.168.1.2。但是,無法通過 ping 訪問此 IP:
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. From 192.168.1.2 icmp_seq=1 Destination Host Unreachable ...
這是為什麼?
我希望 eth0 將 ARP 請求發送到它所屬的所有乙太網段。這是物理的,也是br0定義的。vnet0 應該已經用它的 MAC 地址回答了 ARP 請求。
我找到的解決方案是也為 br0 分配一個 IP 地址:
ip addr add 192.168.1.3/24 dev br0
現在 ping 工作正常。
我將 IP 地址 192.168.1.1 分配給 eth0
這就是這個設置出錯的地方。
eth0
已設置為橋接成員介面(第 2 層),因此不應有任何 IP(第 3 層)地址。(您可能以涉及到 192.168.1.0/24 的兩條直接路由的錯誤配置結束)通過 2 個不同的介面,其中只有一個有效。但是錯誤設置的確切細節並不重要。)
這是為什麼?
我希望 eth0 將 ARP 請求發送到它所屬的所有乙太網段。這是物理的,也是br0定義的。
eth0 不會發送任何 ARP。一旦成為橋接器的一部分,它就不再是第 3 層介面。
此網橋上的(第 2 層)埠是
eth0
,tap0
, 和- 橋本身。
此橋上的(第 3 層)參與者是(以相同的順序)
- 可以通過的所有設備
eth0
(很可能:本地網路上的一堆其他設備)- 無論是在另一個和的
tap0
(這可能是一回事)br0
界面_