策略路由解决什么问题
默认路由只有一张主表,而 ip rule 提供的策略路由可以做到“按源地址、按防火墙标记、按目标地址选择不同的路由表”,这是多网卡、多线路分流的核心工具。规则按优先级从小到大匹配,命中后按指定表查路由;表的内容用 ip route 配合 table 参数维护,规则本身不负责填路由。
基本信息
| 适用平台 | Linux(iproute2) |
|---|---|
| 语法 | ip rule add [from 源] [fwmark 标记] table 表号 |
| 配套命令 | ip route add ... table N、ip route show table N |
| 内置规则 | 优先级 32766 的 main 与 32767 的 default 是兜底 |
| 优先级 | 不指定时由系统自动分配,关键场景应显式写 pref |
| 查看 | ip rule show |
典型使用场景
- 多网卡机器按源网段分流(内网走 A 线、公网走 B 线)
- 按 fwmark 分流,配合 iptables -j MARK 做应用级选路
- 专线加宽带的主备与负载分担
- 容器或 VPN 场景指定出口路由表
- 排查“流量为什么从错误的线路出去”
常用示例
常用示例
ip rule show # 现有规则与优先级,改之前先看清楚
ip rule add from 192.168.10.0/24 table 100 # 来自该网段的流量查表 100
ip route add default via 192.168.10.1 dev eth1 table 100 # 给表 100 填默认网关
ip route show table 100 # 核对表内容是否符合预期
ip rule add fwmark 1 table 100 # 按标记分流,配合 iptables -j MARK 打标
ip rule add from 192.168.10.0/24 table 100 pref 1000 # 显式指定优先级
ip rule del from 192.168.10.0/24 table 100 # 删除规则:条件必须与添加时一致
ip route flush cache # 规则或路由变更后清理路由缓存规则字段读法
| 字段 | 含义 | 注意 |
|---|---|---|
| 优先级 pref | 数值越小越先匹配 | 自定义规则必须排在 32766 之前才会生效 |
| from 源 | 匹配源地址或网段 | 最常用的分流维度 |
| fwmark | 匹配报文的防火墙标记 | 需要配合 iptables/nftables 打标 |
| table 表号 | 命中后使用哪张路由表 | 表必须先用 ip route add 填好 |
| 无 from/fwmark 的规则 | 匹配全部流量 | 会覆盖所有流量,务必谨慎 |
| 32766 / 32767 | main 与 default 兜底规则 | 是最后的退路,不要删除 |
规则命中即停止,顺序决定结果:不指定 pref 时新规则会得到一个自动分配的优先级,插入位置未必符合预期,关键场景显式指定 pref。
修改策略路由可能影响远程会话:动手前确认有带外或本地控制台通道,改完用新连接验证(例如指定源地址发起请求),已建立的连接不会按新规则重选路。