我正在尝试建立一个系统,将一个无标记的以太网网络连接到一个水龙头隧道,在流量移动到隧道时添加一个VLAN标记。
到目前为止,我已经:
eth0 -承载无标记通信量的物理以太网接口。tap1 -水龙头隧道接口.br0 --一种包含tap1 (和其他物理接口)的桥我知道我可以通过这样做在以太网端添加一个VLAN标记:
$ ip link add link eth0 name eth0.5 type vlan id 5
$ brctl addif br0 eth0.5但我该怎么做呢?
编辑我发现我可以这样做:
$ ip link add veth0 type veth peer name veth1
$ ip link add link veth0 name veth0.5 type vlan id 5
$ brctl addif br0 veth0.5
$ brctl addbr br1
$ brctl addif br1 eth0
$ brctl addif br1 veth1我认为这做了我想做的-它创建了两个桥,与虚拟以太网设备连接它们,并添加/删除VLAN标记,因为流量通过之间的桥梁。还有更简单的吗?
发布于 2019-10-10 20:13:26
是的:您可以将网桥设置为VLAN感知。
然后,网桥将处理附加到交叉帧的VLAN ID,包括根据配置标记和取消标记,并将属于给定VLAN的帧发送到配置为接受它的端口。这会将所有设置移动到桥接器本身,而不必使用VLAN子接口(当然,这些子接口仍然可以在某些设置中使用)。
这个特性不能通过过时的brctl命令获得,但是需要更新的bridge命令(以及通常的ip link命令)。这是一个更简单的设置(一个桥,没有子接口).
方法是将tap1配置为带有VLAN ( VID ) 5的标记桥端口,eth0也配置为VID 5,但设置为无标记:输出被取消标记,并且此VID配置为PVID (Port ):输入在桥内被标记。每个端口只能有一个PVID。
同时,可以选择地删除默认分配给每个端口的VLAN 1(当然,除非更复杂的设置需要多个VLAN)来保持一个干净的配置。
到目前为止,使用更新命令的设置应该如下所示:
ip link set eth0 up
ip link set tap1 up
# the following line could have directly included at bridge creation the additional parameter `vlan_filtering 1`
ip link add name br0 type bridge
ip link set tap1 master br0
ip link set eth0 master br0特定的VLAN感知桥设置,从激活功能开始:
ip link set dev br0 type bridge vlan_filtering 1
bridge vlan del dev tap1 vid 1
bridge vlan del dev eth0 vid 1
bridge vlan add dev tap1 vid 5
bridge vlan add dev eth0 vid 5 pvid untagged
ip link set br0 up请注意,桥的自隐式端口仍在使用VID 1,因此直接在桥上分配IP (就像在某些设置上所做的那样)现在将无法正常通信。如果确实需要这样的配置,您也可以使用稍微不同的语法(self)在VLAN 5中设置桥的自端口,因为它本身就是桥本身:
bridge vlan del dev br0 vid 1 self
bridge vlan add dev br0 vid 5 pvid untagged self通常更清晰的做法是(仍然删除桥的默认VID 1,以防止它与任何可能的交互),添加一个veth对,插入桥的一端,配置与eth0相同的桥vlan设置,并在另一端分配IP。
关于这个主题的好博客系列:
在未命名的Linux网络命名空间我 二、 三、 IV V VI VII 八。中使用veth设备、Linux网桥和VLANs。
https://unix.stackexchange.com/questions/546136
复制相似问题