Networking

了解 Linux 中的虛擬交換機

  • February 20, 2017

我對在 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界面_

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