## 概念是什么
服务器插了两块网卡接两个网关时,默认路由只有一条,从网卡 B 进来的请求会从网卡 A 回出去,对端校验严格就直接丢包。策略路由解决的就是进出路要成对的问题:它不再只看目的地决定走哪条路,而是先按规则选出一张路由表,再由那张表决定下一跳。
## 背后原理
系统内置多张路由表,ip rule 维护一张按序匹配的规则列表,每条规则指定匹配条件与表号。查路由时内核从规则列表自上而下找,命中一条就转进对应表,表内再按最长前缀匹配选路由。默认规则先查主表再查默认表,自己加的规则插在前面,不影响原有逻辑。
ip route add default via 192.168.2.1 dev eth1 table 100 ip rule add from 192.168.2.10/32 table 100 ip rule add to 192.168.2.10/32 table 100
## 最小实操
以双出口为例,先为第二个出口建一张表,表里写它的默认网关;再针对该网卡的源地址加规则,凡是源地址是它的包都查这张表。只加源地址规则对主动出站有效,若要处理对入站请求的回包,还需配合连接标记或对偶规则,确保回复流量也走同侧出口。改完用 ip rule 与 ip route show table 100 复核。
## 常见错误
规则加了表却是空的,流量被送进空表后按默认逻辑走,现象看似没变化,排查时容易被误导。规则顺序写反,前面的宽泛规则把流量全部截走,后面的精确规则永远不生效。顺云云服务器上做策略路由前先把规则写进文件持久化,否则重启后全部丢失,故障会在最不凑巧的时刻回来。
排障时还有两个组合值得常备:ip rule 列出规则顺序,ip route show table 加表号查看具体表内容,两者配合能把流量走向完整还原。临时验证效果时,用 ping 的 I 参数指定源地址,或用 curl 绑定出口接口,直接观察选路是否符合预期。改动前把现有规则导出备份,回退时一键恢复,策略路由的现场一旦改乱,恢复成本远高于预防成本。规则数量多时用注释标记用途,半年后还能看懂。