假設我在 linux 上建立一個橋接介面 ( br0
) 並向其添加一些介面 ( eth0
、tap0
等)。我的理解是,該介面就像一個虛擬交換機,其中包含我添加到其中的所有介面/連接埠。
為該介面分配 MAC 和 IP 位址有何意義?該介面是否充當交換器/網橋上的附加端口,允許其他端口存取主機?
我看過一些頁面討論為網橋分配 IP 位址。 MAC 分配是隱含的(還是自動的)?
答案1
因為網橋是乙太網路設備,所以它需要 MAC 位址。 Linux 橋接器可以啟動諸如生成樹協定訊框之類的內容,而此類流量需要原始 MAC 位址。
一座橋沒有要求一個IP位址。在很多情況下你都不會遇到這種情況。然而,在很多情況下你可能有一個,例如:
當網橋充當一組容器或虛擬機器(甚至實體介面)的預設網關。在這種情況下,它需要一個 IP 位址(因為路由發生在 IP 層)。
當您的「主」NIC 是網橋的成員時,這樣網橋就是您與外界的連線。在這種情況下,您不應將 IP 位址指派給(例如)
eth0
,而是將其指派給橋接裝置。
如果這座橋是不是如果需要 ip 路由,則不需要 ip 位址。這種情況的例子包括:
- 當網橋用於建立沒有外部連接的設備專用網路或透過網橋以外的設備提供外部連接。
答案2
與其他網路設備一起列出的橋接設備並不代表虛擬橋接器,它代表連接到橋接器的虛擬 NIC。如果您有一個與實體網路設備連接的實體網橋,您也不會看到網路設備中列出的實體網橋- 但您會看到連接到該網橋的NIC,當然它有自己的MAC 位址,例如任何其他網路設備。
為橋接設備(實際上是連接到虛擬橋接的虛擬 NIC)指派 IP 位址可讓主機裝置將封包路由到由橋接器和連接到該橋接器的所有裝置所建立的子網路。整潔的!
雖然網路設備工具iproute2
(使用ip link
和ip addr
命令)可讓您查看連接到橋接器的虛擬 NIC,但也可以使用程式查看虛擬橋接器本身brctl
。此brctl show
指令將列出所有網橋及其連接的介面。以下是使用Linux 橋接器和 tuntaps 的iproute
範例:brctl
# ip link add br0 type bridge
# ip tuntap add dev tap0 mode tap
# ip tuntap add dev tap1 mode tap
# ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev br0
# ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev tap0
# ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev tap1
# brctl addif br0 tap0
# brctl addif br0 tap1
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.2e22e593fe8c no tap0
tap1
# ip addr show to 10.0.0.0/24
11: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet 10.0.0.1/24 brd 10.0.0.255 scope global br0
valid_lft forever preferred_lft forever
12: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
inet 10.0.0.2/24 brd 10.0.0.255 scope global tap0
valid_lft forever preferred_lft forever
13: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
inet 10.0.0.3/24 brd 10.0.0.255 scope global tap1
valid_lft forever preferred_lft forever
請注意,輸出中「介面」下列出的brctl show
是其他除了br0
建立橋接時自動新增的介面之外,還附加到橋接器的介面。 (我猜 Linux 不允許創建沒有連接設備的虛擬橋,也沒有設備的橋會自動銷毀。) 根據記錄,我沒有在核心中研究過這一點,我也不是網路專家。我發布這篇文章是因為它似乎令人信服地解釋了 Linux 中虛擬橋的相當混亂的實作。我不相信虛擬網橋本身有 MAC 位址。
答案3
是的,橋接介面充當附加連接埠。
後man 5 systemd.netdev
:
網橋設備是一個軟體交換機,它的每個從設備和網橋本身都是交換器的連接埠。
答案4
br0
和virbr0
列出的介面是ip addr
分別將ip link
主機連接到br0
網橋和網橋的tap 介面。virbr0
這種名稱的重載肯定會令人困惑。
那什麼是virbr0-nic
?
這不是原來問題的一部分,但我會在這裡添加我的 2 美分,因為這在過去讓我感到困惑。virbr0-nic
是一個虛擬接口,其 MAC 位址被網橋用作virbr0
自己的 MAC 位址。當連接埠動態新增或從網橋中刪除時,此始終存在的介面可防止virbr0
MAC 位址發生變更。主機不會從virbr0-nic
介面發送任何流量。
看https://backreference.org/2010/07/28/linux-bridge-mac-addresses-and-dynamic-ports和https://www.redhat.com/archives/libvirt-users/2012-September/msg00038.html以獲得解釋。