我正在深入了解 Linux 上的 VLAN 的详细信息,并且遇到了这 2 个命令:
[root@machine ~]# bridge vlan add vid 100 dev em1
[root@machine ~]# ip link add link em1 name em1.100 type vlan id 100
第一个将向 em1 添加 VLAN:
[root@machine ~]# bridge vlan show
port vlan ids
em1 1 PVID Egress Untagged
100
而第二个将创建一个新界面:
[root@machine ~]# ip a s dev em1.100
27: em1.100@em1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether b8:ca:3a:70:8f:d0 brd ff:ff:ff:ff:ff:ff
这两者之间有什么区别?
答案1
正如您可以看到的man bridge
,bridge vlan ...
操纵VLAN 过滤器列表网桥(描述为哪些 VLAN 标记启用了哪些端口),同时ip link add ... type vlan
将创建一个新的网络接口您可以使用它来访问来自应用程序的带有 VLAN 标记的数据包,方法是为其提供 IP 地址等。
两者是完全不同的东西,没有任何共同点(除了两者都处理 VLAN 标记,但以完全不同的方式)。
答案2
第一个 使 VLAN 能够通过接口,否则 VLAN 将被修剪,然后必须配置网桥:
ip link add name br0 type bridge
ip link set dev br0 type bridge vlan_filtering 1
ip link set em1 master br0
在您的示例中,接口 em1 具有本机 vlan 1 和成员 vlan 100,没有接口,所有其他 vlan 都会被修剪
第二个 创建一个新的(子)接口,从而获得未标记的流量(VLAN 100 不会传递到 em1 分配到的任何网桥)在您的示例中 em1.100 是一个新接口,要桥接它,您需要一个新的(子)接口像这样创建的桥梁
ip link add name br0.100 type bridge
ip link set dev br0.100 up
ip link set em1.100 master br0.100