4、PBR高级配置:基于应用层的策略路由、基于时间段的策略路由、基于报文长度的策略路由

各位,咱们接着聊PBR。基础的路由策略大家应该都玩过了,无非就是根据源IP、目的IP、入接口这些条件来引导流量。但说实话,真正的网络环境哪有这么简单?

我当年在给一家大型企业做网络改造时,就碰到过一个头疼的问题。他们财务部的ERP系统,平时跑得好好的,一到月底结账就卡得要死。查了半天,发现是员工下班后看视频、下载大文件,把出口带宽给挤爆了。你总不能把视频网站全封了吧?人家中午休息也要放松一下。这时候,普通的PBR就抓瞎了。

所以,咱们今天要聊的,就是PBR的三种高级玩法:基于应用层基于时间段基于报文长度。说白了,就是让路由器变得更“聪明”,能看懂你的流量是什么、什么时候来的、有多大。

4.1 基于应用层的策略路由

传统的PBR只能看三层和四层的信息,比如IP地址、端口号。但现在的流量,很多都加密了,或者用了动态端口。你光看端口号,根本分不清它是微信视频还是普通的网页浏览。

基于应用层的策略路由,也叫NBAR(Network-Based Application Recognition,网络应用识别)。它能深入分析报文的应用层特征,比如HTTP的Host字段、SSL证书的SNI信息,甚至能识别出具体的应用,比如抖音、腾讯会议、迅雷。

我个人的习惯是,把NBAR和PBR结合起来用。举个例子,我们可以让“腾讯会议”的流量走专线,保证视频会议不卡;让“迅雷下载”的流量走普通宽带,别占用核心资源。

配置上,大致分三步走:

  1. 定义类(class-map):匹配特定的应用流量。
  2. 定义策略(policy-map):对匹配的流量执行PBR动作。
  3. 应用策略(service-policy):在接口上应用。

看个配置片段,你就明白了:

! 第一步:定义类,匹配腾讯会议流量
class-map match-any CMAP-TENCENT-MEETING
 match protocol attribute app-name "tencent-meeting"

! 第二步:定义策略,将匹配的流量下一跳指向专线
policy-map PMAP-PBR-APP
 class CMAP-TENCENT-MEETING
  set ip next-hop 10.1.1.2
 class class-default
  set ip next-hop 10.2.2.2

! 第三步:在入接口应用
interface GigabitEthernet0/0/0
 service-policy input PMAP-PBR-APP
注意:NBAR需要设备支持相应的功能授权,并且会消耗一定的CPU资源。我曾经在一个低端路由器上开启了全流量NBAR,结果CPU直接飙到90%以上,差点把设备搞挂。所以,生产环境建议只对关键接口或关键流量开启,别一上来就全局搞。

4.2 基于时间段的策略路由

这个就更好理解了。你想想看,公司的网络策略,白天和晚上能一样吗?

白天上班时间,我们要保证OA、ERP、邮件这些办公系统的带宽。晚上下班后,大家想看看视频、打打游戏,只要不违法,其实可以适当放宽限制。

基于时间段的策略路由,就是让PBR策略能根据当前的时间自动切换。它依赖于一个叫“时间范围(time-range)”的东西。

配置思路也很清晰:

  1. 定义时间范围:比如工作日9:00到18:00。
  2. 在ACL或class-map中引用:让匹配条件带上时间属性。
  3. PBR策略中引用这个class-map:实现不同时间走不同路径。

举个例子,我想让上班时间所有流量都走主链路,下班后让P2P下载流量走备份链路:

! 定义上班时间
time-range WORKING-HOURS
 periodic weekdays 09:00 to 18:00

! 定义ACL,匹配P2P流量,并且只在上班时间生效
ip access-list extended ACL-P2P-WORK
 deny   ip any any time-range WORKING-HOURS
 permit tcp any any range 6881 6889
 permit udp any any range 6881 6889

! 定义类,引用ACL
class-map match-any CMAP-P2P
 match access-group name ACL-P2P-WORK

! 定义策略
policy-map PMAP-TIME-PBR
 class CMAP-P2P
  set ip next-hop 192.168.100.1
 class class-default
  set ip next-hop 192.168.200.1

! 应用
interface GigabitEthernet0/0/1
 service-policy input PMAP-TIME-PBR
避坑指南:我曾经犯过一个低级错误,把时间范围里的“periodic”写成了“absolute”。结果策略只在指定的某一天生效,第二天就失效了。大家记住,periodic是周期性生效,absolute是绝对时间(比如从2025-01-01到2025-12-31)。日常运维,99%的情况用periodic就够了。

4.3 基于报文长度的策略路由

这个功能,说实话,用的人不多,但在某些特定场景下,它简直是神器。

它的逻辑很简单:根据IP报文的总长度(包括IP头和数据部分)来决定走哪条路。

为什么要这么做?我举个例子。VoIP语音报文,通常都很小,几十个字节。而文件下载的报文,通常都是1500字节的大包。我们可以让这些小包走低延迟的专线,大包走高带宽的普通线路。

配置上,它不需要定义复杂的ACL或class-map,直接在route-map里用match length命令就行。

! 定义route-map,匹配报文长度在64到512字节之间的流量
route-map PBR-LENGTH permit 10
 match length 64 512
 set ip next-hop 10.1.1.2

! 匹配其他流量(大于512字节)
route-map PBR-LENGTH permit 20
 set ip next-hop 10.2.2.2

! 在接口应用PBR
interface GigabitEthernet0/0/2
 ip policy route-map PBR-LENGTH

核心要点:

  • match length后面的两个数字,分别是最小值和最大值,单位是字节。
  • 这个匹配是基于IP报文的总长度,不是TCP/UDP的载荷长度。
  • 如果报文经过了分片,那么每个分片都会独立匹配。这一点要特别注意。

嗯,这里要注意一点。基于报文长度的策略路由,它不能区分应用类型。比如,一个64字节的TCP ACK包和一个64字节的VoIP包,它都认为是小包,会一视同仁。所以,它通常需要和其他匹配条件(比如源IP)配合使用,才能达到最佳效果。

4.4 三种高级PBR的对比与选择

说了这么多,这三种技术到底该怎么选?我给大家画个图,一看就明白。

PBR高级配置:三种技术对比 基于应用层 核心原理: 深度报文检测(DPI) 识别应用特征 适用场景: • 区分办公/娱乐流量 • 保障关键应用带宽 • 流量精细化调度 优缺点: • 消耗CPU资源 • 识别精准 • 配置灵活 基于时间段 核心原理: 结合time-range 周期性/绝对时间匹配 适用场景: • 上班/下班策略切换 • 节假日带宽保障 • 定时备份/同步 优缺点: • 依赖设备时钟 • 实现简单 • 运维直观 基于报文长度 核心原理: 匹配IP报文总长度 区分大小包 适用场景: • VoIP小包走低延迟链路 • 大文件走高带宽链路 • 负载均衡优化 优缺点: • 无法识别应用 • 配置最简洁 • 资源消耗低 选择建议:追求精准选应用层,追求简单选时间段,追求性能选报文长度

我个人建议,在实际项目中,这三种技术往往不是孤立使用的。比如,你可以先基于时间段,在上班时间启用基于应用层的策略路由,下班后则启用基于报文长度的策略路由。这样组合起来,效果会非常棒。

好了,关于PBR的高级配置,今天就聊到这里。这三种技术,说白了就是让你手里的路由器从“傻大个”变成“智能调度员”。你想想看,一个能看懂应用、知道时间、还能掂量报文大小的网络,是不是比死板的静态路由强太多了?

专注资料整理