【网络协议详解】——路由策略技术(学习笔记)
目录
路由策略简介
定义
目的
受益
路由策略各工具之间的调用关系
访问控制列表(ACL)
地址前缀列表(IP-Prefix List)
地址前缀列表的过滤规则
AS路径过滤器(AS_Path-Filter)
AS_Path Filter介绍
AS_Path正则表达式的组成
团体属性过滤器(Community-Filter)
Community属性介绍
扩展团体属性过滤器(Extcommunity-Filter)
RD属性过滤器(Route Distinguisher-Filter)
Route-Policy
Route-Policy的组成
路由策略简介
定义
路由策略是通过一系列工具或方法对路由进行各种控制的“策略”。该策略能够影响到路由产生、发布、选择等,进而影响报文的转发路径。工具包括ACL、route-policy、ip-prefix、filter-policy等,方法包括对路由进行过滤,设置路由的属性等。
目的
在IP网络中,路由策略的用途主要包括两个方面:对路由信息进行过滤和修改路由的属性,如表1所示。
作用 | 执行过程 | 结果 |
---|---|---|
对路由信息进行过滤 | 如果某条路由符合某种条件,那么就接收这条路由。 如果某条路由符合某种条件,那么就发布这条路由。 如果某条路由符合某种条件,那么就引入这条路由。 | 要不要这条路由? |
修改路由的属性 | 如果某条路由符合某种条件,那么将这条路由的某个属性值修改为一个特定值。 | 将这条路由的某个属性值修改为一个特定值。 |
受益
路由策略具有以下价值:
- 控制路由的接收、发布和引入,提高网络安全性。
- 修改路由属性,对网络数据流量进行合理规划,提高网络性能。
路由策略各工具之间的调用关系
在实际应用中,为了达到控制路由的目的,需要路由策略的不同工具之间组合使用。图1说明了这些工具之间的调用关系。
如图1所示,路由策略相关的工具划分成三类:
- 条件工具:用于把需要的路由“抓取”出来。
- 策略工具:用于把“抓取”出来的路由执行某个动作,比如允许、拒绝、修改属性值等。
- 调用工具:用于将路由策略应用到某个具体的路由协议里面,使其生效。
访问控制列表(ACL)
访问控制列表ACL是一系列过滤规则的集合,可以称之为规则组。在每个规则组中,所有过滤规则是具有前后顺序的。用户在定义过滤规则时,根据报文的入接口、源或目的地址、协议类型、源或目的端口号等属性描述过滤规则,同时指定了拒绝或接收报文。系统根据这些过滤规则对到达设备的报文进行分类,并判断报文被拒绝或者接收。
ACL本身只是一组规则的集合,它只是通过过滤规则对报文进行了分类,因此ACL需要与路由策略配合使用,才能实现过滤报文的功能。
ACL包括针对IPv4路由的ACL和针对IPv6路由的ACL。用户在ACL中指定IP地址和子网范围,用于匹配路由信息的源地址、目的网段地址或下一跳地址。
地址前缀列表(IP-Prefix List)
地址前缀列表是一种包含一组路由信息过滤规则的过滤器,用户可以在规则中定义前缀和掩码范围,用于匹配路由信息的目的网段地址或下一跳地址。地址前缀列表可以应用在各种动态路由协议中,对路由协议发布和接收的路由信息进行过滤。
地址前缀列表和ACL相比,配置简单,应用灵活。但是当需要过滤的路由数量较大,且没有相同的前缀时,配置地址前缀列表会比较繁琐。
地址前缀列表包括针对IPv4路由的IPv4地址前缀列表和针对IPv6路由的IPv6地址前缀列表,IPv6地址前缀列表与IPv4地址前缀列表的实现相同。地址前缀列表进行匹配的依据有两个:掩码长度和掩码范围。
地址前缀列表的过滤规则
一个地址前缀列表中可以创建多个索引项,每个索引对应一条过滤规则。如图1所示,待过滤路由按照索引号从小到大的顺序进行匹配:
- 当匹配上某一索引项时,如果该索引项是permit,则这条路由被允许通过;如果该索引项是deny,则这条路由被拒绝通过。
- 当遍历了地址前缀列表中的所有索引项,都没有匹配上,那么这条路由就被拒绝通过。
- 掩码长度:地址前缀列表匹配的对象是IP地址前缀,前缀由IP地址和掩码长度共同定义。例如,10.1.1.1/16这条路由,掩码长度是16,这个地址的有效前缀为16位,即10.1.0.0。
- 掩码范围:对于前缀相同,掩码不同的路由,可以指定待匹配的前缀掩码长度范围来实现精确匹配或者在一定掩码长度范围内匹配。
0.0.0.0为通配地址。当前缀为0.0.0.0时,可以在其后指定掩码以及掩码范围:
- 若指定掩码,则表示具有该掩码的所有路由都被允许通过(Permit)或拒绝通过(Deny)。
- 若指定掩码范围,则表示掩码长度范围内的所有路由都被允许通过或拒绝通过。
AS路径过滤器(AS_Path-Filter)
AS路径过滤器是一组针对BGP路由的AS_Path属性进行过滤的规则。在BGP的路由信息中,包含有AS_Path属性,AS_Path属性按矢量顺序记录了BGP路由从本地到目的地址所要经过的所有AS编号,因此基于AS_Path属性定义一些过滤规则,就可以实现对BGP路由信息的过滤。AS路径过滤器的匹配条件使用正则表达式指定,如^30表示只匹配第一个值是30的AS路径属性。
AS_Path Filter介绍
AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。
某条BGP路由的AS_Path属性实际上可以看作是一个包含空格的字符串,所以可以通过正则表达式来进行匹配。
正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。BGP的AS_Path过滤器主要是定义AS_Path正则表达式,然后去匹配BGP路由的AS_Path属性信息,从而实现对BGP路由信息的过滤。
例如ip as-path-filter 1 permit 495就定义了一个AS_Path过滤器1,使用的正则表达式是495,这个表达式的含义是匹配任何包含495的字符串。
AS_Path正则表达式的组成
AS_Path过滤器的核心内容就是正则表达式。关于正则表达式的内容较为复杂,这里仅讨论一些跟AS_Path过滤器相关的内容。
AS_Path过滤器使用正则表达式来定义匹配规则。正则表达式由元字符和数值两部分组成:
-
元字符定义了匹配的规则
-
数值定义了匹配的对象
元字符 | 含义 | 示例 |
---|---|---|
. | 匹配除“\n”之外任何单个字符,包括空格。 | .*表示匹配任意字符串,即AS_Path为任意,可以用来匹配所有路由。 说明:通常定义了多个deny模式的ip as-path-filter子句之后,会定义一个ip as-path-filter as-path-filter-name permit .*子句,用于允许其他路由通过。 |
* | 之前的字符在目标对象中出现0次或连续多次。 | 参考上例。 |
+ | 之前的字符在目标对象中出现1次或连续多次。 | 65+表示6在AS_Path的首位,而5在AS_Path中出现一次或多次,那么:
|
| | 竖线左边和右边的字符为“或”的关系。 | 100|65002|65003表示匹配100、65002或65003。 |
^ | 之后的字符串必须出现在目标对象的开始。 | ^65表示匹配以65开头的字符串,那么:
|
$ | 之前的字符串必须出现在目标对象的结束。 | 65$表示匹配以65结尾的字符串,那么:
^$表示匹配空字符串,即AS_Path为空,通常用来匹配本地始发路由。 |
(xyz) | 一对圆括号内的正则表达式作为一个子正则表达式,匹配子表达式并获取这一匹配。圆括号内也可以为空。 | 100(200)+可以匹配100200、100200200、…… |
[xyz] | 匹配方括号内列出的任意字符。 | [896]表示匹配含有8、9或6中任意一个字符。 |
[^xyz] | 匹配除了方括号内列出的字符外的任意字符(^号在字符前)。 | [^896]表示匹配含有8、9或6这几个字符之外的任意一个字符。 |
[a-z] | 匹配指定范围内的任意字符。 | [2-4]表示匹配2,3,4;[0-9]表示匹配数字0~9。说明: 方括号内“[]”只能填写数字0到9。例如,如果需要匹配735~907,则需要写成(73[5-9]|7[4-9][0-9]|8[0-9][0-9]|90[0-7])。 |
[^a-z] | 匹配不在指定范围内的任意字符。 | [^2-4]表示匹配除2,3,4外的其他字符;[^0-9]表示匹配除数字0~9外的其他字符。 |
_ | 匹配一个符号,包括逗号、左大括号、右大括号、左括号、右括号和空格,在表达式的开头或结尾时还可作起始符、结束符(同^ ,$)。 |
|
\ | 转义字符。 | AS_Confed_Sequence是用“(” 、“)”表示的,“(” 、“)”在正则表达式中是特殊字符,有特殊用处,所以对于这种特殊字符,可以使用“\”来去除其特殊意义进行匹配。例如:
同理,AS_Confed_Set使用的“[”、“]”,AS_Set使用的“{”、“}”也都可以使用“\”符号来去除这些特殊符号的特殊意义。 |
团体属性过滤器(Community-Filter)
团体属性过滤器是一组针对BGP路由的团体属性进行过滤的规则。在BGP的路由信息中,携带有团体属性(Community),团体属性是一组有相同特征的目的地址的集合,因此基于团体属性定义一些过滤规则,就可以实现对BGP路由信息的过滤。
除了使用公认的团体属性外,用户还可以自行定义数字型的团体属性。团体属性过滤器的匹配条件可以使用团体号或者正则表达式。
Community属性介绍
团体属性是一组有相同特征的目的地址的集合。团体属性用来简化路由策略的应用和降低维护管理的难度,利用团体可以使多个AS中的一组BGP设备共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。
团体属性名称 | 说明 |
---|---|
internet | 缺省情况下,所有的路由都属于internet团体。具有此属性的路由可以被通告给所有的BGP对等体。 |
no-advertise | 具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体。 |
no-export | 具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。 |
no-export-subconfed | 具有此属性的路由在收到后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。 |
命令 | 功能 |
---|---|
apply community 100 | 团体名更改为100。 |
apply community 100 150 | 团体名更改为100或150,即BGP路由属于两个团体。 |
apply community 100 150 additive | 在原来基础上追加100和150两个团体属性。即BGP路由属于三个团体。 |
apply community none | 删除BGP路由的团体属性。 |
ip community-filter 1 permit 100:999 //允许包含团体属性100:999的路由
route-policy huawei permit node 10 //通过路由策略调用团体属性过滤器
if-match community-filter 1
扩展团体属性过滤器(Extcommunity-Filter)
扩展团体属性过滤器是一组针对BGP的扩展团体属性进行过滤的规则。BGP的扩展团体属性常用的有两种。
-
VPN-Target扩展团体属性:VPN Target属性主要用来控制VPN实例之间的路由学习,实现不同VPN实例之间的隔离。VPN Target属性分为出方向和入方向,PE在发布VPNv4(Virtual Private Network version 4)或VPNv6(Virtual Private Network version 6)路由到远端的MP-BGP(Multi-protocol Extensions for Border Gateway Protocol)对等体时,会携带出方向VPN Target属性。远端MP-BGP对等体收到VPNv4或VPNv6路由后,会根据本地VPN实例的入方向VPN Target属性是否与路由所携带的VPN Target匹配,来决定哪些路由能被复制到本地VPN实例的路由表中。
-
SoO(Site-of-Origin)扩展团体属性:VPN某站点(Site)有多个CE接入不同的PE时,从CE发往PE的路由可能经过VPN骨干网又回到了该站点,这样很可能会引起VPN站点内路由循环。此时,针对VPN站点配置SoO属性可以区分来自不同VPN站点的路由,避免路由循环。
RD属性过滤器(Route Distinguisher-Filter)
RD属性过滤器是一组针对VPN路由的RD属性进行过滤的规则。VPN实例通过路由标识符RD(Route Distinguisher)实现地址空间独立,区分使用相同地址空间的IPv4和IPv6前缀。RD属性过滤器针对不同RD指定匹配条件。
Route-Policy
Route-Policy是一种比较复杂的过滤器,它不仅可以匹配给定路由信息的某些属性,还可以在条件满足时改变路由信息的属性。Route-Policy可以使用前面6种过滤器定义自己的匹配规则。
Route-Policy的组成
Route-Policy是一种比较复杂的过滤器,它不仅可以匹配给定路由信息的某些属性,还可以在条件满足时改变路由信息的属性。
如图1所示,Route-Policy由节点号、匹配模式、if-match子句(条件语句)和apply子句(执行语句)这四个部分组成。
默认所有未匹配的路由将被拒绝通过Route-Policy。如果Route-Policy中定义了一个以上的节点,应保证各节点中至少有一个节点的匹配模式是permit。因为Route-Policy用于路由信息过滤时:
- 如果某路由信息没有通过任一节点,则认为该路由信息没有通过该Route-Policy。
- 如果Route-Policy的所有节点都是deny模式,则没有路由信息能通过该Route-Policy。