先看常見的網卡配置文件(沒vlan)
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=04cb4fa6-f820-45c0-b847-df94e9628bc5
DEVICE=eth0
ONBOOT=yes
GATEWAY=192.168.1.254
IPADDR=192.168.1.100
NETMASK=255.255.255.0
這樣的主機網卡將連接到一個交換機的Access網口上 ,主機網卡上的配置不需要考慮底層的網絡,即主機網卡配置不考慮vlan,交換機上將給這個網卡發出報文打上標籤。
KVM場景下帶有vlan的網卡
下面組網圖中一個部署KVM hypervisor的主機網卡連接到交換機上帶有3個vlan的trunk網口上,第一個vlan是trunk native vlan 100,第2個和第3個 vlan200和300,通過這兩個網口會攜帶802.1Q tag,因此需要在主機上配置並識別vlan。
首先要保證802.1Q內核模塊加載成功。如果配置vlan子接口,實際上該模塊是自動加載的。
# lsmod | grep 8021q
# modprobe 8021q
# lsmod | grep 8021q
8021q 33208 0
garp 14384 1 8021q
mrp 18542 1 8021q
像大多數網絡配置一樣,需要在/etc/sysconfig/network-scripts下相應的網卡配置文件中設置vlan。不同於其他網卡配置,網卡名字是父網卡名稱+vlanID,比如eth0.200,這一設置將vlan和對應父網卡相關聯,另外網卡配置文件中VLAN=yes指令將配置出一個vlan子接口。
基於上文的eth0網卡,針對vlan200和vlan300,配置相應子接口。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.200
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0.200
UUID=04cb4fa6-f820-45c0-b847-df94e9628bc5
DEVICE=eth0.200
ONBOOT=yes
IPADDR=192.168.2.100
NETMASK=255.255.255.0
VLAN=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eth0.300
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0.300
UUID=04cb4fa6-f820-45c0-b847-df94e9628bc5
DEVICE=eth0.300
ONBOOT=yes
IPADDR=192.168.3.100
NETMASK=255.255.255.0
VLAN=yes
vlan配置後,需要重啓網絡服務以激活子接口
# systemctl restart network
# ip --br link show
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 52:54:00:82:d6:6e <BROADCAST,MULTICAST,UP,LOWER_UP>
eth0.200@eth0 UP 52:54:00:82:d6:6e <BROADCAST,MULTICAST,UP,LOWER_UP>
eth0.300@eth0 UP 52:54:00:82:d6:6e <BROADCAST,MULTICAST,UP,LOWER_UP>
# ip --br addr sh
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 192.168.1.100/24 fe80::5054:ff:fe82:d66e/64
eth0.200@eth0 UP 192.168.2.100/24 fe80::5054:ff:fe82:d66e/64
eth0.300@eth0 UP 192.168.3.100/24 fe80::5054:ff:fe82:d66e/64
以上兩個子接口eth0.200 and eth0.300,任何從這些子接口上發出的包packets將會打上相應的vlan。
抓個包可以看到報文中802.1Q field,就是子接口中相應的vlan 200配置:
總結
1. 網卡都不配置vlan,怎麼上通過交換機通信,至少連接到配置Access vlan的交換機的網口上。報文到交換機上打上Access vlan的標籤。
2. 打了vlan標籤的網卡,連接到交換機上配置trunk vlan的網口,報文在交換機trunk vlan範圍內則通過。
3. 打了vlan標籤的網卡,要注意連接到交換機上的網口不能配置trunk native vlan和網卡上vlan的一模一樣,這樣報文從主機到交換機沒問題,在trunk vlan範圍內可以進入交換機,但報文從交換機出去要返回到主機上時會被剝離vlan id而導致單通。
4. 如果一張網卡即做多個vlan又有子接口不做vlan的,不打vlan標籤的子接口所連接的交換機要配置trunk native vlan,還要配置trunk vlan。
參考
How to configure a VLAN in Linux
https://www.redhat.com/sysadmin/vlans-configuration