我正在处理网桥上的 VLAN,发现如果我将非 VLAN 接口添加到任何网桥,则会破坏所有 VLAN 接口 - 数据包正常离开,但返回数据包(带有适当 VLAN 标记)会被丢弃某处。当我从网桥上删除非 VLAN 接口时,VLAN 接口会再次开始工作。
这是什么原因呢?这是一个错误吗?
要解决任何可能的问题:
#setup bridges and vlans
vconfig add eth0 2
vconfig add eth0 3
brctl addbr br2
brctl addbr br3
brctl addif br2 eth2.2
brctl addif br3 eth2.3
ip link set dev br2 up
ip link set dev br3 up
#wait for forwarding state and test
arping -I br2 10.10.10.1
#this works - I get replies
arping -I br3 192.168.1.1
#this works - I get replies
brctl addbr br0
brctl addif eth0
arping -I br2 10.10.10.1
#broken - no replies. Wireshark shows reply packets coming in exactly as before.
arping -I br3 192.168.1.1
#also broken
ip link set br0 up
#wait for forwarding mode, then...
arping -I br3 192.168.1.1
#still broken
brctl delif br0 eth0
arping -I br3 192.168.1.1
#working again!
答案1
在您的特定示例中,br0
正在消耗来自的数据包eth0
,但 VLAN 代码没有获取它们。这可能是正确的行为。
如果要将中继端口添加到网桥,则应在网桥外运行 VLAN:
brctl addbr br0
brctl addif br0 eth0
ip link set br0 up
vconfig add br0 2
brctl addbr br2
brctl addif br2 br0.2
ip link set br2 up
vconfig add br0 3
brctl addbr br3
brctl addif br3 br0.3
ip link set br3 up
我手边没有网桥和 VLAN 设置,所以我无法测试它,但它对我来说是合乎逻辑的。它消除了 VLAN 或网桥是否消耗来自 eth0 的数据包之间的冲突,并使分层清晰。