我通过有线连接到一个交换机,该交换机连接到一个路由器,该路由器连接到另一个服务器 S。正常情况下,我可以 ping 通 S,但现在出现以下错误:
$ ping 196.168.2.106
PING 196.168.2.106 (196.168.2.106) 56(84) bytes of data.
From 173.167.59.141 icmp_seq=4 Destination Net Unreachable
From 173.167.59.141 icmp_seq=19 Destination Net Unreachable
From 173.167.59.141 icmp_seq=26 Destination Net Unreachable
连接到同一交换机的同事可以 ping S,我可以 ping 同事的机器并访问互联网。我还可以 ping 连接到不同交换机的另一个同事的机器。此错误每隔几周就会发生一次,我不知道原因。问题可能是什么,我该如何诊断?
这是我的 /etc/resolv.conf:
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.2.1
这是我的路由表:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router.asus.com 0.0.0.0 UG 0 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 * 255.255.0.0 U 0 0 0 eth0
答案1
服务器是否有静态 IP 地址?——特别要仔细检查服务器和路由器上的网络掩码。
仔细检查网络掩码是否与 192.168.0.0 相同,通常是 /24(255.255.255.0)网络,而在您的路由中它为 /16(255.255.0.0)不是一个理想的子网掩码 - 显然取决于您的设置,但我猜您没有很多设备。
答案2
您可以使用 tcpdump 来帮助诊断问题。使用方法如下:
tcpdump -i <INTERFACE> icmp and host <IPADDR>
例如:
tcpdump -i eth0 icmp and host 196.168.2.106
(注意:tcpdump 的语法在不同发行版之间可能有所不同。这适用于 CentOS。)
对于每个服务器,主机(IP 地址)需要设置为对立的服务器。
检查数据包:
- 离开你的服务器(系统上的 tcpdump)
- 到达目标服务器(另一个系统上的 tcdump)
- 回复离开目标服务器(另一个系统上的 tcpdump)
- 回复到达你的服务器(系统上的 tcpdump)
这将有助于确定失败之处。
如果您可以访问路由器并且tcpdump
在那里可用,这也会有很大帮助。