06-路由策略配置
本章节下载: 06-路由策略配置 (246.55 KB)
目 录
本章所介绍的路由策略包括IPv4路由策略和IPv6路由策略,二者的配置基本一致,不同的部分在各节中另行说明。
路由策略(Routing Policy)是为了改变网络流量所经过的途径而修改路由信息的技术,主要通过改变路由属性(包括可达性)来实现。
路由策略的应用灵活广泛,主要有下面几种方式:
· 控制路由的发布
路由协议在发布路由信息时,通过路由策略对路由信息进行过滤,只发布满足条件的路由信息。
· 控制路由的接收
路由协议在接收路由信息时,通过路由策略对路由信息进行过滤,只接收满足条件的路由信息,可以控制路由表项的数量,提高网络的安全性。
· 管理引入的路由
路由协议在引入其它路由协议发现的路由时,通过路由策略只引入满足条件的路由信息,并控制所引入的路由信息的某些属性,以使其满足本协议的要求。
· 设置路由的属性
对通过路由策略的路由设置相应的属性。
路由策略的实现步骤如下:
(1) 首先要定义将要实施路由策略的路由信息的特征,即定义一组匹配规则。可以用路由信息中的不同属性作为匹配依据进行设置,如目的地址、发布路由信息的路由器地址等。
(2) 然后再将匹配规则应用于路由的发布、接收和引入等过程的路由策略中。
可以灵活使用过滤器来定义各种匹配规则,过滤器的相关内容见下一节介绍。
过滤器可以看作是路由策略过滤路由的工具,单独配置的过滤器没有任何过滤效果,只有在路由协议的相关命令中应用这些过滤器,才能够达到预期的过滤效果。
路由协议可以引用访问控制列表、地址前缀列表、AS路径访问列表、团体属性列表、扩展团体属性列表、路由策略几种过滤器。下面对各种过滤器逐一进行介绍。
访问控制列表包括针对IPv4报文的ACL和针对IPv6报文的ACL。用户在定义ACL时可以指定IP(v6)地址和子网范围,用于匹配路由信息的目的网段地址或下一跳地址。
ACL的相关内容请参见“ACL和QoS配置指导”中的“ACL”。
地址前缀列表包括IPv4地址前缀列表和IPv6地址前缀列表。
地址前缀列表的作用类似于ACL,但比它更为灵活,且更易于用户理解。使用地址前缀列表过滤路由信息时,其匹配对象为路由信息的目的地址信息域;另外,用户可以指定gateway选项,指明只接收某些路由器发布的路由信息。关于gateway选项的设置请参见“三层技术-IP路由命令参考”中的“RIP”。
一个地址前缀列表由前缀列表名标识。每个前缀列表可以包含多个表项,每个表项可以独立指定一个网络前缀形式的匹配范围,并用一个索引号来标识,索引号指明了在地址前缀列表中进行匹配检查的顺序。
每个表项之间是“或”的关系,在匹配的过程中,路由器按升序依次检查由索引号标识的各个表项,只要有某一表项满足条件,就意味着通过该地址前缀列表的过滤(不再进入下一个表项的测试)。
路由策略是一种比较复杂的过滤器,它不仅可以匹配路由信息的某些属性,还可以在条件满足时改变路由信息的属性。路由策略可以使用前面几种过滤器定义自己的匹配规则。
一个路由策略可以由多个节点(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节点,用于允许其它的路由通过。
在配置过滤列表之前,需要准备以下数据:
· 前缀列表名称
· 匹配的地址范围
· 扩展团体属性列表序号
IPv4地址前缀列表由列表名标识,每个前缀列表可以包含多个表项。各表项以网络前缀的形式,独立指定一个匹配范围,并使用索引号标识。
在匹配过程中,系统按索引号升序依次检查各个表项,只要路由信息满足一个表项,就认为通过该过滤列表,不再去匹配其他表项。
表1-1 配置IPv4地址前缀列表
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置IPv4地址前缀列表 |
ip ip-prefix ip-prefix-name [ index index-number ] { deny | permit } ip-address mask-length [ greater-equal min-mask-length ] [ less-equal max-mask-length ] |
必选 缺省情况下,没有配置IPv4地址前缀列表 |
如果所有表项都是deny模式,则任何路由都不能通过该过滤列表。这种情况下,建议在多条deny模式的表项后定义一条permit 0.0.0.0 0 less-equal 32表项,允许其它所有IPv4路由信息通过。
例如,按如下配置可以保证仅过滤掉10.1.0.0/16、10.2.0.0/16、10.3.0.0/16三个网段的路由,而其它网段的路由信息可以通过。
<Sysname> system-view
[Sysname] ip ip-prefix abc index 10 deny 10.1.0.0 16
[Sysname] ip ip-prefix abc index 20 deny 10.2.0.0 16
[Sysname] ip ip-prefix abc index 30 deny 10.3.0.0 16
[Sysname] ip ip-prefix abc index 40 permit 0.0.0.0 0 less-equal 32
IPv6地址前缀列表由列表名标识,每个前缀列表可以包含多个表项。各表项可以独立指定一个网络前缀形式的匹配范围,并使用索引号标识。
在匹配的过程中,系统按索引号升序依次检查各个表项,只要路由信息满足一个表项,就认为通过该过滤列表,不再去匹配其他表项。
表1-2 配置IPv6地址前缀列表
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置IPv6地址前缀列表 |
ip ipv6-prefix ipv6-prefix-name [ index index-number ] { deny | permit } ipv6-address prefix-length [ greater-equal min-prefix-length ] [ less-equal max-prefix-length ] |
必选 缺省情况下,没有配置IPv6地址前缀列表 |
如果所有表项都是deny模式,则任何路由都不能通过该过滤列表。这种情况下,需要在多条deny模式的表项后定义一条permit :: 0 less-equal 128的表项,以允许其它所有IPv6路由信息通过。
例如,按如下配置可以保证仅过滤掉2000:1::/48、2000:2::/48、2000:3::/48三个网段的路由,而其它网段的路由信息可以通过。
<Sysname> system-view
[Sysname] ip ipv6-prefix abc index 10 deny 2000:1:: 48
[Sysname] ip ipv6-prefix abc index 20 deny 2000:2:: 48
[Sysname] ip ipv6-prefix abc index 30 deny 2000:3:: 48
[Sysname] ip ipv6-prefix abc index 40 permit :: 0 less-equal 128
一个AS过滤列表可以包含多个表项。在匹配过程中,各表项之间是“或”的关系,即只要路由信息通过该列表中的一条表项,就认为通过该AS路径过滤列表。
表1-3 配置AS路径过滤列表
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置AS路径过滤列表 |
ip as-path as-path-number { deny | permit } regular-expression |
必选 缺省情况下,没有配置AS路径过滤列表 |
路由策略用来根据路由信息的某些属性过滤路由信息,并改变与路由策略规则匹配的路由信息的属性。匹配条件可以使用前面几种过滤列表。
一个路由策略可由多个节点构成,每个节点又分为:
· if-match子句:定义匹配规则,即路由信息通过当前路由策略所需满足的条件,匹配对象是路由信息的某些属性。
· apply子句:指定动作,也就是在满足由if-match子句指定的过滤条件后所执行的一些配置命令,对路由的某些属性进行修改。
· continue子句:用来配置下一个执行节点,当路由成功匹配当前路由策略节点时,可以指定路由继续匹配同一路由策略内的下一个节点。
在配置路由策略之前,需完成以下任务:
· 配置过滤列表
· 配置路由协议
在配置之前,需要准备以下数据:
· 路由策略的名称、节点序号
· 匹配条件
· 要修改的路由属性值
表1-4 创建一个路由策略
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建路由策略并进入该路由策略视图 |
route-policy route-policy-name { deny | permit } node node-number |
必选 缺省情况下,没有创建路由策略 |
· permit指定节点的匹配模式为允许模式。当路由信息通过该节点的过滤后,将执行该节点的apply子句,不进入下一个节点的测试;如果路由信息没有通过该节点过滤,将进入下一个节点继续测试。
· deny指定节点的匹配模式为拒绝模式(此模式下apply子句不会被执行)。当路由项满足该节点的所有if-match子句时,将被拒绝通过该节点,不进入下一个节点的测试;如果路由项不满足该节点的if-match子句,将进入下一个节点继续测试。
· 如果路由策略中定义了一个以上的节点,则各节点中至少应该有一个节点的匹配模式是permit。当路由策略用于路由信息过滤时,如果某路由信息没有通过任一节点,则认为该路由信息没有通过该路由策略。如果路由策略的所有节点都是deny模式,则没有路由信息能通过该路由策略。
表1-5 配置if-match子句
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
进入路由策略视图 |
route-policy route-policy-name { deny | permit } node node-number |
必选 |
|
配置IPv4的路由信息的匹配条件 |
配置IPv4路由信息的目的地址范围的匹配条件 |
if-match acl acl-number |
可选 缺省情况下,没有配置IPv4路由信息的目的地址范围的匹配条件 |
if-match ip-prefix ip-prefix-name |
|||
配置IPv4的路由信息的下一跳地址或源地址的匹配条件 |
if-match ip { next-hop | route-source } { acl acl-number | ip-prefix ip-prefix-name } |
可选 缺省情况下,没有配置IPv4的路由信息的下一跳地址或源地址的匹配条件 |
|
配置IPv6的路由信息的匹配条件 |
if-match ipv6 { address | next-hop | route-source } { acl acl-number | prefix-list ipv6-prefix-name } |
可选 缺省情况下,没有配置IPv6的路由信息的匹配条件 |
|
配置路由信息的路由开销的匹配条件 |
if-match cost value |
可选 缺省情况下,没有配置路由信息的路由开销的匹配条件 |
|
配置路由信息的出接口的匹配条件 |
if-match interface { interface-type interface-number }&<1-16> |
可选 缺省情况下,没有配置路由信息的出接口的匹配条件 |
|
配置RIP路由信息的标记域的匹配条件 |
if-match tag value |
可选 缺省情况下,没有配置RIP路由信息的标记域的匹配条件 |
· 对于同一个节点,在匹配的过程中,不同if-match子句间是“与”的关系,即路由信息必须同时满足所有匹配条件,才可以执行apply子句。如果有if-match子句因超过命令行最大长度而出现多条相同的if-match子句时,这几条子句之间是“或”的关系,即满足一个匹配条件,就认为匹配该if-match语句。
· 在一个节点中,可以没有if-match子句,也可以有多个if-match子句。当不指定if-match子句时,如果该节点的匹配模式为允许模式,则所有路由信息都会通过该节点的过滤;如果该节点的匹配模式为拒绝模式,则所有路由信息都会被拒绝。
· 如果if-match子句对应的ACL不存在,则默认满足该匹配条件;如果if-match子句对应的ACL中没有匹配的ACL规则或者ACL规则处于非激活状态,则默认不满足该匹配条件。
· 路由策略应使用非VPN的ACL进行路由过滤。
· IPv4路由策略和IPv6路由策略在配置if-match子句时,不同之处在于匹配路由信息的目的地址、下一跳和源地址的命令不同。
表1-6 配置apply子句
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
创建路由策略并进入该路由策略视图 |
route-policy route-policy-name { deny | permit } node node-number |
必选 缺省情况下,不创建路由策略 |
|
配置路由信息的路由开销 |
apply cost [ + | - ] value |
可选 缺省情况下,没有配置路由信息的路由开销 |
|
配置路由信息的下一跳地址 |
配置IPv4路由信息的下一跳地址 |
apply ip-address next-hop ip-address |
可选 缺省情况下,没有配置IPv4路由信息的下一跳地址 |
配置IPv6路由信息的下一跳地址 |
apply ipv6 next-hop ipv6-address |
可选 缺省情况下,没有配置IPv6路由信息的下一跳地址 |
|
配置路由协议的优先级 |
apply preference preference |
可选 缺省情况下,没有配置路由协议的优先级 |
|
配置RIP路由信息的标记域 |
apply tag value |
可选 缺省情况下,没有配置RIP路由信息的标记域 |
|
配置快速重路由 |
apply fast-reroute { backup-interface interface-type interface-number [ backup-nexthop ip-address ] } |
可选 缺省情况下,没有配置快速重路由 |
· IPv4路由策略和IPv6路由策略在配置apply子句时,不同之处在于设置路由信息的下一跳地址的命令不同。
· 对于引入的IPv4路由,使用apply ip-address next-hop命令设置下一跳地址无效;对于引入的IPv6路由,使用apply ipv6 next-hop命令设置下一跳地址无效。
表1-7 配置continue子句
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建路由策略并进入该路由策略视图 |
route-policy route-policy-name { deny | permit } node node-number |
必选 缺省情况下,不创建路由策略 |
配置下一个执行节点 |
可选 缺省情况下,没有配置下一个执行节点 需要注意的是,下一个执行节点序列号必须大于当前节点序列号 |
· 当配置continue子句的多个节点配置相同的apply子句只是子句的值不相同时,以最后一个apply子句为准,包括有叠加属性的apply子句,当多个节点都配置了这样的子句,属性不会全部叠加到路由上,而是以最后一个子句为准。
· 当配置continue子句的多个节点配置apply community子句时,使用命令行apply comm-list delete不能删除前面节点中配置的团体属性。
在完成上述配置后,在任意视图下执行display命令可以显示配置后路由策略的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除路由策略的统计信息。
操作 |
命令 |
显示IPv4地址前缀列表的统计信息 |
display ip ip-prefix [ ip-prefix-name ] [ | { begin | exclude | include } regular-expression ] |
显示IPv6地址前缀列表的统计信息 |
display ip ipv6-prefix [ ipv6-prefix-name ] [ | { begin | exclude | include } regular-expression ] |
显示路由策略信息 |
display route-policy [ route-policy-name ] [ | { begin | exclude | include } regular-expression ] |
清除IPv4地址前缀列表的统计信息 |
reset ip ip-prefix [ ip-prefix-name ] |
清除IPv6地址前缀列表的统计信息 |
reset ip ipv6-prefix [ ipv6-prefix-name ] |
如下图所示,Switch A和Switch B通过RIP-2实现网络层互通。Switch A上存在着到达20.0.0.0/8、30.0.0.0/8、40.0.0.0/8网段的静态路由,Switch B希望通过Switch A访问这些网络,但是Swtich A只允许Switch B访问20.0.0.0/8、40.0.0.0/8网络,禁止访问30.0.0.0/8网络。
图1-1 在IPv4路由引入中应用路由策略组网图
(1) 配置Switch A
# 配置各接口的IP地址(略)
# 配置RIP基本功能
<SwitchA> system-view
[SwitchA] rip
[SwitchA-rip-1] version 2
[SwitchA-rip-1] undo summary
[SwitchA-rip-1] network 192.168.1.0
[SwitchA-rip-1] quit
# 配置三条静态路由
[SwitchA] ip route-static 20.0.0.0 255.0.0.0 172.17.1.2
[SwitchA] ip route-static 30.0.0.0 255.0.0.0 172.17.1.2
[SwitchA] ip route-static 40.0.0.0 255.0.0.0 172.17.1.2
# 配置访问列表
[SwitchA] acl number 2000
[SwitchA-acl-basic-2000] rule deny source 30.0.0.0 0.255.255.255
[SwitchA-acl-basic-2000] rule permit source any
[SwitchA-acl-basic-2000] quit
# 引入静态路由
[SwitchA] rip
[SwitchA-rip-1] import-route static
# 对发布给Switch B的路由信息引用ACL 2000进行过滤,只有通过过滤的路由信息才发布给Switch B
[SwitchA-rip-1] filter-policy 2000 export vlan-interface 100
[SwitchA-rip-1] quit
(2) 配置Switch B
# 配置各接口的IP地址(略)
# 配置RIP基本功能
<SwitchB> system-view
[SwitchB] rip
[SwitchB-rip-1] version 2
[SwitchB-rip-1] undo summary
[SwitchB-rip-1] network 192.168.1.0
[SwitchB-rip-1] network 10.0.0.0
[SwitchB-rip-1] quit
(3) 查看Switch B的rip路由表,验证结果
[SwitchB] display rip 1 route
Route Flags: R - RIP, T - TRIP
P - Permanent, A - Aging, S - Suppressed, G - Garbage-collect ----------------------------------------------------------------------
Peer 192.168.1.3 on Vlan-interface100
Destination/Mask Nexthop Cost Tag Flags Sec
20.0.0.0/8 192.168.1.3 1 0 RA 14
40.0.0.0/8 192.168.1.3 1 0 RA 14
结果显示,上面的配置方法可以实现配置要求,Switch B只接收到了通过ACL 2000过滤后的路由信息。
· 在Switch A和Switch B上使能RIPng。
· 在Switch A上配置三条静态路由,并设置在引入静态路由时应用路由策略,使三条静态路由部分引入、部分被屏蔽掉——20::/32和40::/32网段的路由是可见的,30::/32网段的路由则被屏蔽。
· 通过在Switch B上查看RIPng路由表,验证路由策略是否生效。
图1-2 在IPv6路由引入中应用路由策略组网图
(1) 配置Switch A
# 配置接口Vlan-interface100和Vlan-interface200的IPv6地址。
<SwitchA> system-view
[SwitchA] ipv6
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ipv6 address 10::1 32
[SwitchA-Vlan-interface100] quit
[SwitchA] interface vlan-interface 200
[SwitchA-Vlan-interface200] ipv6 address 11::1 32
[SwitchA-Vlan-interface200] quit
# 在接口下使能RIPng。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ripng 1 enable
[SwitchA-Vlan-interface100] quit
# 配置三条静态路由,其下一跳为11::2,保证静态路由为active状态。
[SwitchA] ipv6 route-static 20:: 32 11::2
[SwitchA] ipv6 route-static 30:: 32 11::2
[SwitchA] ipv6 route-static 40:: 32 11::2
# 配置路由策略。
[SwitchA] ip ipv6-prefix a index 10 permit 30:: 32
[SwitchA] route-policy static2ripng deny node 0
[SwitchA-route-policy] if-match ipv6 address prefix-list a
[SwitchA-route-policy] quit
[SwitchA] route-policy static2ripng permit node 10
[SwitchA-route-policy] quit
# 启动RIPng协议并引入静态路由。
[SwitchA] ripng
[SwitchA-ripng-1] import-route static route-policy static2ripng
(2) 配置Switch B
# 配置接口Vlan-interface100的IPv6地址。
[SwitchB] ipv6
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ipv6 address 10::2 32
# 在接口下使能RIPng。
[SwitchB-Vlan-interface100] ripng 1 enable
[SwitchB-Vlan-interface100] quit
# 启动RIPng协议。
[SwitchB] ripng
# 查看RIPng路由表。
[SwitchB-ripng-1] display ripng 1 route
Route Flags: A - Aging, S - Suppressed, G - Garbage-collect
----------------------------------------------------------------
Peer FE80::7D58:0:CA03:1 on Vlan-interface 100
Dest 10::/32,
via FE80::7D58:0:CA03:1, cost 1, tag 0, A, 18 Sec
Dest 20::/32,
via FE80::7D58:0:CA03:1, cost 1, tag 0, A, 8 Sec
Dest 40::/32,
via FE80::7D58:0:CA03:1, cost 1, tag 0, A, 3 Sec
路由协议运行正常的情况下无法实现路由信息过滤。
地址前缀列表的各个表项中至少应该有一个表项的匹配模式是permit模式。Route-policy的各个节点中至少应该有一个节点的匹配模式是permit模式。
(1) 使用display ip ip-prefix命令查看前缀列表的配置。
(2) 使用display route-policy命令查看路由策略的配置。
路由协议运行正常的情况下无法实现路由信息过滤。
地址前缀列表的各个表项中至少应该有一个表项的匹配模式是permit模式。Route-policy的各个节点中至少应该有一个节点的匹配模式是permit模式。
(1) 使用display ip ipv6-prefix命令查看前缀列表的配置。
(2) 使用display route-policy命令查看路由策略的配置。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!