文章目录
路由策略(Routing Policy)是一套用于对路由信息进行过滤、属性设置等操作的方,法,通过对路由的控制,可以影响数据流量转发操作。实际上路由策略并非单一的技术或者协议,而是一个技术专题或方法论,里面包含着多种工具及方法。
路由策略的应用是非常广泛的,也是非常重要的,我们主要通过部署路由策略来实现如下几种需求。
(1)网络设备在发布路由更新,或者接收路由更新时执行路由过滤。
(2)网络设备在执行路由重分发时,关联路由策略,只将特定的路由引入目标路由协议。
(3)针对不同的路由设置不同的路由属性(例如路由的度量值、路由的优先级或路由的标记等)。
1.Route-Policy
Route-Policy (路由-策略)是路由策略技术专题中的一个重要工具,它能在各种场合很好地完成路由策略的部署任务,而且功能非常强大,它既可以被用来执行路由过滤,又可以用于修改路由的属性。
2.Route-Policy的基本概念
Route-Policy是一个非常重要的路由策略工具,如图所示,您可以把它想象成拥有一个或多个节点(Node)的列表,每一个节点都可以是一系列条件语句及执行语句的集合,这些节点按照编号从小到大的顺序排列。
在每个节点中,用户可以定义条件语句及执行语句,这就有点像程序设计语言里的I-Then (如果-则)组合。
在Route-Policy被执行的时候,设备从编号最小的节点开始进行路由匹配,在本例中首先看节点1,设备对该节点中的条件语句进行匹配,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,并且不会再继续往下一个节点进行匹配。
而如果节点1中,有任何一个条件不满足,则前往下一个节点,也就是到节点2中去匹配条件语句,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,如果不满足,则继续往下一个节点进行匹配,以此类推。
3.基础配置
3.1创建一个Route-Policy节点
route-policy route-policy-name { permit | deny } node node
Permit:指定该节点的匹配模式为允许。
如果路由匹配的结果是满足该节点的所有if-match语句,则该路由被视为允许通过,该节点的apply语句将被执行,且不再进入下一个节点;如果该节点中有if-match语句不满足,则进入下一个节点继续匹配。
Deny:指定节点的匹配模式为拒绝。
如果节点的匹配模式为deny,则该节点的apply语句将不被执行。如果路由匹配的结果是满足该节点的所有if-match语句,那么Route-Policy的匹配过程立即结束,不会再进入下一个节点,而且满足该节点条件的路由被视为拒绝通过。如果该节点下有if-match语句不满足,则进入下一个节点继续匹配。
以命令route-policy hcnp permit node 10为例,如果设备上不存在Route-Policyhcnp,那么执行该命令后,设备将创建名称为hcnp的Route-Policy,同时在该Route-Policy中创建一个节点,该节点的匹配模式为permit,且编号为10。
3.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语句之间是“或”的关系。
3.3(可选)配置apply语句
在Route-Policy的节点视图下,使用apply命令指定需执行的动作,这些动作主要,是对所匹配的路由的某些属性进行修改,例如修改路由的度量值、优先级值、标记等。以下是一些常用的apply命令。
设置路由的度量值:
apply cost [+ | -] cost
设置路由的度量值类型:
设置IS-IS的度量值类型: 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语句,此时该节点只被用于执行路由过滤,而不"用于设置路由的属性。
4.Filter-Policy
一款用于路由过滤的工具Filter-Policy (过滤-策略),可以将其视为一种路由过滤器。
需要强调的是, Filter-Policy只能够对路由信息进行过滤,而无法对LSA进行过滤。Filter-Policy可以在RIP, OSPF,IS-IS以及BGP等常见的动态路由协议中应用。
5.IP前缀列表
从名字上看, IP前缀列表是一个列表形态的工具。它所匹配的对象是IP地址前缀,也就是路由条目。
一个路由条目由目的网络地址(也被称为IP前缀)及掩码长度(也被称为前缀长度)共同标识。
使用ACL从一批路由中筛选出感兴趣的路由时,是无法指定被匹配对象的目的网络掩码长度的,但是IP前缀列表却可以做到,它除了能够指定被匹配对象的目的网络地址,还能指定目的网络掩码长度,从而实现对路由的精确匹配。
图展示了一个简单的IP前缀列表的示例。IP前缀列表可以包含一条或多条语句,每条语句都使用一个十进制的序号(Index)进行标识。
在本例中,这个名称为abcd的IP前缀列表中只有一条语句,这条语句的序号为10,正如前面所说,可以为一个IP前缀列表创建多条语句,每条语句使用不同的序号,所有的语句按照序号从小到大依序排列,这与ACL非常类似。
在本例中,这条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,只有满足上述条件的路由才会被该语句匹配。
如果一条语句中只是指定了greater-equal关键字(且没有指定less-equal关键字),则掩码长度的范围是大于或等于greater-equal关键字所指定的值,同时小于或等于32.而如果只是指定了less-equal关键字(且没有指定greater-equal关键字),则掩码长度的范围是大于或等于命令中指定的掩码长度,同时小于或等于less-equal关键字指定的值。