vlanid
linux中brctl建立的一个br设备,只能实现一个vlan的报文转发;
一个接口输出的报文如果需要增加vlan id,则需要建立vlan子接口;
一个vlan子接口只接收该物理接口中的带相关vlan id的报文;
一个vlan子接口发送的报文,在该物理接口发送时会携带vlan id;
command:
#新建虚拟网络,方便在一个物理机里的模拟两个子网之间的通信
ip netns add ns1
ip netns add ns2
#新建veth pair接口,实现底层联通的一对虚拟接口
ip link add veth0_0 type veth peer name veth0_1
ip link add veth1_0 type veth peer name veth1_1
ip link add veth2_0 type veth peer name veth2_1
ip link add veth3_0 type veth peer name veth3_1
ip link add veth4_0 type veth peer name veth4_1
#新建vlan子接口,该接口将收发带vlan tag的报文
ip link add link veth4_0 name veth4_0.100 type vlan id 100
ip link add link veth4_0 name veth4_0.200 type vlan id 200
ip link add link veth4_1 name veth4_1.100 type vlan id 100
ip link add link veth4_1 name veth4_1.200 type vlan id 200
#新建bridge设备
brctl addbr br100_0
brctl addbr br100_1
brctl addbr br200_0
brctl addbr br200_1
#给bridge设备连接接口
brctl addif br100_0 veth0_0 veth4_0.100
brctl addif br100_1 veth2_0 veth4_1.100
brctl addif br200_0 veth1_0 veth4_0.200
brctl addif br200_1 veth3_0 veth4_1.200
#相关设备linkup
ip link set dev br100_0 up
ip link set dev br100_1 up
ip link set dev br200_0 up
ip link set dev br200_1 up
ip link set dev veth0_0 up
ip link set dev veth1_0 up
ip link set dev veth2_0 up
ip link set dev veth3_0 up
ip link set dev veth4_0 up
ip link set dev veth4_0.100 up
ip link set dev veth4_0.200 up
ip link set dev veth4_1 up
ip link set dev veth4_1.100 up
ip link set dev veth4_1.200 up
#把源设备和目的设备放到不同的虚拟网络中进行隔离,避免其绕开bridge进行直接通信
ip link set veth0_1 netns ns1
ip link set veth1_1 netns ns1
ip link set veth2_1 netns ns2
ip link set veth3_1 netns ns2
#给原设备和目的设备设置IP地址
ip netns exec ns1 ifconfig veth0_1 10.10.0.1 netmask 255.255.255.0
ip netns exec ns1 ifconfig veth1_1 10.10.1.1 netmask 255.255.255.0
ip netns exec ns2 ifconfig veth2_1 10.10.0.2 netmask 255.255.255.0
ip netns exec ns2 ifconfig veth3_1 10.10.1.2 netmask 255.255.255.0
#从源设备ping目的设备
ip netns exec ns1 ping 10.10.0.2
ip netns exec ns1 ping 10.10.1.2
#tcpdump抓包验证收到了带vlan id的报文
tcpdump -i veth4_0 -xxe
tcpdump -i veth4_1 -xxe
ip netns exec ns1 tcpdump -i veth0_1 -xxe
ip netns exec ns2 tcpdump -i veth2_1 -xxe
经过验证,我们可以通过vlan子接口来实现vlan tag的产生和总结;