第32篇:策略路由(PBR):不按路由表走

关键词:策略路由、PBR、Traffic Policy、流分类、流行为、流量引导


一、引言

在常规转发中,路由器根据路由表做决策:匹配目的 IP 地址,查找最长匹配的前缀,转发到对应的下一跳。但有时我们需要更精细的转发控制——比如将视频会议流量走专线,将普通上网流量走公网;或者根据源地址将不同部门的流量引导到不同的出口。

这种"不按目的地址走路由表"的转发方式就是策略路由(Policy-Based Routing,PBR)。

二、核心概念

2.1 策略路由 vs 普通路由

维度 普通路由(路由表) 策略路由(PBR)
匹配条件 仅目的 IP 地址 源 IP、目的 IP、协议、端口、DSCP、ACL 等
匹配粒度 前缀长度 五元组及以上
转发依据 最长匹配 + 优先级 + 度量值 策略匹配顺序 + 动作
执行位置 全局(所有报文) 应用在指定接口的入方向
优先级 策略路由 > 普通路由 —

2.2 策略路由的三大组件

华为设备中,策略路由基于 Traffic Policy 框架实现,包含三个组件:

  1. 流分类(Traffic Classifier):定义"什么样的流量",通过 ACL、DSCP 等匹配条件
  2. 流行为(Traffic Behavior):定义"对流量做什么",如修改下一跳、修改出接口、修改 DSCP 等
  3. 流策略(Traffic Policy):将分类和行为绑定,然后应用到接口的入方向

2.3 策略路由的处理流程

策略路由的处理流程 - 图示

注意:策略路由优先于路由表。只有当策略路由没有匹配时,才走正常的路由表查找。

三、技术细节

3.1 ACL 匹配条件

策略路由的流分类通常使用 ACL 来定义匹配规则:

ACL 类型 编号范围 匹配能力
基本 ACL 2000-2999 源 IP 地址
高级 ACL 3000-3999 源/目的 IP、协议、端口等
二层 ACL 4000-4999 源/目的 MAC、802.1p 优先级

3.2 流行为的动作类型

动作 关键命令 说明
重定向到下一跳(弱策略) redirect ip-nexthop <ip> 按指定下一跳查路由转发表,查不到再按报文目的 IP 正常转发
重定向到下一跳+出接口(强策略) redirect ip-nexthop <ip> interface <if> 强制走指定出接口;出接口 Down 或下一跳不可达时直接丢弃,不回退路由表
修改 DSCP remark dscp <value> 修改报文的 DSCP 值
丢弃报文 deny 直接丢弃(行为级拒绝)

说明: - 华为流行为(Traffic Behavior)默认对命中报文放行;需要改路时配置 redirect(出接口必须与下一跳配对使用),需要丢弃时配置 deny。 - 弱策略(仅 redirect ip-nexthop):用指定下一跳查转发表,查不到时回退为按报文目的 IP 正常路由转发;强策略(redirect ip-nexthop ... interface ...):不回退、查不到即丢弃(可配 route-forward 关键字让接口失效时回退)。 - 注意与 Cisco 的差异:华为上流分类 ACL 中被 deny 命中的报文直接丢弃;而 Cisco 的 deny 只是不重定向、仍按路由表转发。

3.3 策略路由 vs 浮动静态路由的区别

在第30篇中学习的浮动静态路由基于优先级实现主备切换,而策略路由基于内容匹配实现差异化转发:

特性 浮动静态路由 策略路由
决策依据 链路状态 + 优先级 报文内容(ACL 匹配)
应用场景 链路备份 差异化服务、多出口分流
配置复杂度 低 中
性能开销 低 略高(需逐包匹配分类)

四、实战配置与故障案例

4.1 案例一:视频会议走专线,上网走公网

需求:企业有两出口,公网出口用于员工上网,专线出口用于视频会议。视频会议使用端口 1720(H.323)和 50000-60000(RTP 媒体流)。

# 步骤1:定义匹配视频会议流量的 ACL
[HUAWEI] acl number 3001
[HUAWEI-acl-adv-3001] rule 5 permit tcp destination-port eq 1720
[HUAWEI-acl-adv-3001] rule 10 permit udp destination-port range 50000 60000
[HUAWEI-acl-adv-3001] rule 15 permit tcp destination-port range 50000 60000
[HUAWEI-acl-adv-3001] quit

# 步骤2:定义流分类
[HUAWEI] traffic classifier video
[HUAWEI-classifier-video] if-match acl 3001
[HUAWEI-classifier-video] quit

# 步骤3:定义流行为(转发到专线下一跳)
[HUAWEI] traffic behavior video-line
[HUAWEI-behavior-video-line] redirect ip-nexthop 10.255.0.2
[HUAWEI-behavior-video-line] quit

# 步骤4:绑定分类和行为到策略
[HUAWEI] traffic policy pbr-policy
[HUAWEI-trafficpolicy-pbr-policy] classifier video behavior video-line
[HUAWEI-trafficpolicy-pbr-policy] quit

# 步骤5:应用到入接口
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] traffic-policy pbr-policy inbound
[HUAWEI-GigabitEthernet0/0/0] quit

验证:

# 查看策略已应用到的接口与方向
<HUAWEI> display traffic policy applied-record
# 确认 pbr-policy 已应用到 GE0/0/0 的入方向

# 查看策略配置与各流分类的当前命中计数
<HUAWEI> display traffic policy pbr-policy

# 只看某个流分类的命中统计(老版本设备可用上一条命令替代查看)
<HUAWEI> display traffic classifier statistics name video
# 命中计数持续增长,说明流量已被该分类捕获;具体命令与回显以设备版本为准

4.2 案例二:多部门多出口分流

需求:财务部(192.168.10.0/24)走专线出口,研发部(192.168.20.0/24)走公网出口,其他走默认出口。

# ACL 1:财务部分流
[HUAWEI] acl number 3001
[HUAWEI-acl-adv-3001] rule 5 permit ip source 192.168.10.0 0.0.0.255
[HUAWEI-acl-adv-3001] quit

# ACL 2:研发部分流
[HUAWEI] acl number 3002
[HUAWEI-acl-adv-3002] rule 5 permit ip source 192.168.20.0 0.0.0.255
[HUAWEI-acl-adv-3002] quit

# 流分类
[HUAWEI] traffic classifier finance
[HUAWEI-classifier-finance] if-match acl 3001
[HUAWEI] traffic classifier rd
[HUAWEI-classifier-rd] if-match acl 3002

# 流行为
[HUAWEI] traffic behavior finance-behavior
[HUAWEI-behavior-finance-behavior] redirect ip-nexthop 10.255.0.2    # 专线
[HUAWEI] traffic behavior rd-behavior
[HUAWEI-behavior-rd-behavior] redirect ip-nexthop 203.0.113.1        # 公网

# 策略绑定(注意顺序:先匹配优先级高的)
[HUAWEI] traffic policy multi-export
[HUAWEI-trafficpolicy-multi-export] classifier finance behavior finance-behavior
[HUAWEI-trafficpolicy-multi-export] classifier rd behavior rd-behavior
[HUAWEI-trafficpolicy-multi-export] quit

# 应用
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] traffic-policy multi-export inbound

4.3 案例三:策略路由未生效的故障排查

故障描述:配置了策略路由后,流量仍然按路由表转发,没有走指定的下一跳。

# 排查步骤1:确认策略是否应用到接口
<HUAWEI> display traffic policy applied-record
# 检查接口和方向是否正确(inbound/outbound)

# 排查步骤2:检查 ACL 匹配
<HUAWEI> display acl 3001
# 确认 ACL 规则中的源/目的地址和端口与预期一致

# 排查步骤3:检查流分类和流行为的绑定
<HUAWEI> display traffic policy pbr-policy
# 确认 classifier 和 behavior 正确关联

# 排查步骤4:检查下一跳可达性
<HUAWEI> ping 10.255.0.2
# 弱策略(仅 redirect ip-nexthop):下一跳查不到路由时,回退为按报文目的 IP 正常转发
# 强策略(redirect ip-nexthop ... interface ...):下一跳不可达或出接口 Down 时直接丢弃,不回退

# 常见根因:
# 1. 策略应用在 outbound 方向而非 inbound → 改到入方向
# 2. ACL 匹配条件不精确 → 检查端口号和协议、通配符
# 3. 下一跳不可达 → 弱策略会静默回退为普通转发(表面"未生效"),强策略则丢包 → 先核对下一跳路由/连通性
# 4. 流行为只配了 permit → permit 不做转发修改,需要配置 redirect

4.4 策略路由的回包问题

策略路由只影响去方向报文,回包走目的路由表。如果回包路径与去程不对称,可能导致某些状态检测防火墙丢弃报文或会话不一致。

# 解决方案:在对端也配置回指的策略路由
# 或者确保目的路由表中存在正确的回程路由
[HUAWEI] ip route-static 192.168.10.0 24 10.1.1.1
[HUAWEI] ip route-static 192.168.20.0 24 10.1.1.1

五、总结

组件 作用 关键命令
ACL 定义匹配条件 acl number 3001
流分类 将 ACL 封装为分类器 traffic classifier
流行为 定义处理动作 traffic behavior + redirect ip-nexthop
流策略 绑定分类与行为 traffic policy
接口应用 在接口入方向生效 traffic-policy xxx inbound
注意事项 说明
策略路由优先于路由表 匹配策略后不走路由表
仅影响去程 回包仍需正常路由支持
下一跳可达性 弱策略查不到下一跳路由时回退为按目的 IP 转发;强策略(带出接口)不达即丢弃
ACL 规则顺序 默认按 rule 编号从小到大匹配
性能考虑 策略在接口入方向逐包匹配,ACL 规则较多时有一定处理开销

思考

  1. 策略路由中 redirect ip-nexthop(弱策略)和 redirect ip-nexthop ... interface ...(强策略)有什么区别?各适用于什么场景?
  2. 如果策略路由匹配的下一跳不可达,报文会丢弃还是会回退到路由表?
  3. 当策略路由和 NAT 同时使用时,配置顺序需要注意什么?

下篇预告:第33篇:动态路由协议分类:IGP 与 EGP 的区别