在 Linux 上桥接虚拟和物理以太网接口

在 Linux 上桥接虚拟和物理以太网接口

我正在尝试桥接虚拟接口 dummy0 和物理接口 eth1。我使用以下命令为这两个接口创建桥接器 br0,但它们没有桥接。有什么建议吗?

ip link add dev dummy0 type dummy  # Create dummy0. eth1 already exists
brctl addbr br0                    # Create bridge br0
brctl addif br0 dummy0             # Add dummy0 to br0
brctl addif br0 eth1               # Add eth1 to br0
ip link set dev dummy0 up
ip link set dev eth1 up
ip link set dev br0 up

此时,eth1 上从外界接收到的任何数据包(因为 eth1 是连接到外部设备的物理端口)都应由 dummy0 传输,反之亦然。但似乎并没有发生这种情况。

答案1

他们传输,但通过另一端接口。在“虚拟”接口上,它不连接任何东西 - 这就是“虚拟”接口的全部概念 - 因此数据包无处可去。

假设 eth0 在“前端”连接到操作系统网络堆栈,在“后端”连接到物理以太网端口。操作系统认为从端口收到的数据包来自 eth0,反之亦然,操作系统通过 eth0 发送的数据包来自物理端口。

在此处输入图片描述

例如,eth0 和 eth1 之间的网桥将连接所有“前端”并因此在“后端”连接之间中继数据包 - 通过 eth0 物理端口接收的数据包将通过网桥中继并通过 eth1 物理端口发送回。

桥接 dummy0 的工作方式相同,但由于 dummy0 在“另一侧”没有任何东西,因此任何通过通过 dummy0 发送的数据包将被丢弃 - 它们不会被“反射”回操作系统(虚拟接口通常不会反射数据包,而且 dummy0 的前端无论如何都会被桥接管)。

在此处输入图片描述

换句话说,桥接 dummy0 几乎毫无用处。(它唯一有用的情况是当您需要使桥看起来不为空时。)如果您希望操作系统与桥通信,那么您可以在没有虚拟接口(br0 接口)的情况下这样做本身连接到操作系统网络堆栈。

相关内容