系统学习 故障排查学习路径:从方法论到系统、网络、数据库与 K8s

no-route-to-host

内核或路由设备无法把数据送到目标主机并返回 no route to host 的定位与修复

现象

客户端报 connect: no route to host、No route to host 或 EHOSTUNREACH,ping 可能显示 Destination Host Unreachable。它表示本机知道目标所在网段,但无法把数据交付到具体主机:可能是同网段 ARP 失败、网关或路由器返回主机不可达,也可能是防火墙用拒绝规则生成了这类 ICMP。

要和 network is unreachable 区分:后者是本地路由表根本没有到目标网段的路由,错误通常在发包前就产生;no route to host 则可能已经选好了出口,失败发生在二层解析或后续跳点。还要和 connection refused 区分:拒绝说明包已经到达目标,只是端口没有监听或主动拒绝。

快速定位

先看内核选择了哪条路由、哪个源地址和出口接口:

ip route get <ip>
ip route show
ip -6 route get <ipv6>
ip neigh show <ip>
sudo arping -I <iface> -c 3 <ip>
ping -c 3 -W 2 <ip>
traceroute -n -T -p <port> <host>
mtr -n -T -P <port> -c 20 <host>
ss -lnt '( sport = :<port> )'
sudo iptables -S | grep -E 'REJECT|DROP'
sudo nft list ruleset | grep -E 'reject|drop'
sudo conntrack -L -d <ip>
ip -br link
sudo ethtool <iface> | grep -E 'Link detected|Speed'
dmesg -T | tail -50

ip route get 的输出要和预期对比:出口接口是否错误、网关是否缺失、源地址是否属于该接口。同网段目标会显示 dev <iface> src <ip>,此时重点查邻居表和二层链路;跨网段目标会显示 via <gateway>,此时重点查网关和后续路由。

同网段场景先看 ip neigh show <ip>:条目为 FAILED 或 INCOMPLETE,说明 ARP 或 ND 没有得到响应。用 arping 验证二层可达性,再检查交换机端口隔离、VLAN、IP 冲突和主机电源状态。跨网段场景用 traceroute 或 mtr 找到返回不可达的跳点,并在该设备上检查路由、ACL 和 NAT。

防火墙的 REJECT 规则可能返回 icmp-host-prohibited 或 icmp-port-unreachable,在 Linux 客户端上表现为 no route to host。抓包确认 ICMP 类型和代码,比只看 connect 错误更可靠:

sudo tcpdump -ni any -tttt 'icmp or (host <ip> and port <port>)'

常见根因

  1. 同网段目标主机关机、网卡故障或未接入网络,ARP 请求无人应答。
  2. VLAN、交换机端口隔离、无线客户端隔离或 bond 配置错误,二层路径不通。
  3. IP 地址冲突导致 ARP 表项反复变化,流量被送到错误主机。
  4. 本机路由缺失、掩码配置错误或网关指向了错误接口,ip route get 选错出口。
  5. 网关或上游路由器没有到目标网段的路由,返回 ICMP 主机不可达。
  6. 防火墙使用 REJECT --reject-with icmp-host-prohibited,主动生成不可达响应。
  7. 云子网路由表指向不存在的下一跳、黑洞路由或被误删的路由条目。
  8. 接口 down、载波丢失、VLAN 子接口未启用或网络配置在重启后未生效。
  9. 非对称路由或反向路径过滤导致回包被丢弃,请求能发出但收不到响应,通常先表现为超时。
  10. 容器或虚拟机的网络命名空间缺少到目标的路由,veth、网桥或 CNI 配置异常。
  11. IPv6 场景缺少邻居发现条目、RA 未生效或目标没有配置全局地址。
  12. 交换机 ACL、云网络 ACL 或安全组策略拒绝转发,并返回 ICMP 管理禁止。

修复

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. no route to host 和 network is unreachable 的区别是什么?
  2. 同网段目标报 no route to host,应最先检查什么?
  3. 如何判断不可达是网关、防火墙还是本机生成的?
答案
  1. network is unreachable 表示本地路由表没有到目标网段的路由,通常在发包前失败;no route to host 表示已有出口但无法交付到具体主机,可能卡在 ARP、网关路由或防火墙拒绝。
  2. 先查邻居表是否 FAILED 或 INCOMPLETE,用 arping 验证二层可达,再检查目标主机状态、VLAN、交换机端口隔离和 IP 冲突。
  3. 用 ip route get 看本地选路,用 traceroute 或 mtr 定位返回不可达的跳点,用 tcpdump 查看 ICMP 类型与代码,并在疑似设备上检查路由和 REJECT 规则。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令