我正在使用 VLAN 感知网桥。我有一个接口,我需要只有 VID 10 和 20 的数据包才能通过,任何其他 VID 都应该被丢弃。我这样配置界面:
bridge vlan add vid 10 dev wlan2.2
bridge vlan add vid 20 dev wlan2.2
我的问题是我想允许未标记的流量也通过,而不修改/添加标签到数据包。
能做到吗?
答案1
您可以将端口配置为使用特定的端口 VLAN ID (pvid
)对于所有收到的无标记帧,并将此相同的 VLAN ID 配置为发射的作为未标记的帧(untagged
)。虽然有可能发射多个 VLAN 为未标记,没有实际用途,因为在这种情况下,不是此端口上的 PVID 的其他 VLAN 将永远不会看到流量回复,因为任何可能的未标记回复流量仅发送到 PVID:对于给定的桥接端口,两者标志通常仅针对一个 VLAN ID 存在。只需选择任意随机 VLAN ID(永远不会在线路上看到),例如 42:
bridge vlan add vid 42 dev wlan2.2 pvid untagged
并配置应以相同方式与其通信的任何其他端口,PVID+如上所述未标记或根据需要标记(如果标记的 VLAN ID 42 将在此线上看到)。
最后一部分很重要:如果没有任何其他端口(包括桥接接口)知道 VLAN 42 帧,则会被丢弃。例如,使用新添加的桥接端口foo0
:
bridge vlan delete vid 1 dev foo0
bridge vlan add vid 42 dev foo0 pvid untagged
以及其他标记的 VLAN:
bridge vlan add vid 10 dev foo0
bridge vlan add vid 20 dev foo0
实际上,如果您从未像上面那样删除此默认 VLAN ID 1,则行为已经如您使用 VLAN ID 1 所描述的那样:所有端口默认为 PVID 1 未标记。因此,如果配置了网桥(我将命名bridge0
)和端口wlan2.2
正如你所写,其中 VLAN ID 1 从未被删除,则无需执行任何操作即可获得此行为。这是一个模型:
ip link add name bridge0 up type bridge vlan_filtering 1
ip link add wlan2.2 up master bridge0 type dummy
bridge vlan add vid 10 dev wlan2.2
bridge vlan add vid 20 dev wlan2.2
# bridge vlan show
port vlan-id
bridge0 1 PVID Egress Untagged
wlan2.2 1 PVID Egress Untagged
10
20
默认情况下,所有接口/端口都已具有未标记的 PVID 1,因此无需任何更改即可按预期工作,包括没有我上面写的更改。
关于网桥本身和路由
请注意,桥接接口的行为与桥接端口略有不同,因为它参与路由。更改桥接口本身的 VLAN ID 也需要关键字self
(这种用法self
似乎缺乏明确的文档手册页)除了其他设置之外,这也会影响路由桥接口的连通性。路由需要未标记的帧,因此只需一VLAN 可用于直接通过桥接接口进行正确路由(可以通过在桥接接口顶部使用经典 VLAN 接口来提供更多功能,或者使用韦斯一侧设置为桥接端口,另一侧设置为 IP 地址的接口)。与其他端口一样,它也默认为未标记的 PVID 1,如上所示。您可以选择将其切换到 VLAN 42,以路由端口上收到的未标记流量wlan2.2
(并丢失可能来自其他地方的默认 VLAN 1 的任何先前流量/连接):
bridge vlan delete vid 1 dev bridge0 self
bridge vlan add vid 42 dev bridge0 pvid untagged self