一、路由策略简介
路由策略(Routing Policy)是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现。
二、路由策略的应用
路由策略的应用灵活广泛,主要有下面几种方式:
控制路由的发布:
路由协议在发布路由信息时,通过路由策略对路由信息进行过滤,只发布满足条件的路由信息。
控制路由的接收:
路由协议在接收路由信息时,通过路由策略对路由信息进行过滤,只接收满足条件的路由信息,可以控制路由表项的数量,提高网络的安全性。
管理引入的路由:
路由协议在引入其它路由协议发现的路由时,通过路由策略只引入满足条件的路由信息,并控制所引入的路由信息的某些属性,以使其满足本协议的要求。
设置路由的属性:
对通过路由策略的路由设置相应的属性。
三、路由策略的实现
路由策略的实现步骤如下:
(1) 首先要定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以以路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。
(2) 然后再将匹配规则应用于路由的发布、接收和引入等过程的路由策略中。可以灵活使用过滤器来定义各种匹配规则,过滤器的相关内容见下面介绍。
四、过滤器
过滤器可以看作是路由策略过滤路由的工具,单独配置的过滤器没有任何过滤效果,只有在路由协议的相关命令中应用这些过滤器,才能够达到预期的过滤效果。
路由协议可以引用访问控制列表、地址前缀列表、AS 路径访问列表、团体属性列表、扩展团体属性列表和Route-policy 几种过滤器。下面对各种过滤器逐一进行介绍。
1. 访问控制列表
访问控制列表包括针对 IPv4 报文的ACL 和针对IPv6 报文的ACL。用户在定义ACL时可以指定IP(v6)地址和前缀范围,用于匹配路由信息的目的网段地址或下一跳地址。
2. 地址前缀列表
地址前缀列表包括 IPv4 地址前缀列表和IPv6 地址前缀列表。
地址前缀列表的作用类似于 ACL,但比它更为灵活,且更易于用户理解。地址前缀列表在应用于路由信息的过滤时,其匹配对象为路由信息的目的地址信息域;另外,用户可以指定gateway 选项,指明只接收某些路由器发布的路由信息。
一个地址前缀列表由前缀列表名标识。每个前缀列表可以包含多个表项,每个表项可以独立指定一个网络前缀形式的匹配范围,并用一个索引号来标识,索引号指明了进行匹配检查的顺序。
在匹配的过程中,路由器按升序依次检查由索引号标识的各个表项,只要有某一表项满足条件,就意味着通过该地址前缀列表的过滤(不再进入下一个表项的测试)。
3. AS 路径访问列表(as-path-acl)
as-path-acl 仅用于BGP。BGP 的路由信息中,包含有自治系统路径域。as-path-acl就是针对自治系统路径域指定匹配条件。
4. 团体属性列表(community-list)
community-list 仅用于BGP。BGP 的路由信息包中,包含一个community 属性域,用来标识一个团体。community-list 就是针对团体属性域指定匹配条件。
5. 扩展团体属性列表(extcommunity-list)
extcommunity-list 仅用于BGP。BGP 扩展团体属性有两种,一种是用于VPN 的Route-Target(路由目标)扩展团体,另一种则是Source of Origin(源节点)扩展团体。扩展团体属性列表就是针对这两种属性指定匹配条件。
6. 路由策略
路由策略是一种比较复杂的过滤器,它不仅可以匹配路由信息的某些属性,还可以在条件满足时改变路由信息的属性。路由策略可以使用前面几种过滤器定义自己的匹配规则。
一个路由策略可以由多个节点(node)构成,不同节点之间是“或”的关系。系统按节点序号依次检查各个节点,如果通过了其中一节点,就意味着通过该路由策略,不再对其他节点进行匹配测试。
每个节点可以由一组if-match、apply 和continue 子句组成。
① if-match 子句定义匹配规则,匹配对象是路由信息的一些属性。同一节点中的不同if-match 子句是“与”的关系,只有满足节点内所有if-match 子句指定的匹配条件,才能通过该节点的匹配测试。
② apply 子句指定动作,也就是在通过节点的匹配后,对路由信息的一些属性进行设置。
③ continue 子句用来配置下一个执行节点。当路由成功匹配当前路由策略节点时,可以指定路由继续匹配同一路由策略内的下一个节点,这样可以组合路由策略各个节点的if-match 子句和apply 子句,增强路由策略的灵活性。
if-match、apply 和continue 子句可以根据应用进行设置,都是可选的。
① 如果只过滤路由,不设置路由的属性,则不需要使用 apply 子句。
② 如果某个 permit 节点没有配置任何if-match 子句,则该节点匹配所有的路由。
③ 通常在多个 deny 节点后设置一个不含if-match 子句和apply 子句的permit节点,用于允许其它的路由通过。