Yuhang Zheng
Linux bridge VLAN的配置

linux网桥支持vlan filtering过滤功能后,我们不再需要通过子接口的形式进行vlan划分,简化了vlan配置。

1. bridge vlan说明

man bridge可以了解到,linux通过如下命令进行vlan filtering的配置:

1
bridge vlan { add | del } dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]

选项说明:

pvid:端口的默认vlan,所有从该端口输入的没有携带vlan的报文,会被打上该vlan标签,该选项只对输入报文有效。

untagged:端口的untag vlan,输出报文携带该vlan时,会被剥离。

一般情况下pvid和untagged是同时使用的,对应于cisco的switchport trunk native vlan

self

master

这两个选项在帮助手册上是这么解释的:

1
2
self   the vlan is configured on the specified physical device. Required if the device is the bridge device.
master the vlan is configured on the software bridge (default).
VLAN网桥配置过程中的DefaultPVID和tagged

续接上一篇文章,我们在第二种方法中提到了DefaultPVID参数,那么我们该如何理解DefaultPVID参数呢,它的作用是什么?

DefaultPVID的释意

systemd.netdev (www.freedesktop.org)中可以看到DefaultPVID的解释:

1
2
3
DefaultPVID=
This specifies the default port VLAN ID of a newly attached bridge port. Set this to an integer in the range 1–4094 or "none" to disable the PVID.
这指定了新连接的桥接端口的默认端口 VLAN ID。将其设置为 1–4094 范围内的整数或“无”以禁用 PVID。

以上内容便说明了通过systemd方式配置网桥时,br0.netdev文件中DefaultPVID参数的作用就是给所有加入该网桥的网络端口配置一个PVID,包括网桥自己。

那么这个PVID和普通的VLAN ID有什么区别呢?暂时先保留这个疑问往下看。

pvid和untagged的作用

首先看一下bridge命令的选项说明:

1
bridge vlan { add | del } dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]

选项说明:

pvid:端口的默认vlan,所有从该端口输入的没有携带vlan的报文,会被打上该vlan标签,该选项只对输入报文有效。
untagged:端口的untag vlan,输出报文携带该vlan时,会被剥离。

一般情况下pvid和untagged是同时使用的。

由上述说明可以看到,在bridge命令中,pvid和untagged参数是高度关联的。那么,这个tag又是什么东西呢?Tagged和Untagged又是什么?

FCU2303配置VLAN和网桥的示例

背景

在FCU2303的开发板上,有八个千兆网,分别是fm1-mac1,fm1-mac2,fm1-mac3,fm1-mac4,fm1-mac5,fm1-mac6,fm1-mac9,fm1-mac10,还有一个5G模块eth0。

客户有一个需求是想在这个板子上划分出两个VLAN(Virtual Local Area Network,中文名为”虚拟局域网”,工作在OSI参考模型的第2层和第3层。),一个是将这八个千兆网口划为一个VLAN,VLANID暂时定为100;另一个是将这八个网口中的任一网口和5G模块划为一个VLAN,VLANID暂时定为200,划分示意图如下图所示:

VLAN

这样的话,VLAN100中的设备就无法直接访问5G模块的流量,只能先将数据转发到fm1-mac1网口上,然后fm1-mac1再将数据转发到5G模块eth0。因为fm1-mac1是既在VLAN100中,又在VLAN200中,所以它充当了连接两个VLAN的桥梁,这时候如果在fm1-mac1中外接一台电脑用于监控流通此网口的流量的话,就实现了监听VLAN100中其他网口通过5G模块上网的数据内容。