最近在折腾linux多vlan,记录一下,整理整理混乱的头绪。

整体需求是双网卡配置,一张网卡(enp4s0f1)单独做管理,有单独的网络信息;另一张网卡(enp3s0f2)配置给kvm使用,kvm里分布多个vlan的虚拟机;为啥kvm就没有vmware那种方便的网络管理工具!
我也不知道为啥会有这个需求( ̄﹏ ̄;)

管理网段:192.168.1.200/24 gw 192.168.1.254
KVM网卡:172.16.12.100/25 gw 172.16.12.126 VlanID 1701;172.15.2.200/24 gw 172.15.2.254, VlanID 2309;

1.整体思路

enp4s0f1网卡配置192.168.1.0/24网段,并配置默认网关,按照正常网卡配置流程,本文不做赘述;
enp3s0f2网卡创建N个虚拟网卡,并根据vlan要求配置相关网络信息,但是不配置默认网关;
根据多valn情况分别创建路由表,写入策略路由,多vlan网络不走默认网关,直接查询路由表

!!!enp3s0f2网卡对应交换机网口必须配置trunk口模式

2.虚拟网卡创建

需要vconfig软件支持,yum进行安装

yum  install  vconfig

若是找不到vconfig安装包,直接下载rpm包安装;
安装完成后,确认vconfig命令是否可用,如果vc可以table出来,证明软件安装成功.

先进入802.1q模式

modprobe  8021q  //需要加入开机启动

可以使用lsmod查看是否进入核心

lsmod  |  grep  8021q

如果看到以下输出,证明8021q核心载入成功
lsmod查询结果

使用vconfig命令,增加子接口,VlanID不能错,如果ID有错,网络会不通,而且主网卡必须可用;

vconfig  add  enp3s0f2  1701 
vconfig  add  enp3s0f2  2309

创建完成后,使用ifconifg命令会看到多出了虚拟网卡信息,也可以使用以下命令查看

ls  /proc/net/vlan

创建好虚拟网卡后,进入/etc/sysconfig/network-scripts目录cp一个网卡配置文件

cp ifcfg-enp3s0f2 ifcfg-enp3s0f2.1701
cp ifcfg-enp3s0f2 ifcfg-enp3s0f2.2309

使用vim编辑编辑配置,推荐按照以下模板更改

TYPE=Ethernet
DEVICE=enp3s0f2.1701
BOOTPROTO=static
NAME="enp3s0f2.1701"
ONBOOT=yes
VLAN=yes
MACADDR=0C:C4:7A:52:2B:8C   //虚拟网卡最好不要使用HWADDR,同时MAC地址不要重复
IPADDR=172.16.12.100
NETMASK=255.255.255.128
NM_COTROLLED=no

编辑好配置文件后,修改网卡的MAC地址,不知道什么原因,重启网络服务并不能修改虚拟网卡的MAC地址

ifconfig enp3s0f2.1701 hw ether 0C:C4:7A:52:2B:8C 

之后重启网卡服务,ifconfig查看网卡信息,确认IP及MAC信息

3.创建路由

当前有两个vlan需要使用路由,创建两个路由表

vim  /etc/iproute2/rt_tables

添加两个路由表

100   net1701    //100为路由表编号,net1701为路由表名字
101   net2309

配置策略路由

 ip rule add from 172.16.12.100 table net1701    //所有请求 172.16.12.100 地址的请求查询路由表 net1701 

 ip  route  add  default  via  172.16.12.126  dev  enp3s0f2.1701  src  172.16.12.100  tables net1701     //  添加路由策略,所有对172.16.12.100 地址的请求查询路由表 net1701,同时默认路由为 172.16.12.100 所在网关 172.16.12.126,默认物理出口enp3s0f2.1701

至此大体完成。

4.编写开机脚本

为了防止linux可能会偶尔抽风,建议将虚拟网卡创建及策略路由添加加入开机脚本,为了方便管理,分别以独立脚本存在

虚拟网卡部分,命名为vlan.sh

modprobe  8021q
ifconfig  enp3s0f2 0.0.0.0
vconfig  add  enp3s0f2  1701 
vconfig  add  enp3s0f2  2309
ifconfig  enp3s0f2.1701
ifconfig  enp3s0f2.2309
ifconfig  enp3s0f2.1701 172.16.12.100 netmask 255.255.255.128  up
ifconfig  enp3s0f2.2309 172.15.2.200   netmask 255.255.255.255  up
ifconfig  enp3s0f2.1701 hw ether 0C:C4:7A:52:2B:8C 
ifconfig  enp3s0f2.2309 hw ether 0C:C4:7A:52:2B:9C 

策略路由部分,命名route.sh

ip route flush table net1701      //刷新 net1701 路由表 
ip route flush table net2309      //刷新 net2309 路由表 
ip rule add from 172.16.12.100 table net1701  
ip rule add from 172.15.2.200 table net2309
ip  route  add  default  via  172.16.12.126  dev  enp3s0f2.1701  src  172.16.12.100  tables net1701
ip  route  add  default  via  172.15.2.254  dev  enp3s0f2.2309  src  172.15.2.200  tables net2309

将以上两个脚本加入rc.local文件

至此所有配置全部完成。