我使用命令创建了可识别 VLAN 的网桥并添加了相关接口:
% ip link add br0 type bridge vlan_filtering 1
% ip link set dev eth0 master br0
...
(并对 eth1、eth2、eth3 重复此操作)
现在,我希望桥接端口能够处理具有多个标签的帧,并将这些帧从标签上剥离并传递到端口br0,我有一个监听守护进程:
% bridge vlan del dev eth0 vid 1
% bridge vlan add dev eth0 vid 2-4094
...
(并对 eth1、eth2、eth3 重复此操作)
完成所有命令后,网桥设置如下所示:
% bridge -c vlan sh
port vlan ids
br0 1 PVID Egress Untagged
eth3 2-4094
eth2 2-4094
eth1 2-4094
eth0 2-4094
br1 1 PVID Egress Untagged
现在,当我从接口ping
后面的主机发送到(具有 IP 192.168.1.1)时,我看到eth0 确实在接收标记帧(在我的情况下 ID 是 10),但是 br0 没有收到任何东西。我错过了什么?eth0
br0
tcpdump
作为参与路由的网桥的一部分,网桥自身接口也必须放在适当的 VLAN 中。
要配置桥接接口而不是其端口之一,
self
需要附加关键字。路由堆栈(在第 3 层)处理 IPv4 或 IPv6 数据包,因此期望接收这种类型的帧,而不是标记帧。因此,离开网桥时必须取消标记 VLAN ID 10(以便路由堆栈接收流量),并且这必须是端口 VLAN ID,因此从路由堆栈到网桥的流量会被标记回来。这种方式只能将一个 VLAN 链接到路由堆栈。这给出了: