3、PBR配置基础:基于源地址、目的地址与协议的策略路由

大家好,我是你们的老朋友。今天咱们来聊聊PBR(策略路由)的配置基础。说实话,PBR这东西,刚接触时觉得挺玄乎,但说白了,它就是让你能“不走寻常路”的工具。

传统的路由转发,路由器只看目的IP,然后查路由表,找到最优路径就扔过去。但PBR不一样,它允许你根据更多的条件——比如数据包从哪来、要去哪、甚至是什么类型的流量——来决定怎么转发。嗯,这就灵活多了。

核心思想:PBR = 策略 + 路由。先匹配策略,再决定路由,而不是单纯依赖路由表。

我个人习惯把PBR的配置拆成三步走:

  1. 定义流量:用ACL(访问控制列表)或前缀列表,把感兴趣的流量抓出来。
  2. 创建策略:用route-map定义匹配条件和动作。
  3. 应用策略:把策略挂到接口上,让它生效。

下面我们一个一个来看。


3.1 基于源地址的策略路由

这是最常用的一种场景。比如,公司有两个出口,一个电信一个联通。你想让老板的电脑(192.168.1.100)走电信,普通员工走联通。这时候,基于源地址的PBR就派上用场了。

我在项目中遇到过类似的需求。当时客户要求财务部的流量必须走专线,因为要访问银行系统,延迟和稳定性要求极高。嗯,这就是典型的源地址策略。

配置示例:

! 第一步:定义ACL,匹配源地址
access-list 100 permit ip host 192.168.1.100 any

! 第二步:创建route-map
route-map SOURCE-PBR permit 10
 match ip address 100
 set ip next-hop 10.0.0.1   ! 电信下一跳

! 第三步:应用到接口(通常是内网接口)
interface GigabitEthernet0/0
 ip policy route-map SOURCE-PBR

小提示:应用PBR的接口,通常是流量的入接口。也就是说,数据包一进来,就先被PBR处理,再决定怎么转发。

你想想看,如果没有PBR,路由器看到老板的包要去外网,它只会查路由表,可能默认走联通。但有了PBR,它就会乖乖地把老板的包扔给电信。

避坑指南:我曾经犯过一个低级错误——把PBR应用到了出接口上。结果策略死活不生效。后来才想起来,PBR必须在入接口应用。切记!


3.2 基于目的地址的策略路由

有时候,我们关心的不是流量从哪来,而是它要去哪。比如,公司内部访问某个特定的外网服务器(比如8.8.8.8),我们希望它走一条专门的链路,而不是默认路由。

说白了,就是“对特定的目的地,走特定的路”。

配置示例:

! 第一步:定义ACL,匹配目的地址
access-list 101 permit ip any host 8.8.8.8

! 第二步:创建route-map
route-map DEST-PBR permit 10
 match ip address 101
 set ip next-hop 172.16.0.1   ! 专线下一跳

! 第三步:应用到接口
interface GigabitEthernet0/0
 ip policy route-map DEST-PBR

这里要注意一点:ACL中匹配的是目的地址,所以写法是 any host 8.8.8.8。意思是不管谁发的包,只要去8.8.8.8,就匹配。

我记得有一次,客户说他们的视频会议系统总是卡顿。排查后发现,视频流量走了普通的宽带,而宽带的上行带宽只有10M。后来我们用基于目的地址的PBR,把视频会议服务器的IP单独拎出来,走了一条100M的专线。问题瞬间解决。

关键点:基于目的地址的PBR,本质上是对路由表的补充。它允许你覆盖路由表中的默认行为,为特定目的地址指定更优的路径。


3.3 基于协议的策略路由

这个就更有意思了。我们可以根据数据包的协议类型来做转发决策。比如,HTTP流量走出口A,HTTPS流量走出口B,或者VoIP流量走专线,普通上网走宽带。

为什么会有这种需求?你想想看,有些企业会购买多条链路,每条链路的用途不同。比如一条链路专门用于视频会议(UDP),另一条用于网页浏览(TCP 80/443)。这时候,基于协议的PBR就非常实用。

配置示例:

! 第一步:定义ACL,匹配协议类型(这里匹配TCP 80端口)
access-list 102 permit tcp any any eq www

! 第二步:创建route-map
route-map PROTO-PBR permit 10
 match ip address 102
 set ip next-hop 192.168.2.1   ! 出口A

route-map PROTO-PBR permit 20
 match ip address 103
 set ip next-hop 192.168.3.1   ! 出口B

! 第三步:应用到接口
interface GigabitEthernet0/0
 ip policy route-map PROTO-PBR

小技巧:route-map中的permit 10、permit 20是顺序执行的。匹配到permit 10就执行动作,不再往下匹配。所以顺序很重要!

嗯,这里要特别提醒一下:基于协议的PBR,ACL的写法要精确。比如你想匹配所有UDP流量,可以写 permit udp any any。但如果你只想匹配DNS流量(UDP 53),那就得写 permit udp any any eq domain

我曾经在项目中遇到过一个问题:客户说他们的VoIP电话经常断线。排查后发现,VoIP使用的是SIP协议(UDP 5060),但PBR配置时只匹配了UDP,没有指定端口。结果所有UDP流量都走了专线,导致专线带宽被P2P下载占满。后来改成只匹配UDP 5060端口,问题解决。

避坑指南:基于协议的PBR,一定要精确匹配。不要偷懒写 permit ip any any,那样等于没做策略,所有流量都会被匹配,反而可能造成问题。


3.4 三种策略的对比与组合

上面三种策略,其实可以组合使用。比如,你可以同时匹配源地址和目的地址,甚至再加上协议类型。route-map中的match语句支持多个条件,它们之间是“与”的关系(所有条件都满足才算匹配)。

组合示例:

access-list 104 permit ip host 192.168.1.100 host 8.8.8.8
access-list 105 permit tcp any any eq 443

route-map COMBO-PBR permit 10
 match ip address 104
 match ip address 105
 set ip next-hop 10.0.0.1

这个例子中,只有同时满足“源是192.168.1.100”、“目的是8.8.8.8”、“协议是TCP 443”这三个条件的流量,才会被匹配并走10.0.0.1。嗯,条件越精确,控制越精细。

下面我用一张图来总结一下PBR的核心逻辑:

PBR策略路由核心流程 数据包到达入接口 有PBR? 是 → 匹配route-map 否 → 查普通路由表 匹配失败 → 查路由表 根据策略/路由转发

从这张图可以看出,PBR的优先级高于普通路由表。数据包到达入接口后,先检查是否有PBR策略。如果有,就匹配route-map;匹配成功则按策略转发,匹配失败则回退到普通路由表。如果没有PBR,直接查路由表转发。


3.5 总结与避坑

好了,三种基础的PBR配置都讲完了。最后我给大家总结几个要点:

  • 应用接口:PBR一定要在入接口应用,不是出接口。
  • 匹配顺序:route-map中的permit序号从小到大执行,匹配到就停止。
  • 默认行为:如果所有策略都不匹配,数据包会走普通路由表。
  • 调试命令show ip policy 查看接口上应用的策略;debug ip policy 实时调试(慎用,生产环境小心CPU爆满)。

核心原则:PBR是路由表的补充,不是替代。它能解决90%的“不走寻常路”需求,但不要滥用。策略越多,排障越难。

嗯,今天就到这里。记住,PBR配置不难,难的是理解业务需求,然后设计出合理的策略。多动手,多实验,你也能成为PBR高手。


专注资料整理