静态路由在linux中配置后不通的核心原因有三个:路由没进表、下一跳不可达、回程路径缺失;需依次验证ip route show结果、下一跳arp可达性及目标端回程路由配置。

静态路由在Linux中配置后不通,核心原因就三个:路由没进表、下一跳不可达、回程路径缺失。排查不靠猜,按顺序验证这三点,基本能定位90%的问题。
查路由表,确认静态路由是否真正生效
执行 ip route show,重点看有没有你配置的目标网段条目,类型是否为 unicast(非 unreachable / blackhole),且下一跳和出接口正确。如果完全找不到该路由,说明配置未写入内核——可能命令漏了 sudo,或用的是临时命令(如 ip route add)但未持久化;若看到目标路由但标记为 unreachable 或 dead,说明系统判定该路径无效,需进入下一步检查下一跳。
测下一跳IP是否二层可达
静态路由的下一跳必须是本机直连网段内的IP,否则无法ARP解析。分三步验证:
- 运行 ip addr show,确认当前任一 UP 状态接口的子网包含该下一跳IP(例如接口是 192.168.5.10/24,那下一跳只能是 192.168.5.x)
- 执行 ping -c 3 ,全丢包时再用 tcpdump -i arp 看是否有ARP请求发出;无请求=链路层断开(网线、VLAN、对端关机等)
- 若ARP有响应但ping不通,可能是对端禁ping或防火墙拦截,此时改用 arping -I 直接验证MAC层连通性
查回程路由与策略干扰
即使去程路由正确,没有对应回程路由,通信依然失败。尤其在多网卡、多网段环境中容易忽略:
- 从目标主机反向 ping 本机,看是否通;不通则检查目标侧是否配置了指向本机所在网段的回程路由
- 运行 ip rule show,若有非默认规则(如 from 10.10.10.0/24 lookup table 200),必须同步检查对应路由表:ip route show table 200
- 执行 ip route get ,观察系统实际选哪条路径;若返回结果中的 via 或 dev 不是你预期的,说明有更精确路由或默认路由劫持了匹配
注意网关直连性与GatewayOnLink设置
systemd-networkd 或某些高级场景中,若下一跳不在直连网段但物理上可达(比如通过三层交换机透传),必须显式启用 GatewayOnLink=yes,否则内核拒绝添加该路由。普通 ip route add 命令不支持该参数,此时应确保网关IP落在本地某个UP接口的子网内,否则会报 Network is unreachable。











