我使用命令创建了 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
从eth0
接口后面的主机发送到br0
(具有 IP 192.168.1.1)时,我看到tcpdump
eth0 确实正在接收标记帧(在我的情况下 ID 是 10),但是 br0 没有收到任何内容。我缺少什么?
答案1
网桥自身接口是网桥参与路由的部分,也必须放入适当的 VLAN 中。
要配置桥接接口而不是其端口之一,self
需要附加关键字。路由堆栈(第 3 层)处理 IPv4 或 IPv6 数据包,因此期望接收此类类型的帧,而不是带标记的帧。因此,VLAN ID 10 在离开网桥时必须取消标记(以便路由堆栈接收流量),并且这必须是端口 VLAN ID,以便从路由堆栈到网桥的流量被标记回来。通过这种方式,只有一个 VLAN 可以链接到路由堆栈。
这给出:
bridge vlan del dev br0 vid 1 self
bridge vlan add dev br0 vid 10 untagged pvid self