我有一个运行 centos 7 的小集群,由机器 A、B 和 C 组成。它们都是连接在同一个 LAN 上的独立物理机器。
机器 A 可以 ping 通 B 和 C,机器 B 也可以 ping 通 A 和 C,但是机器 C 只能 ping 通机器 A。
我的问题是机器 C 无法 ping 机器 B。它显示目标主机不可达。
我尝试过更换网络交换机、更换以太网、禁用所有机器上的防火墙和 SELinux,但问题仍然存在。我还检查了 IP 地址和 /etc/hosts 文件以确保它们都一致。
我想知道如何才能帮助诊断该问题的原因。
谢谢 !
答案1
您是通过机器名称进行 ping 操作,还是通过 IP 地址进行 ping 操作,或者两种方式都一样?
这些机器中是否有任何机器正在执行路由(多个 NIC)?
我假设你说它们在同一个局域网上,你的意思是每台机器都使用一个独一无二网卡连接到同一交换机,并且它们之间没有路由器。我还假设它们位于同一逻辑 IP 子网上。如果这是不正确的,请在问题中提供更多详细信息。我有理由相信这些假设并非 100% 正确。
可以尝试的事情:
- 首先通过 IP 地址进行 Ping。这将排除名称解析问题。如果成功,则可能是名称解析问题(例如 DNS 服务器与 hosts 文件不一致)。
- 检查每台机器上的接口子网掩码。如果它们不匹配,则在某些情况下可能会发生这种情况。
- 检查是否有多个网关。机器 C 可能定义了多个网关。如果它们位于同一 IP 子网中,则这应该不是问题。消息目标主机不可达意味着它知道它试图 ping 的地址,但是似乎无法通过定义的路由到达那里。
如果您可以为每台机器提供路由表,这通常会在route -n
Linux 上完成,这将会很有帮助。
答案2
当您说“它显示目标主机无法访问”时,报告此信息的设备的 IP 地址是什么?我的意思是,在 ping 输出中您会看到类似以下内容:
来自 xxxx icmp_seq=2 目标主机不可达
那么输出中的 xxxx 是什么?它可能是 C 自己的 IP 地址,但值得检查。
如果这是 C 自己的地址,则通常意味着它的 ARP 表中没有 B,并且没有收到对 ARP 请求的回复。要确认,请检查“arp -a”的输出(在 ping 运行时或停止 ping 后立即),它是否显示一行包含 B 的 IP 地址及其 MAC 地址,一行包含 B 的 IP 和“不完整”或根本没有包含 B 的 IP 的行?
运行数据包捕获(例如使用 tcpdump 或 wireshark)也可能会有所帮助,以查看运行 ping 时网络上实际发生的情况。同时在 B 和 C 上进行 2 次捕获可能更有用。