路由策略与PBR

路由策略概述

路由策略(Routing Policy)是一套用于对路由信息进行过滤、属性设置等操作的方法,通过对路由的控制,可以影响数据流量转发操作。实际上路由策略并非单一的技术或者协议,而是一个技术专题或方法论,里面包含着多种工具及方法。


主要用路由策略实现如下需求:

(1)、网络设备在发布路由更新,或者接收路由更新时执行路由过滤。

(2)、网络设备在执行路由重分发时,关联路由策略,只将特定的路由引入目标路由协议。

(3)、针对不同的路由设置不同的路由属性(例如路由的度量值、路由的优先级或路由的标记 等)


Route-Policy

Route-Policy(路由-策略)是路由策略技术专题中的一个重要工具,它能在各种场合很好的完成路由策略的部署任务,而且功能非常强大,它既可以被用来执行路由过滤,又可以用于修改路由的属性。

Route-Policy基本概念:

Route-Policy是一个非常重要的路由策略工具,你可以把它想象成拥有一个或多个节点(Node)的列表,每一个节点都可以是一系列条件语句及执行语句的集合,这些节点按照编号从小到大的顺序排列。在每个节点中,用户可以定义条件语句和执行语句,这就有点像程序设计语言里面的if-then(如果-则)组合。在Route-Policy被执行的时候,设备从编号最小的节点开始进行路由匹配,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,并且不会再继续网下一个节点进行匹配。而如果此节点中,有任何一个条件不满足,则前往下一个节点,也就是此节点后面的一个节点,如果匹配则执行该节点中的语句,否则,继续匹配下一个节点,以此类推。

基础配置:

1.创建一个Route-Policy节点

route-policy route-policy-name { permit|deny } node node

在设备的系统视图中使用上述命令,即可创建一个Route-Policy节点,并进入该Route-Policy节点的配置视图。在该命令中,R oute-Policy的名称可以根据需要自行定义,在名称后面,有两个关键字可以选择,他们用于指定该节点的匹配模式。

  • Permit:指定该节点的匹配模式为允许。如果路由匹配的结果是满足该节点的所有if-match语句,则该路由被视为允许通过,该节点的apply语句将被执行,且不再进入下一节点;如果该节点中有if-match语句不满足,则进入下一节点继续匹配。
  • Deny:指定节点的匹配模式为拒绝。如果节点的匹配模式为deny,则该节点的apply语句将不被执行。如果路由匹配的结果是满足该节点的所有if-match语句,那么Route-Policy的匹配过程立刻结束,不会再进入下一个节点,而且满足该节点条件的路由被视为拒绝通过。如果该节点下有if-match语句不满足,则进入下一个节点继续匹配。

eg:
以命令route-policy hcip permit node 10 为例,如果设备上不存在Route-Policy hcip,那么执行该命令后,设备将创建名称为hcip的Route-Policy,同时在该Route-Policy中创建一个节点,该节点的匹配模式为permit,且编号为10。

值得注意的是,当route-policy用于路由匹配时,被匹配对象(也就是路由条目)必须满足一个节点中的所有if-match语句,才被认为匹配该节点。如果某条路由没有被Route-Policy的任何节点匹配,则该路由被视为拒绝通过该Route-Policy,也就是说,Route-Policy的末尾隐含着一个类似拒绝所有的节点。当然,为了避免所有的路由都被拒绝通过,一个Route-Policy中必须至少有一个节点的匹配模式为permit。

2.(可选)配置if-match语句

在route-policy的节点视图下,使用if-match命令可以定义匹配条件,所匹配的对象是路由信息的一些属性,例如路由的目的网络地址或者掩码长度、度量值、标记或下一跳ip地址等。以下是一些常用的if-match命令。

  • 匹配ACL:
    if-match acl {acl-number | acl-name}
  • 匹配ip前缀列表:
    if-match ip-prefix ip-prefix-name
  • 匹配路由的度量值:
    if-match metric metric
  • 匹配路由的出接口:
    if-match interface interface-type interface-number
  • 匹配路由的标记:
    if-match tag tag

一个节点中可以包含多条if-match语句,这些if-match语句之间是“与”的关系,也就是说所有的if-match语句必须同时满足,配匹配对象才被视为匹配该节点,但是if-match route-type if-match interface等除外,这些命令各自的if-match语句之间是“或”的关系。

一个节点中可以不包含任何if-match语句,当这种情况出现时,则视为匹配所有,也就是任何的被匹配对象都满足该节点的条件。

3.(可选)配置apply语句

在route-policy的节点视图下,使用apply命令指定需执行的动作,这些动作主要是对所匹配的路由的某些属性进行修改,例如修改路由的度量值、优先级值、标记等。
以下是一些常用的apply的命令。

  • 设置路由的度量值:
    apply cost [ +|- ] cost
  • 设置路由的度量值类型:
    设置isis的度量值类型:apply cost-type {external | internal}
    设置OSPF的度量值类型:apply cost-type {type-1 | type-2}
  • 设置路由的下一跳地址:
    apply ip-address next-hop {ipv4-address | peer-address}
  • 设置路由的优先级:
    apply preference preference
  • 设置路由的标记:
    apply tag tag

一个节点可以不包含任何apply语句,此时该节点只被用于执行路由过滤,而不用于设置路由属性。

Route-policy基础实验配置示例:Router-Policy基础实验_一张白纸白又白的博客-CSDN博客


Filter-Policy

Filter-Policy是另外一种用于路由过滤的工具,可以将其视为一种路由过滤器。需要强调的是,Filter-Policy只能够对路由信息进行过滤,而无法对LSA进行过滤。

Filter-policy和Route-Policy大致作用相同,都可以进行路由过滤。

Filter-Policy实验配置示例:Filter-Policy基础配置实验_一张白纸白又白的博客-CSDN博客


Ip前缀列表

上面讲述了两种常用的路由策略工具,使用Route-Policy能够在执行路由重分发(即路由引入)时过滤路由信息,或者修改路由属性,而Filter-Policy也能够完成路由过滤任务。当然无论时采用何种工具,在执行路由策略时,首先需要将“感兴趣”的路由匹配出来,或者说区分出来,只有这样,才能够有针对性的进行路由属性修改或者路由过滤。acl可以很好的将感兴趣路由匹配出来,但是也存在缺陷,它只能够匹配路由条目中的目的网络地址,而无法匹配路由的目的掩码。(比如:172.16.0.0/24 ,172.16.0.0/16,想要过滤掉24的话,使用rule deny source 172.168.0.0 0.0.0.0,如此一来,两个都被过滤掉了。。。。),无论如何,acl作为一个路由匹配工具,只能在一些较为简单的路由环境中使用,当面对更加复杂的路由匹配需求时,就应该考虑另一个工具,那就是IP 前缀列表(IP Prefix List)。

IP前缀列表的基本概念

从名字上看,IP前缀列表是一个列表形态的工具。它所匹配的对象时IP地址前缀,也就是路由条目。一个路由条目由目的网络地址(也称ip前缀)及掩码长度(也被称为前缀长度)共同标识。使用acl从一批路由中筛选出感兴趣的路由时,是无法指定被匹配对象的目的网络掩码长度的,但是IP前缀列表却可以做到,他除了能够指定被匹配对象的目的网络地址,还能指定目的网络掩码长度,从而实现对路由的精确匹配。

如下展示了一个简单的ip前缀列表的示例。ip前缀列表可以包含一条或多条语句,每条语句都使用一个十进制的序号(index)进行标识。在本例中,这个名称为abcd的ip前缀列表中只有一条语句,这条语句的序号为10,正如前面所说,您可以为一个ip前缀列表创建多条语句,每条语句使用不同的序号,所有的语句安好序号从小到大依序排列,这与ACL非常类似。
eg: ip ip-prefix abcd index 10 permit 172.16.0.0 16
在本例中,这条ip前缀列表的语句中指定了ip地址(172.16.0.0)以及掩码长度(16),如此一来,该语句就精确地匹配了路由172.16.0.0/16,ip前缀列表除了能够精确的匹配一条路由,还能够匹配一组有规律的路由。

如下展示了ip前缀列表的另一个示例,该示例中增加了greater-equal(大于或等于)及less-equal(小于或等于)这两个关键字及参数,从而指定了掩码长度的范围。这条命令要求路由的目的网络地址的前16个比特位与172.16.0.0的前16个比特位相同。另外路由的目的网络掩码长度需大于或等于24,同时小于或等于32。只有满足上述条件的路由才会被该语句匹配。
eg: ip ip-prefix hello index 10 permit 172.16.0.0 16 greater-equal 24 less-equal 32

如果一条语句中只是指定了greater-equal关键字(且没有指定less-equal关键字),则掩码长度的范围是大于或等于greater-equal关键字所指定的值,同时小于或等于32。而如果只是指定了less-equal关键字(且没有指定greater-equal关键字),则掩码长度的范围是大于或者等于命令中指定的掩码长度,同时小于或等于less-equal关键字指定的值。
当一个ip前缀列表开始进行路由匹配时,将从序号最小的语句开始依序匹配,如果路由不满足该语句中的条件,则继续匹配下一个语句。只要满足当前语句,便不再继续匹配后续的语句,被当前语句匹配住的路由,将根据该语句所定义的匹配模式(Permit 或Deny)判断是否被允许通过,Permit为允许,Deny为拒绝。另外,在ip前缀列表的末尾隐含着一条拒绝所有的语句,因此一个对象若不满足任何一个语句,则该对象被视为不被该ip前缀列表允许通过。
ip前缀列表是一个重要的路由策略工具,能够作为路由过滤器被应用于各种场景,例如可以被Route-Policy调用,或者Filter-Policy调用等,另外,也可以在BGP路由协议中被直接用于路由过滤。

ip-prefix和acl的作用是一样的,都是用来匹配路由,只是前者更精细一点支持掩码。

ip前缀实验配置示例:IP前缀列表配置实验_一张白纸白又白的博客-CSDN博客


PBR(Policy-Based Routing,PBR)

首先让我们回顾一下传统ip路由的概念,所谓的路由,指的是当路由器(或其他支持路由功能的网络设备)收到一个ip报文时,在其路由表中查询该报文的目的ip地址,在找到最匹配的路由表项后,按照该表项所指示的出接口及下一跳ip地址转发该报文,从这个描述可以看出,路由行为只关心报文的目的ip地址,并不关心其源ip地址。当面对一些特殊的需求时,传统的路由行为时存在短板的。
所谓的策略路由,即是基于策略的路由(Policy-Based Routing,PBR),PBR被看作是一种“升级版”的路由机制,它使得网络设备不仅能够基于报文的目的ip地址进行数据转发,更能基于其他元素进行数据转发,例如源ip地址、源mac地址、目的mac地址、源端口号、目的端口号、vlan-id等。还可以使用acl匹配特定的报文,然后针对该acl进行PBR部署。

需要强调的是,路由策略与PBR是存在根本性差异的,如下:

路由策略与PBR的区别
名称 操作对象 描述
路由策略 路由信息 路由策略是一套用于对路由信息进行过滤、属性设置等操作的方法,通过对路由的操作或控制,来影响数据报文的转发路径。
PBR 数据报文 PBR直接对数据报文进行操作,通过多种手段匹配感兴趣的报文,然后执行丢弃或强制转发路径等操作

以华为ar路由器为例,其PBR是通过MQC(Modular Qos Command-Line Interface,模块化QoS命令行)来实现的。MQC的存在使得PBR的部署变得非常简单,命令也更加模块化。实际上,MQC的功能是非常强大的,它主要用于部署QoS(Quality of Service,服务质量),PBR只是它所能够实现的诸多功能之一。MQC包含三个要素:流分类(Traffic Classifier)、流行为(Traffic Behavior)和流策略(Traffic Policy),基本思路是,使用流分类来匹配具有共同特征的流量,使用流行为定义所要执行的动作,然后通过流策略将前面定义好的流分类和流行为进行绑定,最后将流策略应用到设备上,从而实现“针对特定的流量执行特定的动作”这一目标。

PBR基础实验操作示例:PBR基础实验_一张白纸白又白的博客-CSDN博客


版权声明:本文为qq_51562406原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。