我用的是VLAN感知桥。我有一个接口,我需要只有VID 10和20的数据包才能通过,任何其他的VID都应该被丢弃。我将接口配置成这样:
bridge vlan add vid 10 dev wlan2.2
bridge vlan add vid 20 dev wlan2.2我的问题是,我希望允许无标记的通信也通过,而不修改/添加标记到数据包。
能办到吗?
发布于 2022-11-28 16:43:06
您可以将端口配置为对所有接收到的未标记帧使用特定的port (pvid),并将此相同的VLAN配置为以无标记帧(untagged)发出。虽然可以以无标记的形式发出多个VLAN,但没有真正的用途,因为在这种情况下,其他不是此端口上的PVID的VLAN将永远不会看到流量响应,因为任何可能的无标记应答流量都只存在于PVID:对于给定的桥接端口,通常只为一个VLAN ID出现两个标志。只需选择任何随机的VLAN ID (它永远不会出现在线路上),例如42:
bridge vlan add vid 42 dev wlan2.2 pvid untagged并配置以相同方式与其通信的任何其他端口,如上面所述或根据需要标记PVID+untagged (如果在这条线路上显示了标记VLAN 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 1,那么这种行为已经按照您使用VLAN 1描述的那样进行了:所有端口默认为PVID 1。因此,如果桥(我将命名为bridge0)和端口wlan2.2按照您编写的那样配置,其中VLAN 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还需要关键字self ( self的这种用法在手册页中似乎缺乏明确的文档),这还会影响桥接口的路由连接性。路由需要无标记帧,因此只有一个VLAN可以直接与桥接口进行适当的路由(可以在桥接接口上使用经典的VLAN接口,也可以使用一侧设置为桥接端口的veth接口和具有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 selfhttps://unix.stackexchange.com/questions/726542
复制相似问题