第32篇:策略路由(PBR)——不按路由表走
一、写在前面
普通的路由转发方式是:数据包到达路由器 → 查路由表 → 按最长匹配发送。所有符合条件的流量都走同一个路径。
但有些场景,我们需要根据更细粒度的条件(源 IP、协议类型、报文大小等)来决定流量走哪条路,而不是只看目的 IP。
策略路由(PBR, Policy-Based Routing) 就是为了解决这个问题——不按路由表走,按管理员定义的策略走。
二、策略路由 vs 普通路由
| 对比 | 普通路由 | 策略路由(PBR) |
|---|---|---|
| 转发依据 | 目的 IP 地址 | 源 IP / 目的 IP / 协议 / 端口等 |
| 转发来源 | 路由表 | 用户自定义的策略 |
| 优先级 | 路由表匹配 | 策略路由优先于路由表 |
| 灵活性 | 低 | 高 |
| 配置复杂度 | 低 | 高 |
一句话:路由表是"去哪看哪",策略路由是"谁去哪走哪条路"。
三、典型应用场景
场景 1:区分内外网出口(源 IP 策略)
┌── 电信出口(100.1.1.1)
研发部流量 ────┤
└── 联通出口(200.1.1.1)
市场部流量 ────┤
需求:研发部的流量走电信出口,市场部的流量走联通出口。
场景 2:特定应用走特定链路
# 视频会议流量走低延迟链路
# 大文件下载走普通链路
场景 3:多链路负载分担
# 不是简单的 ECMP,而是按流量特征分发到不同链路
场景 4:本地流量优先
PC 发出的流量 → 先走本地/内网 → 再走出口
四、华为策略路由配置
4.1 配置思路
策略路由的配置分三步:
1. 定义 ACL(匹配感兴趣的流量)
2. 定义流行为(动作:设置下一跳/出接口)
3. 定义流策略(把 ACL + 流行为绑定)
4. 应用到接口(inbound 方向)
4.2 案例:研发部走电信,市场部走联通
拓扑:
R1
┌─────────┐
GE0/0/0 │ GE0/0/1 │ GE0/0/2
研发部 │ 10.0.1.0/24 │ 100.1.1.1 → 电信
市场部 │ │ 200.1.1.1 → 联通
配置:
# 第 1 步:定义 ACL,匹配研发部和市场部的流量
[R1] acl 3001
[R1-acl-adv-3001] rule 5 permit ip source 10.0.1.0 0.0.0.255
[R1-acl-adv-3001] quit
[R1] acl 3002
[R1-acl-adv-3002] rule 5 permit ip source 10.0.2.0 0.0.0.255
[R1-acl-adv-3002] quit
# 第 2 步:定义流行为
[R1] traffic behavior to-telecom
[R1-behavior-to-telecom] redirect ip-nexthop 100.1.1.254 ← 重定向下一跳到电信
[R1-behavior-to-telecom] quit
[R1] traffic behavior to-unicom
[R1-behavior-to-unicom] redirect ip-nexthop 200.1.1.254 ← 重定向下一跳到联通
[R1-behavior-to-unicom] quit
# 第 3 步:定义流策略
[R1] traffic policy pbr-policy
[R1-policy-pbr-policy] classifier acl 3001 behavior to-telecom ← 研发部→电信
[R1-policy-pbr-policy] classifier acl 3002 behavior to-unicom ← 市场部→联通
[R1-policy-pbr-policy] quit
# 第 4 步:应用在入接口
[R1] interface gigabitethernet 0/0/0
[R1-GigabitEthernet0/0/0] traffic-policy pbr-policy inbound
4.3 验证
# 在研发部 PC 上 tracert
C:\> tracert 8.8.8.8
1 1 ms R1 (10.0.1.254)
2 2 ms 100.1.1.254 ← 走了电信
# 在市场部 PC 上 tracert
C:\> tracert 8.8.8.8
1 1 ms R1 (10.0.2.254)
2 2 ms 200.1.1.254 ← 走了联通
五、策略路由的两种类型
5.1 接口策略路由(基于接口)
上一节的配置就是在接口上应用策略——所有从该接口进来的流量,都匹配该策略。
特点:影响从该接口进入的所有流量。
5.2 本地策略路由(基于本机)
影响路由器自己发起的流量(如路由器主动 ping、NTP、SNMP 等)。
[R1] policy-based-route local-pbr permit acl 3001
[R1] ip local policy-based-route local-pbr
六、策略路由的匹配顺序
[R1-policy-pbr-policy] display traffic policy
Policy: pbr-policy
Classifier: acl 3001 ← 先匹配
Behavior: to-telecom
Classifier: acl 3002 ← 后匹配
Behavior: to-unicom
Classifier: default-class ← 默认(未匹配的走普通路由)
Behavior: be
策略中 Classifier 的匹配顺序 = 配置顺序。先配置的先匹配。如果流量匹配了第一个 rule,就不会继续往下匹配。
七、策略路由的重要注意事项
| 注意点 | 说明 |
|---|---|
| 仅支持 inbound 方向 | 华为设备不支持 outbound 方向的策略路由 |
| 策略路由优先于路由表 | 匹配策略的直接走策略,不查路由表 |
| 未匹配的走普通路由 | 默认会走路由表转发 |
| 配置后立即生效 | 不需要重启 |
| 不能太复杂 | 大量 ACL + 复杂策略会影响转发性能 |
| 本地策略路由影响本地包 | 路由器自己产生的包也用策略路由 |
八、对比:策略路由 vs 浮动静态路由
| 对比 | 策略路由 | 浮动静态路由 |
|---|---|---|
| 匹配条件 | 源IP/协议/端口等多维度 | 目的网段 |
| 切换方式 | 策略内指定下一跳 | 主备优先级切换 |
| 灵活性 | 高 | 低 |
| 配置复杂度 | 中 | 简单 |
| 适用场景 | 多出口按流量类型分流 | 简单的主备链路 |
九、思考
- 策略路由和普通路由有什么本质区别?
- 什么时候用策略路由而不是普通路由?
- 华为策略路由的配置分哪几步?最后应用在接口的哪个方向?
- 如果流量没有匹配任何策略规则,数据包会怎么处理?
- 策略路由可以匹配源 IP、目的 IP、协议类型,还能匹配什么?
- 策略路由能替代路由表吗?为什么?
下篇预告:第33篇《动态路由协议分类_IGP与EGP的区别》——了解动态路由协议的分类和IGP与EGP的区别。