本文续《Linux网络接口和VLAN配置》http://blog.csdn.net/melancholy123/article/details/70232889
之前一直使用TE
部门提供的SUSE
系统,因此真正使用Ubuntu
配置VLAN
并且用于生产环境还是第一次,果然想象中预计几分钟的事情花费了几个小时才搞定,其实Ubuntu
本身定位就是桌面Linux
系统,虽然也有Ubuntu Server
的版本,但还是觉得Red Hat
系对服务器配置更加友好,当然不排除先入为主的观念,毕竟Red Hat
是我上学时服务器系统领域近乎唯一的选择。
使用Ubuntu 16.04.3 LTS
版本安装完成进入系统后发现新版系统内核对interface
的默认命名不在是熟悉的ethx/wlanx
而是enp2s0/wlp3s0
这种格式,这本来是无所谓的事情但是当我在/etc/network/interfaces
里配置VLAN
接口后,重启网络服务就会报错。
root@hp:/home/hp# systemctl status networking.service
11月 02 16:27:11 hp systemd[1]: Starting Raise network interfaces...
11月 02 16:27:21 hp ifup[2278]: Cannot find device "enp2s0.101"
11月 02 16:27:21 hp ifup[2278]: Failed to bring up enp2s0.101.
11月 02 16:27:21 hp systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
在确定8021q
模块加载后才开始怀疑是接口命名的问题,于是新建/etc/udev/rules.d/70-persistent-net.rules
文件用来指定接口名称,但无论是重启网络服务还是重启系统均只有wlan0
更正成功,eth0
始终无法正确显示,对比后发现可能是KERNEL
字段不匹配导致,于是删除KERNEL
字段两个网口的名称才最终正确显示。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="3c:52:82:2f:58:98", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c8:21:58:d0:5c:14", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
随后使用eth0
网口名称配置VLAN
重启网络服务后VLAN
生效。
Ubuntu VLAN Flow
1.安装VLAN
软件包,Ubuntu
系统下使用apt-get install vlan
进行安装。
2.加载8021q
内核模块,可使用modprobe 8021q
命令加载模块,使用lsmod | grep 8021q
检查该模块是否加载,使用echo "8021q" > /etc/modules
将该模块添加到默认加载列表中。
3.使用ip link
命令查看物理网口的MAC
地址,新建或修改/etc/udev/rules.d/70-persistent-net.rules
指定物理网络接口名称,个人认为该条目里的字段越少越不容易出错,重启网络服务后生效。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="3c:52:82:2f:58:98", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c8:21:58:d0:5c:14", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="wlan0"
4.编辑/etc/network/interfaces
网路配置文件,Ubuntu
仅支持<interface>.<VID>
的VLAN
接口命令方式和<interface>:<N>
的多IP
绑定方式,重启网络服务后生效。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.163.201.184
netmask 255.255.255.0
gateway 10.163.201.1
mtu 1500
auto eth0.101
iface eth0.101 inet static
address 192.168.200.2
netmask 255.255.255.0
network 192.168.200.0
broadcast 192.168.200.255
mtu 1492
5.使用cat /proc/net/vlan/config
查看当前VLAN
配置。
root@hp:/etc/network# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.101 | 101 | eth0
SUSE VLAN Flow
1.安装VLAN
软件包,SUSE
系统下使用zypper in vlan
进行安装。
2.加载8021q
内核模块,可使用modprobe 8021q
命令加载模块,使用lsmod | grep 8021q
检查该模块是否加载,使用echo "modprobe 8021q" > /etc/rc.local
使其开机加载。
3.使用ip link
命令查看物理网口的MAC
地址,新建或修改/etc/udev/rules.d/70-persistent-net.rules
指定物理网络接口名称,个人认为条目里字段越少越不容易报错,重启网络服务后生效。
SUBSYSTEM=="net", BUS=="pci", ID=="0000:03:00.0", NAME="ext"
SUBSYSTEM=="net", BUS=="pci", ID=="0000:0b:00.0", NAME="int"
4.编辑/etc/sysconfig/network/
路径下ifcfg-<interface>
网口配置文件和ifcfg-vlan<VID>
网口VLAN
配置文件,除此之外SUSE
等Red Hat
系系统还支持ifcfg-<interface>.<VID>
和ifcfg-<anyname>
两种VLAN
配置文件,重启网络服务后生效。
由上可知SUSE
支持三种interface
及其ifcfg
文件的命名方式,其中<interface>.<vid>
的命名方式可以避免vlan<vid>
命名方式产生的不同物理接口无法定义相同的VLAN ID
的问题,<anyname>
的方式最为灵活但并不直白,接口较多的情况下会让维护工作比较困难。
但无论哪种名称方式,ifcfg
文件中都需要使用ETHERDEVICE
指定所基于的物理interface
,不像前两种方式在interface
名称上就指明了VLAN ID
,<anyname>
的方式还需要在ifcfg
文件内使用VLAN_ID
指定VID
。
/etc/sysconfig/network/ifcfg-int:
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='10.163.118.24/23'
MTU=''
NAME='82545EM Gigabit Ethernet Controller (Copper)'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
/etc/sysconfig/network/ifcfg-vlan2022:
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='20.1.43.0/22'
MTU='9000'
NAME='VMXNET3 Ethernet Controller'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ETHERDEVICE='int'
VLAN='yes'
IPADDR_0='20.1.43.1/22'
LABEL_0='1'
IPADDR_1='20.1.43.2/22'
LABEL_1='2'
IPADDR_2='20.1.43.3/22'
LABEL_2='3'
IPADDR_3='20.1.43.4/22'
5.使用cat /proc/net/vlan/config
命令查看当前VLAN
配置。
hp:/etc/sysconfig/network # cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_PLUS_VID_NO_PAD
vlan2021 | 2021 | int
vlan2022 | 2022 | int
vlan2023 | 2023 | int
vlan2024 | 2024 | int