该故障根源是窄掩码策略路由干扰选路,表现为长连接反复断开。需通过tcpdump和ip route get确认路由异常,用ip rule与ip route show扫描非主表中的高优先级窄掩码条目(如/28),临时禁用验证后清理,并在ci/cd中加入路由合规检查及rp_filter防护。

这类故障的核心特征是:微服务间长连接反复建立又断开,日志中常出现“connection reset”“timeout during handshake”或“no route to host”,但常规 ping 和 traceroute 表面正常。问题不在于连不通,而在于“连得上却稳不住”——根源往往藏在系统路由表里那条被遗忘的窄掩码策略路由。
第一步:确认长连接中断是否与路由路径异常相关
不要直接查微服务日志,先锁定网络层行为:
- 在客户端节点执行 tcpdump -i any port -w conn.pcap,复现一次闪退,观察 FIN/RST 是否由本机主动发出;
- 用 ip route get 查看每次连接发起时实际选中的出接口和下一跳——重点看返回结果中是否含 via xxx dev xxx table xxx,若有 table 字段,说明命中了非主路由表(如 policy-based routing);
- 对比多次执行结果:若返回的下一跳或出接口不稳定(例如有时走 eth0,有时走 bond1),基本可判定策略路由在干扰选路。
第二步:扫描所有路由表,揪出隐藏的高优先级窄掩码条目
Linux 系统默认只显示主路由表(table main),而策略路由常驻于自定义表(如 table 100、200)或通过 rule 规则触发:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 运行 ip rule show,查看是否有类似 from 10.10.5.0/24 lookup 100 的规则——这表示该网段流量强制走 table 100;
- 对每个非默认表执行 ip route show table
,逐个检查; - 特别关注掩码长度 ≥28 的条目(如 10.10.5.128/28 via 192.168.1.1),这类窄掩码路由一旦存在,会因最长前缀匹配原则,优先于更宽泛的 /24 或 /16 网段路由,导致本该走内网直连的微服务流量被错误导向旧网关或隔离网段。
第三步:验证并清理问题路由
定位到可疑条目后,别急着删,先做隔离验证:
- 临时禁用对应 rule:ip rule del from 10.10.5.0/24 lookup 100;
- 或清空该表:ip route flush table 100;
- 立即发起长连接测试(如 curl -v http://svc-a:8080/health),观察是否稳定;
- 若恢复稳定,说明定位准确。此时应追溯该路由来源:检查是否由旧版部署脚本、遗留的 network-scripts 配置、或容器运行时(如 Docker 的 --route 参数)自动注入;
- 彻底清理需同步删除对应 rule + table 条目,并在配置管理平台中标记为“已废弃”,避免下次升级时重新载入。
第四步:设置长效防护机制
人工排查易遗漏,建议固化防御措施:
- 在 CI/CD 流水线中加入路由合规检查脚本,自动扫描全集群节点的 ip rule 和 ip route show table all 输出,过滤出掩码 ≥28 且目的网段属于内网地址段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)的策略路由,阻断发布;
- 对核心微服务通信网段,在主机防火墙上启用 rp_filter=2(宽松反向路径校验),可抑制因路由错配导致的单向通、双向不通类异常;
- 运维平台中增加“策略路由变更”告警项,当 ip rule 或非主表路由发生增删时,实时推送通知。










