内核实际选了哪条路由
路由表里可能同时存在默认路由、明细路由和多张自定义表,配置写得对不对不重要,内核实际选哪条才重要。ip route get 把选路结果一次性给出:出口网卡(dev)、下一跳(via)和源地址(src)。多网卡服务器上,用它核对「业务流量到底从哪张网卡出去」比肉眼看路由表可靠得多,尤其是同时存在策略路由规则时。
基本信息
| 适用平台 | Linux(iproute2);Windows 对应 Find-NetRoute |
|---|---|
| 语法 | ip route get <目标IP> [from <源IP>] [iif <入接口>] |
| 输出关键字段 | via 下一跳、dev 出接口、src 选用的源地址、uid 相关标记 |
| 相关命令 | ip route show table all、ip rule list |
| 权限要求 | 普通用户可查;修改路由需 root |
典型使用场景
- 多网卡服务器确认业务出向:验证是否走了预期的网卡与源地址
- 策略路由排查:ip rule 决定查表顺序,确认自定义表是否优先生效
- VPN 或隧道场景:确认目标是否被路由进隧道接口
- 加静态路由前的预判:先看当前选路结果,再决定是否覆盖
- 故障复盘:核对故障时段使用的源地址是否与预期一致
常用查询
常用查询
ip route get 223.5.5.5 # 默认路径与源地址
ip route get 10.0.0.5 from 10.10.0.2 # 指定源地址时的选路结果
ip route get 10.0.0.5 iif eth0 # 指定入接口,模拟从该口进来的流量
ip route show table all | head -30 # 含自定义路由表,别只看 main
ip rule list # 策略路由规则顺序,决定优先查哪张表
ip route get 10.0.0.5 uid 1000 # 按用户身份查选路(多用户网关场景有用)Windows 对应写法
Windows 对应写法
Find-NetRoute -RemoteIPAddress 8.8.8.8 # 列出命中的路由与源地址
route print -4 | Select-String -Pattern '0.0.0.0' # 查看 IPv4 默认路由输出逐项读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| via | 下一跳地址 | 与预期网关不一致说明命中了别的路由 |
| dev | 出接口 | 多网卡服务器核对是否走了业务网卡 |
| src | 内核选用的源地址 | 与业务期望地址不符会导致对端策略拒绝 |
| cache 相关 | 是否命中缓存条目 | 缓存过期后结果可能变化,结论以重查为准 |
| local 标记 | 目标是本机地址 | 显示 local 表示命中本地路由,不会真正出网 |
ip route get 的输出里 src 是内核实际选用的源地址:判断「对端看到的来源 IP 对不对」时,这一项比配置文件更有说服力。