linux網卡配置後發出帶vlan標籤的報文

先看常見的網卡配置文件(沒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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章