背景
对于具备多网口的服务器来说,启用多个网口很正常,正常情况下应该只有一个默认网关,其他网口配置明细路由,如果将服务器做为软路由,并且有两个外网网络,1主1备,则会需要配置网关默认网关,但必须要配置路由优先级,否则可能会导致网络问题。
测试拓扑如下:
1. 测试环境介绍
操作系统:CentOS7.6
网卡数量:2;网卡名称分为ens32和ens34
ens32配置:IP 192.168.211.101/24,网关192.168.211.2;
ens34配置:IP 192.168.0.101/24,网关192.168.0.254;
测试分两种情况:
(1)使用NetworkManager管理网络
(2)network管理网络
因为CentOS7及以上版本都是使用NetworkManager,但也有使用network的,所以两种情况都进行测试,默认情况下network工具未安装。
2. 安装网络工具
因为CentOS7默认没有network服务,先将network进行安装,然后测试:
yum install net-tools -y
net-tools软件包提供network服务以及ifconfig、route等命令。
3. 使用NetworkManger管理网络
先停用network服务,启用NetworkManager服务:
systemctl stop network
systemctl start NetworkManager
3.1 配置IP地址
这里我直接使用nmcli命令配置IP地址等信息。
配置网卡ens32的IP地址:
nmcli conneciton add con-name ens32 ifname ens32 type ethernet
nmcli connection modify ens32 ipv4.addresses 192.168.211.101/24 ipv4.gateway 192.168.211.2 ipv4.method manual connection.autoconnect yes
nmcli connection up ens32
配置网卡ens34的IP地址:
nmcli conneciton add con-name ens34 ifname ens34 type ethernet
nmcli connection modify ens34 ipv4.addresses 192.168.0.101/24 ipv4.gateway 192.168.0.254 ipv4.method manual connection.autoconnect yes
nmcli connection up ens34
注意,此时只是将网卡配置IP地址和网关信息,路由优先级接下来配置。
3.2 查看路由
route -n
ip route show
当使用NetworkManager管理网络时,会自动设置优先级。因为是自动生成的优先级,可能不符合需求,此时可以手动设置优先级,假设需要将ens34的优先级修改为80。
配置IP地址时可以执行命令:
nmcli connection modify ens34 ipv4.addresses 192.168.0.101/24 ipv4.gateway 192.168.0.254 ipv4.method manual connection.autoconnect yes ipv4.route-metric 80
在原来配置上进行修改:
nmcli connection modify ens34 ipv4.route-metric 80
重启网卡
nmcli connection down ens34 && nmcli connection up ens34
再次查看路由表,优先级已经生效:
4. 使用network管理网络
先启用network服务,停用NetworkManager服务:
systemctl start network
systemctl stop NetworkManager
4.1 查看路由信息
当使用network服务管理网络时,只能看到一条默认路由:
系统自动把另外一条默认路由屏蔽了,ens34网卡上设置的路由优先级在这里也不显示了。
查看ens32网卡配置:
cat /etc/sysconfig/network-scripts/ifcfg-ens32
使用nmcli命令配置的IP信息可以在网卡配置信息中看到;
查看ens34网卡配置:
cat /etc/sysconfig/network-scripts/ifcfg-ens34
配置的路由优先级在网卡配置文件中也可以查看到。
4.2 配置优先级
这里我直接跟大家说配置方法:
第一步:在网卡配置文件中将所有默认网关取消;
第二步:使用命令配置路由;
4.2.1 取消网关
这里我将原配置文件中网关配置注释掉:
重启网络服务:
systemctl restart network
重启网络服务后,没有默认路由了。
4.2.2 临时配置
在增加路由时设置优先级即可:
ip route add 0.0.0.0/0 via 192.168.211.2 dev ens32 metric 100
ip route add 0.0.0.0/0 via 192.168.0.254 dev ens34 metric 80
4.2.3 永久性配置
很多人说将命令写入到/etc/rc.d/rc.local文件中,这样服务器重启服务器自动设置路由优先级,这个方法确实是可以,前提条件是你不能再手动重启network服务,否则路由会消失,测试情况如下:
修改/etc/rc.d/rc.local,末尾增加行:
ip route add 0.0.0.0/0 via 192.168.211.2 dev ens32 metric 100
ip route add 0.0.0.0/0 via 192.168.0.254 dev ens34 metric 80
将文件增加可执行权限:
chmod +x /etc/rc.d/rc.local
重启服务器测试,当重启服务器后,路由也配置成功了,一旦重启network服务,路由条目则会消失:
所以这个方法不是最优配置。
下面我教大家一个比较好的方法。
注:先将上一步在/etc/rc.d/rc.local文件的配置取消。
将路由配置命令写入到/etc/init.d/network文件中:
vi /etc/init.d/network
#在倒数第1行(exit $rc)的前1行增加
ip route add 0.0.0.0/0 via 192.168.211.2 dev ens32 metric 100
ip route add 0.0.0.0/0 via 192.168.0.254 dev ens34 metric 80
刷新配置文件:
systemctl daemon-reload
重启网络:
systemctl restart network
可以看到,重启network网络服务后,路由表立即生效;
当然,重启服务器配置也会生效。
5. 总结
通常情况下,一般只将第一张网卡配置默认网关,而第二张网卡配置明细路由,特殊情况需要配置两个默认网关的,可以将配置命令写在/etc/init.d/network文件中。