Linux 网桥、主干和 PVID

Linux 网桥、主干和 PVID

跟进我的另一个问题我想澄清以下几点:

要配置桥接口而不是其端口之一,需要附加关键字 self。路由堆栈(第 3 层)处理 IPv4 或 IPv6 数据包,因此期望接收此类类型的帧,而不是带标记的帧。因此,VLAN ID 10 在离开网桥时必须取消标记(以便路由堆栈接收流量),并且这必须是端口 VLAN ID,以便从路由堆栈到网桥的流量被标记回来。通过这种方式,只有一个 VLAN 可以链接到路由堆栈。

一个中继端口承载多个 VLAN,但是PVID对于通过中继端口离开的帧bridge(从路由堆栈进入网桥等)必须只有一个值,那么无法确保该帧标记有正确的 VLAN ID (已经到达桥上的那个)?

在图表上我试图解释我的问题:

       +----+
       | L3 |
       +--+-+
          |
          |
          |br0
   +------+-------+
   | Linux Bridge |
   +------+-------+
          |trunk (vid 2-4094)
          |PVID (??)
          |
   +------+-------+
   |   L2 switch  |
   +-+----+-----+-+
     |    |     |
     |    |     |
   10|  20|   30|

例如,带有 VID 10 标记的帧(前往br0)到达 Linux 桥接trunk端口,该标记将被剥离并移交给堆栈,进行处理(例如 ICMP),并生成一个响应数据包,该数据包进入桥接br0将被标记为PVID,如果我设置PVID=20,那么这样的数据包将永远不会到达VLAN10上的主机?

我期望 Linux 网桥能够根据原始数据包的目标 MAC 和 VLAN ID 转发回复数据包。

更新经过一些实验,我发现以下设置有效。因此,创建 Vlan 子接口ethX.VID并将它们添加到网桥中,然后对每个子接口进行标记/取消标记,br0具有单个 IP 地址。

即标记的数据包(多个 VLAN)到达 br0,取消标记,推入堆栈,响应数据包通过 br0 一路返回到正确的 Vlan 子接口,在那里它被标记并流出。

       +----+
       | L3 |
       +--+-+
          |
          |
          |br0
   +------+-------+
   | Linux Bridge |
   +------+-------+
    |      |     |
   |      |       |
 |eth0.10|eth0.20|eth0.30|
       +------+
       | eth0 |
       +--+---+
          |trunk (vid 2-4094)
          |PVID (??)
          |
   +------+-------+
   |   L2 switch  |
   +-+----+-----+-+
     |    |     |
     |    |     |
   10|  20|   30|

相关内容