ip rule 配置策略路由的本质是为满足特定条件的数据包指定查询的路由表,扩展传统路由决策维度,支持按源ip、目的ip、入接口或防火墙标记等分流。

Linux 中用 ip rule 配置策略路由,本质是告诉内核“满足什么条件的数据包,查哪张路由表”。它不替代传统路由,而是扩展路由决策维度——比如按源 IP、目的 IP、入接口甚至防火墙标记来分流。
先确认基础环境是否就绪
策略路由依赖内核支持,需确保以下两点已启用:
- IPv4 转发开启:
echo 1 > /proc/sys/net/ipv4/ip_forward - 反向路径过滤(rp_filter)关闭:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter,并同步关掉各接口(如eth0、eth1)的对应值
永久生效需在 /etc/sysctl.conf 中添加:
net.ipv4.ip_forward = 1<br>net.ipv4.conf.all.rp_filter = 0
定义自定义路由表
系统默认只有 local、main、default 三张表,策略路由必须新增专用表。编辑 /etc/iproute2/rt_tables,在末尾追加:
100 tab_eth0<br>101 tab_eth1
注意:ID 建议 ≥100,表名只允许字母、数字、下划线,不能含短横或空格。
为每张表配置完整路由条目
每张自定义表至少要包含两项路由:直连子网 + 默认网关。例如:
ip route add 192.168.10.0/24 dev eth0 src 192.168.10.100 table tab_eth0ip route add default via 192.168.10.1 dev eth0 table tab_eth0ip route add 10.0.20.0/24 dev eth1 src 10.0.20.100 table tab_eth1ip route add default via 10.0.20.1 dev eth1 table tab_eth1
漏掉直连路由会导致本地通信失败;没配默认网关则无法出站。
用 ip rule 绑定条件与路由表
这是策略路由的核心步骤。规则按优先级(priority)从小到大匹配,一旦命中即停止查找。常用写法:
- 按源地址分流:
ip rule add from 192.168.10.100/32 table tab_eth0 priority 100 - 按源网段分流:
ip rule add from 10.0.20.0/24 table tab_eth1 priority 101 - 按入接口分流:
ip rule add to 0.0.0.0/0 iif eth0 table tab_eth0 priority 99 - 按防火墙标记分流(配合 iptables):
ip rule add fwmark 0x1 table tab_eth0
查看当前所有规则:ip rule show;删除某条规则:ip rule del priority 100;清空全部策略规则:ip rule flush(慎用)。











