解决虚拟机或物理机ping不通网关故障的方法与思路

基本思路:缓存

  1. 肯定问题缩小范围。先外部后内部,利用排除法、类比法、替换法(隔离法)将故障范围逐渐缩小到某一点。安全

  2. 谨慎作出结论。下结论前先三思,想到全部可能存在问题的点,特别是与别人讨论和描述问题时更应该注意。markdown

  3. 记录问题。作好文档备案工做,如记录故障现象、故障分析、故障缘由、处理流程、处理结果、结论与经验等。网络

    相对于虚拟机,物理机ping不通网关的故障更好排查一些,由于虚拟机在于物理交换机通讯的过程当中存在一个中间层,中间层可能为宿主主机上的标准交换机或者某个分布式交换机。但不管是标准交换机仍是分布式交换机通常都不会处理三层网络,尽管有的分布式交换机能处理三层网络,如Cisco Nexus 1000v。所以只要在配置虚拟机硬件时,给网络适配器选择的网络标签(Vlan ID)正确,通常问题就不会发生在虚拟交换机层面。若是对虚拟交换机是否存在故障不能肯定,能够经过查看与故障虚拟机同一个网段的另外一个虚拟机是否能正常访问网关和Internet判断虚拟机交换机是否存在问题。tcp

image

    若是网络链接正确,交换机和物理机/虚拟机中的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地址查找。spa

image  image

    对于物理机/虚拟机,无论是Microsoft Windows仍是Linux,查看是否得到网关mac地址的命令均可以用arp -a命令(结合find或grep命令),显示当前arp池中有哪些已经发现的主机,包括网关。操作系统

image image

    上述操做结果都正常的话表示,协议和链路工做正常。
blog

    自下而上的方法。若是说按照osi或tcp/ip模型的划分的话,就是说物理层没有问题(能ping通本身、交换机链接状态、端口指示灯、内核/软件输出信息等),数据链路层没有问题(arp池中发现对方的mac地址)。接下来就应该分析网络层。ip

    分析网络层首先要考虑的就是路由问题。例如检查交换机中是否存在特定主机路由,由于静态路由/特定主机路由的优先级都要比默认网关的优先级要高,一旦存在这些路由没法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地址(谁让人家的优先级高呢?)。

    关于路由优先级。直连路由最高、其次是静态路由最后最后是默认网关。全部的静态路由、直连路由等都查找不到的时候交给默认网关去处理,所以默认网关的路由优先级是最低的。




本文转自 urey_pp 51CTO博客,原文连接:http://blog.51cto.com/dgd2010/1531486,如需转载请自行联系原做者