ip route 怎样判断策略路由命中了哪个表
排查策略路由时,单看 ip route show 往往只能看到某一张表,不能回答“这次查询到底走了哪张表”。更稳妥的办法是先读 ip rule 的优先级,再用与流量一致的条件执行 ip route get fibmatch,最后把结果中的表号与 ip route show table 对照。这样判断的是内核实际的 FIB 查找,不是凭默认路由猜测。
- RPDB 规则按 priority 从小到大检查,规则命中且表内返回结果后,后续规则不会接管。
route get要带上真实的from、iif或mark,否则测试条件可能与业务流量不同。fibmatch用来查看完整的 FIB 匹配路由;再用ip route show table 表号做最终对照。
先看 RPDB:优先级决定先查哪张表
策略路由不是把所有路由简单合并后再按最长前缀选择。内核先扫描路由策略数据库(RPDB),规则的选择条件可以包含源地址、目的地址、入接口、TOS、mark 等;每条规则又指向一张路由表。数字越小,优先级越高。
# 先分别查看 IPv4 和 IPv6 的规则,避免把两个地址族混在一起
ip -4 rule show
ip -6 rule show
示例输出可以是:
100: from 10.10.0.0/16 lookup 100
32766: from all lookup main
32767: from all lookup default
这里的 100 是规则优先级,lookup 100 是目标表号,不是“第 100 条路由”。如果第一条规则匹配源地址,但 table 100 没有可用结果,查找才可能继续走 main;如果它返回了单播、黑洞或不可达等终结结果,就不能再把 main 的内容当成实际命中。

用真实查询条件复现一次路由选择
ip route get 查询的是内核针对一个目的地址解析出的单条路径,不会真的发送数据包。若业务连接有固定源地址、入接口或 mark,就应把这些条件写进命令,否则得到的可能只是本机默认出口。
# 用业务报文的源地址和目的地址查询 IPv4 路径
ip -4 route get 203.0.113.20 from 10.10.1.8
# 转发流量还要模拟入接口;带 mark 的流量要保留十六进制值
ip -4 route get 203.0.113.20 from 10.10.1.8 iif eth0 mark 0x2
若排查的是本机发出的连接,通常不使用 iif;若排查转发报文,加入 iif 能让查询更接近真实路径。端口、协议、TOS 等也可能是规则条件,必要时补充 ipproto、sport、dport 或 tos。
用 fibmatch 把命中表和路由条目对上
仅看普通的 route get 输出,常能确认下一跳和设备,但排查“究竟来自哪张表”时还要请求完整 FIB 匹配结果:
# fibmatch 返回匹配到的 FIB 路由;输出中的 table 用于定位表
ip -4 route get fibmatch 203.0.113.20 from 10.10.1.8 mark 0x2
得到表号后,立即把该表单独列出来:
# 把 TABLE_ID 替换为 fibmatch 输出中的表号
ip -4 route show table 100
# 对比具体前缀、设备、下一跳、协议和 metric
ip -4 route show table 100 match 203.0.113.20
如果环境使用 VRF,也可以直接用 ip route get vrf NAME ADDRESS,或用 ip route show vrf NAME 查看其关联 FIB。VRF 的设备会关联一个表,内核通过 l3mdev 规则把查找导向该表;不要把 VRF 场景下的 table red 误读成普通主表别名。

查不到预期表时的排查顺序
- 先核对地址族。 IPv4 用
ip -4,IPv6 用ip -6;两者的规则和表并不共用一套匹配结果。 - 再核对条件。 源地址、入接口、mark、协议和端口少一个,都可能让规则不匹配。特别是 mark 的掩码要与规则一致。
- 检查表内结果类型。
throw表示继续尝试后续规则;blackhole、unreachable和prohibit是明确的策略结果,不等同于“没找到”。 - 最后看 priority。 同时满足条件时,低数字优先。确认规则顺序后,再对照 table 100、main 254 和 default 253 的实际条目。
常见问题
为什么 ip route show 看不到策略路由命中过程?
它默认展示一张路由表里的条目,不负责替你模拟完整 RPDB 查询。用 ip rule show 看规则,用带实际条件的 ip route get fibmatch 看一次查找结果。
为什么不加 from 也能得到结果?
内核可以先按目的地址解析并选择首选源地址,但这不代表它与业务 socket 的源地址、mark 或入接口相同。策略路由排障应尽量复现真实报文条件。
把“规则命中”和“表内路由命中”分开记录,通常就能快速定位问题是在 RPDB 条件、优先级,还是具体 FIB 条目。
nftables 怎样按集合更新允许的地址
- 上一篇
- nftables 怎样按集合更新允许的地址
- 下一篇
- lsns 怎样确认进程加入了哪些 Linux namespace
-
- 文章 · linux | 1小时前 |
- journalctl 怎样按 PRIORITY 筛选错误级别日志
- 486浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd systemctl show unit状态
- systemd 怎样用 unit 状态属性做脚本判断
- 448浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 内存管理 · Linux OOM cgroup v2 memory.events memory.max memory.high
- Linux cgroup v2 memory.events 中 high 与 oom 如何区分
- 333浏览 收藏
-
- 文章 · linux | 1天前 |
- Linux systemd 怎样查看服务真实失败原因
- 117浏览 收藏
-
- 文章 · linux | 1天前 |
- Linux ulimit 怎样判断文件句柄上限
- 125浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 669次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 686次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 733次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 701次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 536次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览

