Linux VLAN 感知网桥和中继端口

Tom*_*Tom 3 linux networking bridge vlan

我有一个连接到网桥的以太网端口:

$ brctl show
bridge name bridge id       STP enabled interfaces
eth0_bridge     8000.6a612bcc4723   yes     eth0
Run Code Online (Sandbox Code Playgroud)

网桥是 VLAN 感知的(即/sys/class/net/eth0_bridge/bridge/vlan_filtering1)。我希望能够向该网桥添加其他接口并为它们分配 VLAN,如下所示:

ip link set eth1 master eth0_bridge
bridge vlan add dev eth1 vid 10 pvid untagged
Run Code Online (Sandbox Code Playgroud)

这应该将 eth1 上的未标记流量连接到 eth0 上的 VLAN 10。但是直到我:

bridge vlan add dev eth0 vid 10
Run Code Online (Sandbox Code Playgroud)

一旦我这样做了,那么一切都会根据需要进行。但是有没有办法告诉它eth0是网桥上的中继端口,eth0_bridge它应该承载所有VLAN,然后对网桥的出口进行 VLAN 过滤?

A.B*_*A.B 6

使用该bridge vlan命令时,您可以一次性添加(或删除)一系列 VLAN ID。例如:

# bridge vlan add vid 2-4094 dev eth0
Run Code Online (Sandbox Code Playgroud)

将所有可用的 VLAN 添加到中继接口eth0(0 和 4095 在协议中保留,不得(也不能)使用,默认情况下 1 设置为 PVID 未标记的 VLAN ID,因此应避免或更好地删除) .

# bridge vlan show dev eth0
eth0     1 PVID Egress Untagged
         2
         3
[...]
         4093
         4094

# bridge -c vlan show dev eth0
port    vlan ids
eth0     1 PVID Egress Untagged
         2-4094
Run Code Online (Sandbox Code Playgroud)

这里-c代表-c[ompressvlans]而不是-c[olor]:网桥手册页(至少到 iproute2-ss191125)完全缺乏有关此选项的信息。

删除一个范围可以正常工作:

# bridge vlan del vid 100-200 dev eth0
# bridge -c vlan show
port    vlan ids
bridge0  1 PVID Egress Untagged

eth1     1 Egress Untagged
         10 PVID Egress Untagged

eth0     1 PVID Egress Untagged
         2-99
         201-4094
Run Code Online (Sandbox Code Playgroud)

在内部,所有这些都使用单个 VLAN的(散列)列表进行处理。


注 1

Cumulus Networks(已知主要在其网络设备上使用 Linux 的本机网络堆栈)有一些关于此的(和更新)示例:

考虑以下示例桥:

auto bridge
iface bridge
  bridge-vlan-aware yes
  bridge-ports swp1 swp9
  bridge-vids 2-100
  bridge-pvid 101
  bridge-stp on
Run Code Online (Sandbox Code Playgroud)

这是该配置的 VLAN 成员资格:

cumulus@switch$ bridge -c vlan show
portvlan ids
swp1 101 PVID Egress Untagged
 2-100

swp9 101 PVID Egress Untagged
 2-100

bridge 101
Run Code Online (Sandbox Code Playgroud)

所使用的配置文件是来自 ifupdown2(及其插件)的接口文件,它实际上是由 Cumulus Networks 开发来替换ifupdown 的,具有最兼容的语法,但大大改进了网桥和 VLAN 支持。


笔记2

我没有发现任何特殊标志自动将所有 VLAN 泛洪到桥接端口的证据。这个内核提交告诉 IEEE 802.1Q 中记录的 VID 4095 有限制,但允许作为 VID 的通配符匹配用于管理操作,但 Linux 似乎没有使用这种方法。