关键在于识别重复默认路由、重叠网段覆盖、主机路由劫持三类冗余,通过ip route get模拟真实选路,结合ip rule show排查非主表干扰,再逐条删除冗余项并从NetworkManager或netplan源头清理配置。

排查 Linux 路由表条目冗余,关键在于识别“多条匹配、逻辑冲突、优先级错位”的路由项,而非简单罗列所有路由。冗余本身不报错,但会让内核选错路径,导致访问失败、响应延迟或流量绕行。
一眼识别三类冗余路由
运行 ip route show 后,重点扫描以下模式:
-
重复默认路由:出现两条及以上
default via X.X.X.X,尤其当它们指向不同网关、不同接口(如dev eth0和dev ens33)时,内核按插入顺序或 metric 值选其一,另一条即成冗余隐患 -
重叠网段覆盖:例如同时存在
10.0.0.0/8 via 10.1.1.1和10.0.5.0/24 via 10.2.2.2。后者更精确本应优先生效,但如果前者 metric 更低或规则更早加载,就会压制后者,造成部分 10.0.5.x 流量误发 -
主机路由劫持子网路由:比如已有
192.168.2.0/24 dev eth1,又额外添加了192.168.2.100/32 via 192.168.1.100。该主机路由会强制所有发往 192.168.2.100 的包走错误下一跳,绕过直连逻辑
验证实际选路是否被冗余干扰
仅看路由表不够,必须模拟真实报文走向:
- 用 ip route get <目标IP> 查系统真正选择哪条路由。例如
ip route get 10.0.5.20返回10.0.5.20 via 10.1.1.1 dev eth0,而你预期走eth1,说明冗余的 /8 条目正在生效 - 加 from <源IP> 或 iif <接口> 模拟多网卡场景:如
ip route get 172.16.10.5 from 192.168.10.100 iif eth0,可确认策略规则是否被冗余 rule 干扰 - 配合 ip rule show 检查是否有未察觉的策略路由表介入——冗余常藏在非 main 表中,主表看似干净,实则流量已被 rule 导入其他表
安全清理与防复发操作
清理不是全删重来,而是精准剔除干扰项:
- 逐条删除冗余项,避免
ip route flush误清关键路由。例如删掉错误默认网关:ip route del default via 192.168.100.1 dev eth0 - 对重复网段,保留更精确、metric 更小、且对应接口真实的那条;其余用
ip route del移除 - 检查配置源头:若使用 NetworkManager,执行
nmcli connection show查哪些连接自动加了路由;若用 netplan,检查/etc/netplan/*.yaml中是否在多个 interface 下重复定义了相同 to/via - 临时修复后,用
ip route save > /tmp/route.pre-fix备份当前状态,便于回滚
让修复持久化且不引入新冗余
重启后复现,往往因配置文件残留旧规则:
- Ubuntu/Debian(netplan):在对应 interface 的
routes:块中,只保留必要条目,删除注释掉的备份路由或历史配置行 - RHEL/CentOS:检查
/etc/sysconfig/network-scripts/route-*文件,确认无重复文件(如route-eth0和route-enp0s3同时存在且内容雷同) - 通用兜底:若不确定来源,将清理后的
ip route add命令写入/etc/rc.local,并确保rc-local服务启用,但需先注释掉可能冲突的旧命令



















