将桥接 VLAN 协议从 802.1q 更改为 802.1ad,数据包开始丢失

将桥接 VLAN 协议从 802.1q 更改为 802.1ad,数据包开始丢失

我有一个桥接接口 ( swbridge) 与vlan_protocol=802.1q.向其发送标记帧。我可以在 Wireshark 中成功看到 ARP 请求(来自另一台设备的 ping 请求),但是当更改vlan_protocol为时802.1ad,我无法再在 Wireshark 中看到数据包。

我使用以下命令更改了桥接 VLAN 协议:

sudo bash -c 'echo "0x88a8" > /sys/class/net/swbridge/bridge/vlan_protocol'
# ip -d -j -p link show swbridge

...
                "vlan_filtering": 1,
                "vlan_protocol": "802.1ad",
...
# uname -a
Linux 5.15.71 ...
# bridge vlan
port              vlan-id  
port2             10
swbridge          10

我想做的是向传入数据包添加双 VLAN 标记,但我一直停留在这一步。

编辑

这个设置可能不实用,但这是我想要的。我想在客户端的端口2上看到QinQ数据包(802.1AD):

在此输入图像描述

此设置已在 GNS3 上成功测试。

思科设备配置:

interface GigabitEthernet1/0/25
 switchport access vlan 10
 switchport mode access
!         
interface GigabitEthernet1/0/26
 switchport trunk allowed vlan 10
 switchport mode trunk
! 

MySwitch vlan 配置(在我解释为什么没有收到数据包之前):

# bridge vlan
port1             11 PVID Egress Untagged
port2             1 PVID Egress Untagged
                  11
swbridge          1
                  11

正如您所看到的,我们有一个所有端口都是从属的网桥(swbridge)。

我创建了一个 vlan int (使用以下代码),但它也不起作用,直到我最终发现 swbridge 根本vlan_protocol 802.1ad不起作用(没有数据包通过它)。

ip link add link port1 name port1.11 type vlan proto 802.1ad id 11

另请注意,我认为存在所需的模块:

# lsmod
Module                  Size  Used by
8021q                  28672  0
...

答案1

Linux 网桥vlan_filtering=1支持标记/取消标记单层 VLAN。这意味着,802.1AD(又名QinQ,暗示内部还有另一个堆叠的802.1Q VLAN层)VLAN感知网桥应该在其端口上看到802.1Q帧(接入端口)或802.1AD帧(中继) port),这样他们就可以像QinQ一样得到妥善处理。

需要时,可以使用其他堆叠(支持 VLAN 的)网桥或 VLAN 接口来完成此单个网桥未涵盖的任何操作。但此设置中不需要 VLAN 接口,因为 Cisco 交换机已添加第一层 VLAN 标记 (802.1Q VID 10)。


根据评论,实验如下:

client - port1 (IP/ARP) --> 
--> access-port - cisco (internal tagging) - trunk-port (802.1q vid 10) --> 
    --> port1 (access) - swbridge (internal tagging) - port2 (trunk, 802.1ad vid 11 before 802.1q vid 10) -->
        --> port2 - client

我不确定OP的设置在哪里不起作用,但设置为我的交换机下面从头开始完成(假设有两个名为端口1端口2匹配OP的描述)在再现设置时有效。

请注意,我不允许在网桥自身接口上进行任何操作,仅在其端口上进行:捕获完成我的交换机应该做于端口1或者端口2, 不开交换桥(尽管在混杂模式下捕获应该可以工作)。

# start over
ip link del dev swbridge
ip addr flush dev port1
ip addr flush dev port2

# all at once: VLAN filtering, 802.1AD and
# no VLAN enabled by default (not even VLAN 1), so no VLAN to delete later
ip link add name swbridge type bridge vlan_filtering 1 vlan_protocol 802.1ad vlan_default_pvid 0

ip link set dev port1 master swbridge up
ip link set dev port2 master swbridge up

bridge vlan add vid 11 dev port1 pvid untagged
bridge vlan add vid 11 dev port2

ip link set dev swbridge up

现在从客户端发送的 ARP 或 IP 数据包端口1接收 Cisco 的 802.1Q 标签,并在其上接收 802.1AD 标签我的交换机因此在客户端的端口 2 上作为QinQ 被接收。

这里不涉及VLAN接口,没有创建任何VLAN接口。如果VLAN接口存在我的交换机它应该被删除。

注意:桥的vlan_protocol值可以在需要时更改(使用/sys/class/net/swbridge/bridge/vlan_protocolip link set dev swbridge type bridge vlan_protocol ...)。但是,如果在某处设置中使用 VLAN 接口 ( ip link add link ... name ... type vlan id ... protocol ...),则以后无法更改其 VLAN 协议:必须删除并重新创建此接口才能更改 VLAN 协议。一旦创建,协议就无法更改。尝试更改它(使用ip link set ... type vlan protocol ...是默默接受的,但没有效果。

相关内容