假设我在 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以获得解释。