策略路由为什么没生效
策略路由(PBR)的转发路径不来自路由表,而来自策略的匹配结果,所以它失效往往有两类原因:报文根本没被策略命中,或者命中了但指定的下一跳不可达。第一类要查匹配条件(ACL、源地址、报文长度等)和策略是否应用在正确的接口与方向;第二类要确认下一跳地址可达、出接口未 down、ARP 或邻居有解析结果。PBR 只影响本机流量转发,不改动路由表内容,因此排障时只盯路由表会完全跑偏。
基本信息
| 适用平台 | 三厂通用(路由器与三层交换机) |
|---|---|
| 思科命令族 | route-map + 接口下 ip policy route-map |
| 华为/H3C 命令族 | policy-based-route 策略 |
| 生效范围 | 仅本机转发,不改变路由表与其他设备的选路 |
| 关键检查点 | 匹配条件是否命中、下一跳是否可达 |
典型使用场景
- 双出口网络让特定业务走指定链路(如办公流量走专线、其余走宽带)
- 旁路设备引流:把某些流量引到防火墙或审计设备上过一遍再放行
- 按源地址分流:不同部门的流量从不同出口出去,用于带宽与审计隔离
- 临时应急绕行:主链路故障时用 PBR 把关键业务引到备用路径
- 验证策略是否正确:上线后确认命中计数增长,说明策略真的在起作用
华为与 H3C 查看
华为与 H3C 查看
<Huawei> display policy-based-route ! 策略内容是否完整、是否已应用
<Huawei> display acl 3000 ! 确认匹配条件与命中计数
display ip routing-table 10.2.2.0 ! 确认下一跳对应网段有没有路由
# H3C 命令同名,输出格式略有差异思科 IOS 查看
思科 IOS 查看
SW-CORE-01# show route-map ! 各条 match/set 与序号
SW-CORE-01# show ip policy ! 接口上应用了哪张 route-map
SW-CORE-01# show ip access-lists 100 ! ACL 是否命中(看匹配计数)
SW-CORE-01# show ip route 10.2.2.2 ! 下一跳是否可达两个检查点怎么判断
| 检查点 | 判断依据 | 不通过时的处理 |
|---|---|---|
| 策略命中 | ACL 或 match 的计数持续增长 | 核对源地址、方向与应用接口是否正确 |
| 方向应用 | 接口 inbound 方向已绑定策略 | 补上接口下的策略引用命令 |
| 下一跳可达 | 下一跳地址能 ping 通且有 ARP/邻居 | 补路由或修正下一跳地址与出接口 |
| 接口状态 | 出接口未 down、未被 shutdown | 恢复链路或改用可用出口 |
| 策略顺序 | 先匹配到的规则先行生效 | 调整序号,把精确规则放在靠前位置 |
PBR 命中的报文会按策略给出的下一跳转发,如果该下一跳不可达,报文通常被丢弃而不是自动回落到路由表,这也是配置正确但业务不通的最常见原因。
PBR 的匹配粒度比路由表更靠前,优先级高于普通路由但低于某些更精细的转发动作。做排障时先确认流量到底走在哪一层决策上,不要与路由表选路混在一起分析。