教你如何在Linux上劃分VLAN
在某些場景中,我們希望在Linux服務器(CentOS / RHEL)上的同一網卡分配來自不同VLAN的多個ip。這可以通過啟用VLAN標記接口來實現,但要實現這一點,首先必須確保交換機上添加多個vlan。
假設我們有一個Linux服務器,其中有兩個以太網卡(ens33和ens38),第一個網卡(ens33)用于數據流量,第二個網卡(ens38)用于控制/管理流量。對于數據流,將使用多個vlan(將在數據流網卡上分配來自不同vlan的多個ip)。
假設從交換機連接到服務器數據流量網卡的端口被配置為Trunk,通過映射多個vlan到它。下面是映射到數據流量網卡的vlan:
- VLAN ID (200),172.168.10.0/24
- VLAN ID (300),172.168.20.0/24
在CentOS 7 /RHEL 7 / CentOS 8 /RHEL 8系統上使用VLAN標記接口,必須加載內核模塊8021q。
使用以下命令加載內核模塊“8021q”
- # 先列出模塊,發現沒有8021q模塊。
- [root@localhost ~]# lsmod | grep -i 8021q
- # 加載模塊
- [root@localhost ~]# modprobe --first-time 8021q
- [root@localhost ~]# lsmod | grep -i 8021q
- 8021q 33080 0
- garp 14384 1 8021q
- mrp 18542 1 8021q
使用modinfo命令列出8021q的信息:
- [root@localhost ~]# modinfo 8021q
現在使用ip命令創建vlan 200和vlan 300到ens33網卡:
- # 創建vlan 200和vlan 300
- [root@localhost ~]# ip link add link ens33 name ens33.200 type vlan id 200
- [root@localhost ~]# ip link add link ens33 name ens33.300 type vlan id 300
發現ens33.200和ens33.300的鏈路狀態為DOWN,下面啟用它們。
- # 啟用vlan 200 和vlan 300
- [root@localhost ~]# ip link set ens33.200 up
- [root@localhost ~]# ip link set ens33.300 up
下面為兩個vlan 分配ip地址:
- [root@localhost ~]# ip address add 172.168.10.51/24 dev ens33.200
- [root@localhost ~]# ip address add 172.168.20.51/24 dev ens33.300
可以看到ens33.200和ens33.300已經配置好ip地址了。
但是上面使用ip address添加的VLAN和地址不會永久生效的。重啟系統之后都不存在了。我們需要把這些配置保存在配置文件里面。
首先修改ifcfg-ens33的配置文件,其次創建ifcfg-ens33.200和ifcfg-ens33.300配置文件:
- [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- BOOTPROTO=none
- DEVICE=ens33
- ONBOOT=yes
接下來為vlan 200創建配置文件,命名為ifcfg-ens33.200
- [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33.200
- DEVICE=ens33.200
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=172.168.10.51
- PREFIX=24
- NETWORK=172.168.10.0
- VLAN=yes
接下來為vlan 300創建配置文件,命名為ifcfg-ens33.300
- [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33.300
- DEVICE=ens33.300
- BOOTPROTO=none
- ONBOOT=yes
- IPADDR=172.168.20.51
- PREFIX=24
- NETWORK=172.168.20.0
- VLAN=yes
編輯完配置文件,重啟一下網絡服務。
- [root@localhost ~]# systemctl restart network
可以看到vlan200,300的信息都沒有消失。