问题的解决常常都会感觉很简单,但是排查的过程比较复杂和漫长,有时候简单的一个配置问题需要花费超出预期很长的时间才能定位到。本文针对之前遇到的KVM虚拟机不能访问网关问题排查的过程记录下来,供大家进行参考!
背景介绍
实验室有个CentOS7的服务器,上面创建了若干个虚拟机。这些虚拟机之前使用都很正常。虚拟机通过网络桥接模式,可以上外网,访问同网段的其它节点。然而,当某次下电之后,噩梦就开始了。宿主机上电之后,宿主机的网络一切正常,访问外网,其它节点机器都很正常。虚拟机启动也很正常,但是就是虚拟机的网络异常:
虚拟机有时候能够ping通宿主机,有时候ping不通宿主机;
虚拟机ping不通网关地址,同样也不能访问同网段的其它地址;
宿主机可以ping通虚拟机,也可以在宿主机上ssh登录虚拟机;
排查过程
因为在宿主机下电之前,所有的使用都是正常的,因此配置方面不大可能出现问题。根据现象,可以判断是网桥的配置出现问题,但是到底是哪个部分的问题?为什么重新启动之后就发生变化了?
重启节点或者网络
稍微检查了一下网络之后,照例将宿主机重启了一下,发现并没有解决问题。
(实践证明,重启宿主机或者虚拟机来解决问题的可能性不大)
检查网桥的网络配置
因为在问题出现前后并没有做手动配置的更改,因此这个方面的可能性几乎不存在。为了稳妥起见,还是把宿主机上的配置检查了一下
确认网络配置文件中没有错别字或者书写错误;
确认宿主机上网络连接都是正常的(命令参考nmcli device 或者nmcli connection);
检查路由的配置
在宿主机或者虚拟机中检查路由的信息,配置都是正常的。
(命令参考route)
检查网络的状态
检查网桥的状态(命令参考brctl show),这个时候就看到虚拟机启动之后生成的那些虚拟机网卡设备(vnetx)并没有附着在网桥上。
使用命令brctl addif brx vnety 将目前启动的2个虚拟机的网卡附着在网桥上。
奇怪的是,现在再启动其它虚拟机,对应网卡就自动附着在网桥上了,不需要手动进行添加操作。