最近一周多以来被一个网络问题一直困扰着,上周开始有同事反应使用在笔记本上安装虚拟机后网络不通,当时也没在意,重启网卡后正常,后来不行,将动态IP设置为静态后可以了,当时以为是个例。过了几天又有两三个人反应有同样问题,不得已在自己电脑上也安装了同样环境,结果问题都复现了。期间也尝试了好多种解决办法,刚开始比较急,也比较浮躁,以为是用户客户端自己的问题,但后来随着问题深入,发现应该和网络有关,在网上上查询了并尝试了很多操作,但没有能够解决问题,有点气馁,因为一直找不到问题根源所在,当时也找过好几个厂家技术人员,但每次听说问题描述后都一直表明和路由器无关,所以每次都不了了之。
为此网上查找了很多关于虚拟机网络配置,ARP相关信息,在了解ARP相关知识后,怀疑应该是路由器哪里配置问题,无法学习虚拟机的MAC导致,尝试在路由器上手动添加宿主机Mac+虚拟机IP对应后,虚拟机网络正常,虽然没有彻底解决问题,但比上周有了一点进步,也更加明确这是ARP设置问题。
一早联系厂家技术人员,说明问题后对方还是用同样里有拒绝,后来不甘心,把之前尝试的一些操作都告知对方后,对方让我发送路由器配置信息,结果一眼就看出了是因为启用了ARP强制学习导致,取消该功能后重启虚拟机网络,一切正常。
后来回想起来,之前又一次网络问题怀疑是ARP攻击,所以在路由器上启用了这个功能,但是后来遗忘了,解决这个问题用了不到5分钟,但教训是深刻的。
首先是在解决问题时没有认真仔细对待,当时以为是个体问题,所以也就用其他方式应对了,没有去深入;
其次在解决问题时没有准确定位,主要一是因为开始时没有在一个测试环境复现问题,另外也从没有认真的思考到底是什么原因,没有从一个整体去思考,比如应该从虚拟机--宿主机-AP-路由器一个一个排查;
第三是之前做了网络配置没有详细记录,以为小的配置改变就不记录,导致后来想不起来,也为排查问题延误了时间,因为这个问题之前是不存在的,所以怀疑是不是哪一次做了配置或其他改变因为,由于之前做了路由器升级,一直以为是升级导致;
最后是对自己自信不够,觉得这个问题太复杂,要寻求厂商协助,最后厂商把问题踢回来后还得自己解决。
从这个问题中也学习了虚拟机网络模式,ARP相关知识,也是一个好处,另外也告诫自己,以后碰到问题一定要冷静,专心的分析,不要三心二意,从源头原理上去分析问题,一步一步排查,必要的时候寻求第三方解决,最后也得相信自己,只要专注思考,认真仔细的去排查,肯定会找到问题根源并解决的。
故障现象:
Mac或其他系统安装虚拟机的笔记本,连接无线网络后,虚拟机可以从路由器上获取IP,但是无法Ping 网关或其他内网同网段客户机,除了安装虚拟机的宿主机。路由器也无法Ping虚拟机。
网络连接方式:
虚拟机--笔记本(宿主机)--AP--POE AP交换机--华为路由器
环境:
宿主机涉及Mac 操作系统,Windows 10, Ubuntu。
虚拟机软件:Vmware Fucsion, Vmware workatation, Oracle Virtualbox。
虚拟机系统: Centos 7, Windows 7, Ubuntu.
宿主机和虚拟机用的是桥模式。
路由器(网关/DHCP server): 华为AR1220E-S
AP: 华为AP2010DN
排查步骤:
1). 重启虚拟机网络服务,无法解决问题;
2). 将虚拟机IP设置为静态,有的虚拟机网络正常,但是有的不正常;
3). 尝试多次断开宿主机网络连接,有的虚拟机可以,但有的不行;
4). 检查宿主机网络和虚拟机网络连接,网络正常;
5). 检查路由器设置,路由器ARP信息里没有虚拟机IP和MAC地址对应信息,但是路由器DHCP客户表里有虚拟机IP和MAC;
6). 通过抓包软件在宿主机上发现,虚拟机ping 网关后没有响应。
在虚拟机上ping 网关然后在宿主机上抓包,发现ping 请求后发出后得到的是:no response found,也就是无响应。
如果将笔记本连接在有线网络则虚拟机网络正常;
将笔记本带回家连接家里路由器,发现虚拟机网络正常;
将虚拟机网络由桥模式改为NAT,正常;
在路由器ARP设置里,手动添加静态MAC地址表,添加虚拟机IP和宿主机MAC地址映射后,虚拟机网络正常;
重启路由器,重启后正常,但第二天故障依旧。
解决方法:
因为路由器启用了强制ARP学习,关闭后重启虚拟机网络服务即正常。
路由器配置:
[CS-Router01]undo arp learning strict
即在路由器上关闭ARP严格学习,在网页"安全"--"安全防护"--"ARP防攻击"--"ARP严格学习" 关闭。
虚拟机配置(Centos7):
systemctl restart network
参考资料:
1). arp learning strict(系统视图):
http://support.huawei.com/hedex/pages/EDOC1000085881DZF0920H/09/EDOC1000085881DZF0920H/09/resources/dc/arp_learning_strict_system_view.html?ft=0&fe=10&hib=11.1.17.12.18&id=arp_learning_strict_system_view&text=arp%2520learning%2520strict%25EF%25BC%2588%25E7%25B3%25BB%25E7%25BB%259F%25E8%25A7%2586%25E5%259B%25BE%25EF%25BC%2589&docid=EDOC1000085881
该命令应用场景:
如果大量用户在同一时间段内向设备发送大量ARP报文,或者攻击者伪造正常用户的ARP报文发送给设备,则会造成下面的危害:
设备因处理大量ARP报文而导致CPU负荷过重,同时设备学习大量的ARP报文可能导致设备ARP表项资源被无效的ARP条目耗尽,造成合法用户的ARP报文不能继续生成ARP条目,导致用户无法正常通信。
伪造的ARP报文将错误地更新设备ARP表项,导致合法用户无法正常通信。
为避免上述危害,可以在网关设备上使能ARP表项严格学习功能。只有本设备主动发送的ARP请求报文的应答报文才能触发本设备学习ARP,其他设备主动向本设备发送的ARP报文不能触发本设备学习ARP,这样,可以拒绝大部分的ARP报文攻击。
The global configuration:
Interface LearningStrictState
Total:0
Force-enable:0
Force-disable:0
2). ARP学习失败故障启示录
http://support.huawei.com/huaweiconnect/enterprise/zh/thread-437689.html
3). ARP 学习理解
https://wenku.baidu.com/view/a474111bba0d4a7303763a82.html
4).使用地址解析协议 (ARP) 对网络连接问题进行故障排除
https://kb.vmware.com/s/article/2077864?r=2&Quarterback.validateRoute=1&KM_Utility.getArticleData=1&KM_Utility.getGUser=1&KM_Utility.getArticleLanguage=1&KM_Utility.getArticle=1