一、事件背景
远程通过ssh连接服务器后,执行命令 nmcli con modify ens33 ipv4.dns 8.8.8.8 为ens33网卡添加dns,然后执行命令 nmcli c up ens33 命令重新激活网卡,此时远程网络连接中断,通过串口连接服务器执行 systemctl restart network 重启网络后网络服务正常。
二、问题排查
> 怀疑网卡启动失败
执行重启网卡的命令后,通过串口连接服务器执行 ip addr 发现网卡正常启动,同时发现服务器存在多块网卡。如下图所示【图片为问题解决后通过虚拟机模拟场景复现】
![](https://img-blog.csdnimg.cn/20210826193433805.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
执行 nmcli device status 发现网卡也保持连接状态,并没什么异常
![](https://img-blog.csdnimg.cn/20210826193741569.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
> 怀疑network与NetworkManager服务冲突
因为服务器中同时运行network与NetworkNanager两种服务,但是本地其他服务器中同时也启动该两种服务后,重启网卡并没有报错,通过状态查询两种服务并没有什么异常。此时查看服务器/var/log/message日志文件,发现以下内容,重启网卡后,默认路由和dns改成其他网卡配置的相关信息。
![](https://img-blog.csdnimg.cn/20210826194318148.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
通过以上信息发现,网卡虽然正常启动,但默认路由和dns已经发生改变。
> 怀疑网卡重启后,服务器路由表发生变化
执行ip route show 查看服务器配置路由,如图所示
![](https://img-blog.csdnimg.cn/20210826194857734.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
通过以上信息发现服务器添加了两个默认路由,优先级默认为100 与 101 ,mertric值越小,优先级越高。
执行route -n 查看服务器路由表
![](https://img-blog.csdnimg.cn/20210826195121385.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
通过以上信息发现,两块网卡目的地址都是任意网络,优先级eno16777736网卡路由高于ens37。
推测:由于两块网卡设置的都是任意网络可走,在重新启动eno16777736网卡时,导致ens37配置的路由优先级高于了eno16777736,因此造成eno16777736网卡网络故障。
三、推测验证
> 未设置网卡路由优先级时
* 未重启网卡
执行 route -n 命令,如图所示
![](https://img-blog.csdnimg.cn/20210826195121385.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
此时,eno16777736网卡路由优先级高于ens37,因为eno16777736网卡能访问外网,此时ping 百度正常。如图所示:
![](https://img-blog.csdnimg.cn/20210826201453886.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
重启eno16777736网卡,执行 route -n 命令,如图所示
![](https://img-blog.csdnimg.cn/20210826201005783.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
此时发现,第一条路由不再是eno16777736网卡的路由,而是变成了ens37的,因为我ens37网卡没有外网,此时ping 百度已经不再ping 通,说明此时使用的是ens37的路由。
![](https://img-blog.csdnimg.cn/2021082620130676.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
> 设置网卡路由优先级
在eno16777736网卡配置文件中添加 IPV4_ROUTE_METRIC=0,将该网卡路由设置最高,并重启网络【systemctl restart network】 测试发现,在网卡中设置路由优先级重启网卡不能生效,必须重启网络才能生效。
此时执行 route -n 命令发现eno16777736 metric值为0,优先级最高。
![](https://img-blog.csdnimg.cn/20210826202407653.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
再次重启eno16777736网卡,执行route -n 命令
![](https://img-blog.csdnimg.cn/20210826202505891.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
以上信息显示eno16777736 路由优先级还是最高。此时ping 百度,网络依然正常。
![](https://img-blog.csdnimg.cn/20210826202702818.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rKh5p6V5aS05oiR5ZKL552h6KeJ,size_20,color_FFFFFF,t_70,g_se,x_16)
至此,问题解决!