路由查找是什么
内核为每个对外发送的包选一条出口路由,依据是「最长前缀匹配」:在所有能匹配目标地址的路由里,挑掩码最长(最具体)的那条。没有任何路由匹配时走默认路由;同一前缀有多条时比较度量值(metric),数值小的优先。除主路由表外,Linux 还支持策略路由:按源地址、标记或入接口先选一张路由表,再在表内做最长前缀匹配。
基本信息
| 适用平台 | Linux(iproute2 工具集) |
|---|---|
| 核心原则 | 最长前缀匹配,相同前缀比 metric |
| 默认路由 | 0.0.0.0/0 与 ::/0,出网兜底 |
| 策略路由 | ip rule 按源/标记/接口选择路由表 |
| 查询命令 | ip route get 目标地址,直接给出决策结果 |
| 数据来源 | 内核 FIB,由 ip route 与动态路由协议写入 |
典型使用场景
- 多出口主机排查流量到底走了哪块网卡或哪条线路
- 双默认路由场景确认内核按 metric 选了哪条
- VPN 或容器环境核对隧道网段是否覆盖目标地址
- 按源地址分流:不同来源走不同运营商线路
- 定位「同一网段有的通有的不通」这类掩码配置错误
查看决策过程
查看决策过程
# 直接问内核:目标地址会走哪个接口、哪条路由、源地址用哪个
ip route get 8.8.8.8
ip route get 10.1.2.3 from 10.0.0.5
# 查看主路由表与默认路由
ip route show
ip route show default
# 查看策略路由规则与指定表
ip rule show
ip route show table 100
# 追踪路由缓存命中(内核已弃用 route cache,改用 route get 观察)关键概念
| 概念 | 说明 | 示例 |
|---|---|---|
| 最长前缀 | 掩码越长越优先 | /32 主机路由 优于 /24 优于默认 |
| 默认路由 | 0.0.0.0/0 | 无其他匹配时出网兜底 |
| 度量值 | 同前缀比较 metric | 越小越优先 |
| 策略路由 | 按源/标记选不同表 | 多线路由、分流 |
| 作用域 | scope 决定下一跳类型 | link 为直连、global 为网关 |
容器、VPN 与多网卡环境里,ip route get 能一次给出「会从哪个接口、经哪条路由、源地址是谁」,比逐张表肉眼比对高效得多,也是判断策略路由是否命中规则的首选手段。
策略路由规则的顺序敏感:ip rule 从优先级数字小的开始匹配,前一条命中即停止。插入新规则时优先级填错,会让更具体的规则永远不被访问到,表现为「配置看起来对但流量走了别的出口」。