Linux 虚拟网桥(例如配置为ip
或brctl
)是否支持 VLAN?例如,配置不同 VLAN 中的接入端口和仅启用某些 VLAN 的中继端口。我的内核中唯一的选项(3.2.0-4-686-pae)有关 VLAN 和网桥的配置文件是CONFIG_BRIDGE_EBT_VLAN
,但据我了解,这可以过滤 802.1q VLAN 字段ebtables
。
答案1
没问题,这是大多数 openWRT 系统将 wlan 和交换机端口连接到同一 LAN 的方式。这是我的 openWRT 系统上的配置示例,该系统有两个 wifi 网络,一个供私人使用,一个供客人使用:
# brctl show
bridge name bridge id STP enabled interfaces
br-vlan2 7fff.a0f3c15eb708 no eth0.2
wlan0
wlan1
br-vlan3 7fff.a0f3c15eb708 no eth0.3
wlan0-1
wlan1-1
一些额外的解释:
典型的openwrt硬件(上面是TP-Link WDR4300)有一个处理所有物理端口的交换机;有时,物理 WAN 端口是eth
SoC CPU 上的单独接口。交换机通过中继连接到 CPU(此连接上的数据包带有 VLAN 标记)。因此 eth0.2 是 VLAN2,它仅连接到 4 个物理交换机端口,并去除了 VLAN 标记。
因此,您应该将 br-vlan2 简单地视为“LAN 网络”,由于需要而使用 VLAN,因为从 CPU 到交换机只有一个连接。
Linux 中的以太网桥可以将 VLAN 和物理接口作为成员。这符合我的预期,因为 VLAN 接口的行为就像 Linux 中的物理接口一样,有自己的路由、防火墙等,就像任何物理接口一样。我希望你也可以向网桥添加不同的 VLAN,如果你不介意接下来的疯狂的话:)
我还没有尝试过桥接物理接口,例如eth0
也承载 VLAN 标记流量的物理接口...我不知道这些标记的数据包是否也会被桥接。
答案2
一个技巧是使用 vconfig 命令明确告诉网桥可以传递 vlan 流量。下面的代码将在命令行上执行此操作,并会在重新启动后消失。要使其在重新启动时发生,请参阅https://serverfault.com/questions/414115/linux-vlans-over-bridge
brctl addbr br0
brctl addif br0 eth0
vconfig add br0 100
ifconfig br0.100 127.16.0.128 netmask 255.255.255.0
上面的 ifconfig 也应该在 eth0 上工作,因为 br0 和 eth0 是桥接的。