基本思路:
- 确定问题缩小范围。先外部后内部,利用排除法、类比法、替换法(隔离法)将故障范围逐渐缩小到某一点。
- 谨慎做出结论。下结论前先三思,想到所有可能存在问题的点,特别是与别人讨论和描述问题时更应该注意。
- 记录问题。做好文档备案工作,如记录故障现象、故障分析、故障原因、处理流程、处理结果、结论与经验等。
相对于虚拟机,物理机ping不通网关的故障更好排查一些,因为虚拟机在于物理交换机通信的过程中存在一个中间层,中间层可能为宿主主机上的标准交换机或者某个分布式交换机。但无论是标准交换机还是分布式交换机一般都不会处理三层网络,尽管有的分布式交换机能处理三层网络,如Cisco Nexus 1000v。因此只要在配置虚拟机硬件时,给网络适配器选择的网络标签(Vlan ID)正确,一般问题就不会发生在虚拟交换机层面。如果对虚拟交换机是否存在故障不能确定,可以通过查看与故障虚拟机同一个网段的另一个虚拟机是否能正常访问网关和Internet判断虚拟机交换机是否存在问题。
如果网络连接正确,交换机和物理机/虚拟机中的arp表中都会出现各自的mac地址。如交换机的arp表或mac表中会出现物理机/虚拟机的mac地址,物理机/虚拟机的arp表中也会有交换机(网关)的mac地址。每次网络连接的建立过程都会涉及arp查找,例如ping通自己的IP表示网卡正常工作(ping其他主机可能会遇到防火墙或其他安全设备/软件拦截而无法ping通,需要自己去手动判断),这个过程依旧需要借助arp协议将ip地址解析到mac地址,这个已发现的mac地址就会存放在arp池中(缓存起来)。
对于交换机:进入特权配置模式(hostname#)输入show arp或show mac address-table,结合include进行mac地址查找。
对于物理机/虚拟机,不管是Microsoft Windows还是Linux,查看是否获得网关mac地址的命令都可以用arp -a命令(结合find或grep命令),显示当前arp池中有哪些已经发现的主机,包括网关。
上述操作结果都正常的话表示,协议和链路工作正常。
自下而上的方法。如果说按照osi或tcp/ip模型的划分的话,就是说物理层没有问题(能ping通自己、交换机连接状态、端口指示灯、内核/软件输出信息等),数据链路层没有问题(arp池中发现对方的mac地址)。接下来就应该分析网络层。
分析网络层首先要考虑的就是路由问题。例如检查交换机中是否存在特定主机路由,因为静态路由/特定主机路由的优先级都要比默认网关的优先级要高,一旦存在这些路由无法ping通网关就非常正常了。网关地址对于物理机/虚拟机安装的操作系统而言比普通主机更特殊一些,因此,即使一个主机能ping通同一网段的其他主机而不能ping通网关是正常的。
例如交换机上有一条静态路由为“S 172.16.205.7/32 [1/0] via 172.16.172.7”,如果从交换机ping172.16.205.7时,172.16.172.7这个地址不存在或者链路有问题,必然不通。而从172.16.205.7这个机器上ping网关(172.16.205.1),也是ping不通,原因是包从物理机/虚拟机的网卡去向交换机时正常,在回包时不正常,回包时还是要走静态路由里面规定的那个IP地址(谁让人家的优先级高呢?)。
关于路由优先级。直连路由最高、其次是静态路由最后最后是默认网关。所有的静态路由、直连路由等都查找不到的时候交给默认网关去处理,因此默认网关的路由优先级是最低的。
解决虚拟机或物理机ping不通网关故障的方法与思路