ip rule 用于控制流量匹配路由表的策略,按优先级顺序执行,需配合自定义路由表生效;默认规则优先级为0(local)、32766(main)、32767(default),新增规则应显式指定priority及匹配条件与目标表。

Linux 中使用 ip rule 管理策略路由规则,核心是控制“什么流量查哪张路由表”。它不直接转发数据包,而是为内核提供匹配顺序和路由表选择逻辑。关键在于理解规则优先级、匹配条件与路由表的协同关系。
查看和理解当前规则
运行 ip rule show 可列出所有生效的策略规则,输出类似:
32766: from all lookup main
32767: from all lookup default
这三行是系统默认规则,按优先级(数值越小越先匹配)排列:
-
优先级 0:强制所有本地地址(如 127.0.0.1、本机接口 IP)查
local表,不可删除 -
优先级 32766:常规流量查
main表(即你平时用ip route看到的路由) -
优先级 32767:兜底规则,查空的
default表,可删可覆盖
添加带条件和优先级的规则
新增规则必须明确指定匹配条件(如源 IP、目的 IP、入接口等)和目标路由表,并建议显式设 priority 避免冲突:
- 让来自
192.168.10.0/24的流量走自定义表table100:ip rule add from 192.168.10.0/24 table table100 priority 100 - 让经
eth1进来的所有流量查table200:ip rule add to 0.0.0.0/0 iif eth1 table table200 priority 150 - 匹配带 iptables 标记(fwmark)的数据包:
ip rule add fwmark 0x100 table table300
注意:若未指定 priority,系统会自动分配一个可用值,但易导致顺序不可控。
修改与删除规则
规则不能直接编辑,需先删后加。删除时推荐用 priority 定位,更安全:
- 删掉优先级 100 的规则:
ip rule del priority 100 - 删掉所有匹配
from 10.0.0.0/8的规则:ip rule del from 10.0.0.0/8 - 清空所有用户添加的规则(保留默认三条):
ip rule flush
执行后建议立即 ip rule show 确认结果,避免误删或残留。
配合路由表才能真正生效
ip rule 只决定“查哪张表”,表里必须有对应路由条目,否则匹配失败会降级到下一条规则:
- 先确保
/etc/iproute2/rt_tables中已定义表名,例如:100 table100 - 再为该表添加实际路由,比如:
ip route add default via 192.168.10.1 dev eth0 table table100ip route add 192.168.10.0/24 dev eth0 src 192.168.10.100 table table100 - 验证某源 IP 的实际路径:
ip route get from 192.168.10.100 to 8.8.8.8—— 输出会显示使用的表和下一跳



















