多出口环境的三类错位
双网卡或多出口机器(内网加公网、专线加宽带)常见三类问题:报文从错误的接口出去、源地址与业务预期不一致、返回路径被反向过滤丢掉。验证走三步:ip route get 看内核实际选路与源地址,ip rule show 看策略路由的规则顺序,再用 ping -I 与 curl --interface 指定出口做端到端实测。
基本信息
| 适用平台 | Linux(iproute2、curl、iputils) |
|---|---|
| 核心命令 | ip route get、ip rule show、ping -I、curl --interface |
| 关键参数 | rp_filter 反向路径过滤(0 关闭、1 严格、2 松散) |
| 常见架构 | 默认路由加策略路由、双默认路由不同 metric |
| 留痕要求 | 改动前备份 ip rule 与 ip route 全量输出 |
典型使用场景
- 双出口机器上确认业务流量实际走哪条线
- 验证对外访问的源 IP 是否是预期公网地址
- 策略路由改完后复核是否按源选路
- 排查非对称路由导致的连接超时
- 上线前核对多机房的出口规划是否符合设计
查看选路与实测
查看选路与实测
ip route get 8.8.8.8 # 内核实际选路:出口接口与源地址
ip route get 8.8.8.8 from 10.0.0.5 # 指定源地址后再看选路,贴近真实业务
ip rule show # 策略路由规则顺序,从上到下先匹配先生效
ip route show table all | head -30 # 各路由表的内容
ping -I eth1 -c 2 8.8.8.8 # 指定出口接口实测连通性
curl -sS --interface eth1 -o /dev/null -w '%{http_code}\n' https://example.com
curl -sS https://ifconfig.me # 看实际对外出口 IP 是否符合预期
sysctl net.ipv4.conf.all.rp_filter # 反向路径过滤设置,非对称流量常被它拦掉问题与判据
| 问题 | 判据 | 处理方向 |
|---|---|---|
| 走错出口 | ip route get 显示的接口与预期不符 | 检查默认路由 metric 与策略路由优先级 |
| 源地址不对 | ip route get 输出的 src 与业务预期不同 | 用 ip route get ... from 复核,必要时加策略路由 |
| 返回路径被丢 | 能从某接口发出但会话建立失败 | 核对 rp_filter 与上游是否做反向过滤 |
| 表面正常实际错线 | ping 通但业务走了另一条线 | 用 curl --interface 与出口 IP 查询做端到端验证 |
| 改完无法回滚 | 未留存改动前的输出 | 动手前完整备份 ip rule 与 ip route |
修改默认路由或新增策略路由是高风险操作,可能在当前会话中断网:动手前完整备份 ip rule 与 ip route 输出,并确保有带外管理或本地控制台通道。
辅助 IP、多出口与 NAT 组合下容易出现非对称路由,此时 rp_filter 过严会静默丢包:要按 all 与具体网卡两个层级分别核对,而不是只改全局值。