首页/网络/网络排障速查/路由不对称(往返路径不一致)排查
排查流程与方法36 条

路由不对称(往返路径不一致)排查

去程走 A 链路、回程走 B 链路时,防火墙会话不匹配、rp_filter 丢包、NAT 失效都会出现;用两端 traceroute 对比即可确认。

网络排障速查网络更新于 2026-10-13

什么是不对称路由

去程走 A 链路、回程走 B 链路,就是路由不对称。它本身在互联网上很常见且通常无害,但在两类环境里会直接制造故障:一是基于会话转发的防火墙与负载均衡,回程不在同一设备上时找不到会话,包被丢弃;二是 Linux 主机的反向路径过滤(rp_filter),严格模式下源地址不是从该接口该路回来的包会被静默丢弃。典型症状是「能 ping 通但 TCP 建连失败」或「时通时断、只有一个方向卡」。

基本信息

典型现象ping 通但 TCP 不通、单向通、时通时断、握手卡在一个方向
定位手段在两端分别 traceroute 对方,比较路径与出口
常见元凶多出口策略路由、会话型防火墙、rp_filter、源地址转换不一致
主机侧检查sysctl net.ipv4.conf.all.rp_filter 与具体接口的 rp_filter
抓包要求两端同时抓,单端抓包会得出片面结论

典型使用场景

  • 多线出口(电信 + 联通 + 专线)环境下业务偶发连不上:核对回程出口是否一致
  • 双机双网卡服务器新上线后 TCP 不通:检查 rp_filter 与策略路由优先级
  • 云环境加了辅助网卡或弹性 IP 后流量异常:确认回程是否走另一张网卡
  • 防火墙放行后仍不通:确认会话是否被回程路径上的另一台设备丢弃
  • TCP 握手超时但 ICMP 正常:用两端 traceroute 与同时抓包把路径拼出来

双向路径对比

双向路径对比
# 在 A 端
traceroute -n <B 的地址>
# 在 B 端(对同一源地址)
traceroute -n <A 的地址>
# 结果路径若经过不同出口/防火墙,即存在不对称
# 带端口探测更接近业务路径(避免 ICMP 被策略区别对待):
traceroute -T -p 443 -n -m 20 <B 的地址>
# 主机侧查看策略路由与路由表选择:
ip rule show
ip route get <对端地址>
ip route show table all | head -20
# 检查 Linux 反向路径过滤是否在丢包:
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.eth0.rp_filter
# 统计被过滤丢弃的计数是否在增长:
nstat -az | grep -iE 'IPReversePathFilter|InAddrErrors'

症状与指向

症状指向验证
ping 通、TCP 不通会话型防火墙或 rp_filter 丢回程两端同时抓包看 SYN-ACK 是否被丢
单向能通回程走了另一条出口两端 traceroute 对比出口
同一目标有时通有时不通按源地址或哈希分流,部分路径不对称多次 ip route get 与抓包比对
内网正常、跨网段异常多网卡主机的源地址与出接口不匹配检查 ip rule 与源地址选择
不对称路由常伴随「单向通」:去程 SYN 到了、回程 SYN-ACK 被丢。抓包时务必两端同时抓,单端抓包只能看到一半事实,容易把责任判给错误的设备。
把 rp_filter 从严格(1)临时改成松散(2)可用于验证是否为内核丢包,但这是安全机制的放宽,验证完要评估影响并决定是否保留。

易错点

  • 只在一端 traceroute 就断言路径正常,回程可能完全另一条路
  • 为「修通」随手关闭 rp_filter 而不评估安全影响,等于给源地址伪造开门
  • 只调防火墙策略不查回程出口,会话依旧不在同一台设备上
  • 在多网卡主机上忽略源地址选择,出口对了但源地址仍是另一张网卡
  • 用 ICMP traceroute 的结论代表业务路径,忽略了策略对 TCP 与 ICMP 的区别对待

数据来源与参考

  • Linux 内核文档:rp_filter / 反向路径过滤
  • RFC 3704:Ingress Filtering(BCP 38)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌