使用 VLAN 感知网桥时如何允许 VLAN 未标记数据包通过

使用 VLAN 感知网桥时如何允许 VLAN 未标记数据包通过

我正在使用 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

相关内容