交换机江湖故事之路由策略地址前缀列表

2018-07-09

交换机江湖故事之路由策略地址前缀列表



想对接收的路由/发布的路由/引入的路由进行过滤,或者设置相关的路由属性?第一步当然要先筛选出想要的路由,通过ACL或者地址前缀列表(ip ip-prefix)都可以实现。在上一期route-policy的介绍中我们就是采用ACL来筛选路由的,ACL大家平时接触的也比较多,但地址前缀列表是什么、怎么用?地址前缀列表和ACL有什么区别?这一期的路由策略专题我们将会详细介绍这些内容。

1

地址前缀列表与ACL的区别

让我们先来看两个具体的例子。

示例1-通过ACL对引入的路由进行过滤

如图1所示,通过ACL实现将RIP中的2条路由引入到OSPF中,并设置路由的开销值。

交换机江湖故事之路由策略地址前缀列表

图1
通过ACL对引入的路由进行过滤

查看SwitchB上的路由表,有2条RIP路由192.168.2.0/24和192.168.3.0/24,想将这2条路由重发布到OSPF中,并将192.168.2.0/24这条路由的开销值设置为10,192.168.3.0/24这条路由的开销值设置为20。

[SwitchB] display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 8
Routes : 8
Destination/Mask

Proto
Pre
Cost
Flags NextHop
Interface

10.1.1.0/24

Direct
0
0
D
10.1.1.1
Vlanif20







10.1.1.1/32
Direct
0
0
D
127.0.0.1
Vlanif20

127.0.0.0/8
direct
0
0
D
127.0.0.1
InLoopBack0

127.0.0.1/32
Direct
0
0
D
127.0.0.1
InLoopBack0

192.168.1.0/24
Direct
0
0
D
192.168.1.2
Vlanif10

192.168.1.2/32
Direct
0
0
D
127.0.0.1
Vlanif10

192.168.2.0/24
RIP
100
1
D
192.168.1.1
Vlanif10

192.168.3.0/24
RIP
100
1
D
192.168.1.1
Vlanif10

1.
配置ACL,过滤出想要的路由

#
配置基本ACL 2001,匹配路由网络号192.168.2.0。

[SwitchB] acl 2001

[SwitchB-acl-basic-2001] rule permit source 192.168.2.0 0

[SwitchB-acl-basic-2001] quit

#
配置基本ACL 2002,匹配路由网络号192.168.3.0。

[SwitchB] acl 2002

[SwitchB-acl-basic-2002] rule permit source 192.168.3.0 0

[SwitchB-acl-basic-2002] quit

2.
配置route-policy,并对引入的路由应用route-policy

#
配置route-policy RP的节点10,如果匹配基本ACL 2001,则设置路由开销值为10。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match acl 2001

[SwitchB-route-policy] apply cost 10

[SwitchB-route-policy] quit

#
配置route-policy RP的节点20,如果匹配基本ACL 2002,则设置路由开销值为20。

[SwitchB] route-policy RP permit node 20

[SwitchB-route-policy] if-match acl 2002

[SwitchB-route-policy] apply cost 20

[SwitchB-route-policy] quit

#
配置在OSPF路由中引入通过route-policy RP过滤的RIP路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route rip 1 route-policy RP

[SwitchB-ospf-1] quit

配置完成后,在SwitchC上查看路由表,发现已经成功引入了2条RIP路由,并且路由开销值已进行了相应的设置。

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 6
Routes : 6
Dstination/Mask

roto
Pre
Cost
Flags NextHop
Interface

10.1.1.0/24

Direct
0
0
D
10.1.1.2
Vlanif20

10.1.1.2/32
Direct
0
0
D

127.0.0.1





Vlanif20






127.0.0.0/8

Direct
0


0
D
127.0.0.1
InLoopBack0

127.0.0.1/32
Direct
0
0
D
127.0.0.1
InLoopBack0

192.168.2.0/24
O_ASE
150
10
D
10.1.1.1
Vlanif20

192.168.3.0/24
O_ASE
150
20
D
10.1.1.1
Vlanif20

示例2-通过地址前缀列表对引入的路由进行过滤

如图2所示,SwitchB上有2条静态路由,如果只想将192.168.0.0/16这1条路由引入OSPF中,该怎么配置呢?

交换机江湖故事之路由策略地址前缀列表

图2
通过地址前缀列表对引入的路由进行过滤

查看SwitchB上的路由表,有2条静态路由192.168.0.0/16和192.168.0.0/24,只想将192.168.0.0/16这1条路由重发布到OSPF中。


[SwitchB] display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public
Destinations : 6
Routes : 6
Destination/Mask

Proto
Pre
Cost
Flags NextHop
Interface

10.10.12.0/24

Direct
0
0
D
10.10.12.1
Vlanif10

10.10.12.1/32
Direct
0
0
D
127.0.0.1
Vlanif10

127.0.0.0/8
Direct
0
0
D
127.0.0.1
InLoopBack0

127.0.0.1/32
Direct
0
0
D
127.0.0.1
InLoopBack0

192.168.0.0/16
Static
60
0
D
0.0.0.0
NULL0

192.168.0.0/24
Static
60
0
D
0.0.0.0
NULL0

首先我们尝试用ACL来实现。

1.
配置基本ACL 2001

[SwitchB] acl 2001

[SwitchB-acl-basic-2001] rule permit source 192.168.0.0 0.0.255.255

[SwitchB-acl-basic-2001] quit

2.
配置route-policy,并对引入的路由应用route-policy

#
配置route-policy RP的节点10,如果匹配基本ACL 2001,则允许通过。其他所有未匹配成功的路由都被拒绝通过。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match acl 2001

[SwitchB-route-policy] quit

#
配置在OSPF路由中引入通过route-policy RP过滤的静态路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route static route-policy RP

[SwitchB-ospf-1] quit

配置完成后,在SwitchC上查看路由表,发现有2条192.168.0.0网段的路由,2条路由都被引入了。这是由于ACL2001规则rule permit source 192.168.0.0 0.0.255.255中,0.0.255.255实际上是通配符,而不是掩码长度。

所谓通配符,就是指换算成二进制后,“0”表示需要匹配,“1”表示不需要匹配。例如192.168.0.0 0.0.255.255表示匹配网络号192.168.0.0~192.168.255.255,192.168.0.0/16和192.168.0.0/24都能匹配成功ACL2001,因此这2条路由匹配了route-policy RP的节点10,都被引入了。ACL无法实现只匹配192.168.0.0/16或者只匹配192.168.0.0/24,ACL只能匹配网络号,无法匹配掩码。

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 6
Routes : 6
Destination/Mask

Proto
Pre
Cost
Flags NextHop
Interface

10.10.12.0/24

Direct
0
0
D
10.10.12.2
Vlanif10

10.10.12.2/32
Direct
0
0
D
127.0.0.1
Vanif10

127.0.0.0/8

Direct
0
0
D
127.0.0.1
InLoopBack0

127.0.0.1/32
Direct
0
0
D
127.0.0.1
InLoopBack0

192.168.0.0/16
O_ASE
150
1
D

10.10.12.1
Vlanif10

192.168.0.0/24
O_ASE
150
1
D
10.10.12.1
Vlanif10

接下来,我们试试看用地址前缀列表对引入的路由进行过滤,看是否能实现引入192.168.0.0/16这1条路由,过滤掉192.168.0.0/24。

1.
配置地址前缀列表,过滤出想要的路由

#
地址前缀列表为huawei,节点号10,允许192.168.0.0/16的路由通过。

[SwitchB] ip ip-prefix huawei index 10 permit 192.168.0.0 16

2.
配置route-policy,并对引入的路由应用route-policy

#
配置route-policy RP的节点10,如果匹配地址前缀列表huawei,则允许通过;其他所有未匹配上的路由都将默认拒绝。

[SwitchB] route-policy RP permit node 10

[SwitchB-route-policy] if-match ip-prefix huawei

[SwitchB-route-policy] quit

#
配置在OSPF路由中引入通过route-policy RP过滤的静态路由。

[SwitchB] OSPF

[SwitchB-ospf-1] import-route static route-policy RP

[SwitchB-ospf-1] quit

配置完成后,在SwitchC上查看路由表,成功实现了只引入192.168.0.0/16这1条路由。

<SwitchC> display ip routing-table

Route Flags: R - relay, D - download to fib

-----------------------------------------------------------------------------

Routing Tables: Public

Destinations : 5
Routes : 5
Destination/Mask

Proto
Pre
Cost
Flags NextHop
Interface

10.10.12.0/24

Direct
0
0
D
10.10.12.2
Vlanif10

10.10.12.2/32
Direct
0
0
D
127.0.0.1
Vlanif10

127.0.0.0/8
Direct
0
0
D
127.0.0.1
InLoopBack0

127.0.0.1/32
Direct
0
0
D
127.0.0.1
InLoopBack0

192.168.0.0/16
O_ASE
150
1
D
10.10.12.1
Vlanif10

交换机江湖故事之路由策略地址前缀列表总结一下上面的两个示例,ACL和地址前缀列表都可以对路由进行筛选,ACL匹配路由时只能匹配路由的网络号,但无法匹配掩码,也就是前缀长度;而地址前缀列表比ACL更为灵活,可以匹配路由的网络号及掩码,增强了路由匹配的精确度。

2地址前缀列表原理及应用

2.1地址前缀列表的过滤规则

一个地址前缀列表中可以创建多个索引项,每个索引对应一条过滤规则。如图3所示,待过滤路由按照索引号从小到大的顺序进行匹配:

²

当匹配上某一索引项时,如果该索引项是permit,则这条路由被允许通过;如果该索引项是deny,则这条路由被拒绝通过。

²

当遍历了地址前缀列表中的所有索引项,都没有匹配上,那么这条路由就被拒绝通过。

交换机江湖故事之路由策略地址前缀列表

图3
地址前缀列表原理

地址前缀列表过滤路由的原则可以总结为:顺序匹配、唯一匹配、默认拒绝。

顺序匹配:按索引号从小到大顺序进行匹配。同一个地址前缀列表中的多条表项设置不同的索引号,可能会有不同的过滤结果,实际配置时需要注意。

唯一匹配:待过滤路由只要与一个表项匹配,就不会再去尝试匹配其他表项。

默认拒绝:默认所有未与任何一个表项匹配的路由都视为未通过地址前缀列表的过滤。因此在一个地址前缀列表中创建了一个或多个deny模式的表项后,需要创建一个表项来允许所有其他路由通过。

2.2地址前缀列表中掩码的匹配

地址前缀列表与ACL相比的一大优势就是可以对路由的掩码进行匹配,在前面的示例中我们已经用到了精确匹配路由中的掩码。不仅如此,地址前缀列表还可以匹配一个掩码范围。

地址前缀列表通过ip ip-prefix命令进行配置,常用格式如下:

ip ip-prefix
ip-prefix-name
[
index
index-number
] {
permit
|
deny
}
ipv4-address mask-length
[
greater-equal
greater-equal-value
] [
less-equal
less-equal-value
]

其中ipv4-address mask-length
[
greater-equal
greater-equal-value
] [
less-equal
less-equal-value
]
用于限定过滤路由的网络号及掩码范围,参数含义如表1所示。


参数
含义
ipv4-address
用于指定网络号
mask-length
用于限定网络号的前多少位需严格匹配
greater-equal
greater-equal-value
可以理解为掩码≥greater-equal-value
less-equal
less-equal-value
可以理解为掩码≤less-equal-value


表1
地址前缀列表中地址范围的表示

当待过滤的路由已匹配当前表项的网络号时,掩码长度可以进行精确匹配或者在一定掩码长度范围内匹配。

Ø

若不配置greater-equal和less-equal,则进行精确匹配,即只匹配掩码长度为mask-length的路由。

Ø

若只配置greater-equal,则匹配的掩码长度范围为[greater-equal-value,32]。

Ø

若只配置less-equal,则匹配的掩码长度范围为[mask-length,less-equal-value]。

Ø

若同时配置greater-equal和less-equal,则匹配的掩码长度范围为[greater-equal-value,less-equal-value]。

2.3地址前缀列表匹配示例

好啦,学了这么多的理论,接下来让我们实际操练一下试试。假设有这么几条路由10.1.1.0/24、10.1.1.0/26、10.1.1.1/32、10.2.2.0/24和10.1.0.0/16,你们有没有办法用地址前缀列表筛选出想要的路由呢?

1.
只想permit某1条路由?例如只permit 10.1.1.0/24这1条路由。

2.
只想permit网络号相同,掩码不同的某几条路由,其他路由都deny?例如只permit 10.1.1.0/24、10.1.1.0/26、10.1.1.1/32这3条路由。

3.
只想deny某1条路由,其他路由都permit?例如只deny10.1.1.0/24这1条路由。

答案请在下面示例中找~

------------------------------------示例1为单节点精确匹配示例---------------------------------------------

ü

示例1:

ip ip-prefix test index 10 permit 10.1.1.0 24

匹配结果:只有路由10.1.1.0/24被permit,其他路由都被deny

说明:只有网络号、掩码完全相同的路由才会匹配成功。

------------------------------------示例2-4为指定掩码匹配范围示例---------------------------------------

ü

示例2:

ip ip-prefix test index 10 permit 10.1.1.0 24 less-equal 32

匹配结果:路由10.1.1.0/24、10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

说明:网络号为10.1.1.0,掩码长度在24-32之间的路由会被permit。

ü

示例3:

ip ip-prefix test index 10 permit 10.1.1.0 24 greater-equal 26

匹配结果:路由10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

说明:网络号为10.1.1.0,掩码长度在26-32之间的路由会被permit。

ü

示例4:

ip ip-prefix test index 10 permit 10.1.1.0 24 greater-equal 26 less-equal 32

匹配结果:路由10.1.1.0/26、10.1.1.1/32被permit,其他路由被deny。

说明:网络号为10.1.1.0,掩码长度在26-32之间的路由会被permit。此示例效果与示例3相同。

--------------------------------示例5-6为通配地址(0.0.0.0)匹配示例--------------------------------------

通配地址0.0.0.0表示不限定网络号,只需要匹配掩码范围即可。表2中列出了几种特殊的通配地址。


特殊的通配地址
含义
0.0.0.0 0
表示只匹配缺省路由
0.0.0.0 0 less-equal 32
表示匹配所有路由
0.0.0.0 0 greater-equal 32
表示匹配所有主机路由


表2
特殊的通配地址

说明:地址前缀列表采用默认拒绝的匹配原则,在创建了一个或多个deny模式的表项后,需要创建一个permit 0.0.0.0 0 less-equal 32表项,允许所有其他路由通过。

ü

示例5:

ip ip-prefix test index 10 permit 0.0.0.0 8 less-equal 32

匹配结果:5条路由均被permit。

说明:所有掩码长度在8-32之间的路由都被permit

ü

示例6:

ip ip-prefix test index 10 deny 10.1.1.0 24

ip ip-prefix test index 20 permit 0.0.0.0 0
less-equal 32

匹配结果:只有路由10.1.1.0/24被deny,其他路由都被permit。

说明:路由10.1.1.0/24匹配前缀列表test中索引10节点,但匹配模式是deny,因此结果是deny;索引20节点permit 0.0.0.0 0 less-equal 32表示允许所有路由通过,因此未匹配上索引节点10的路由都匹配上了索引20节点,均被permit。

叨叨了这么多,能看到这里的都是学霸哟,是不是已经信心满满,掌握了地址前缀列表啦!地址前缀列表(ip ip-prefix)能过滤出想要的路由,但是要实现对路由的控制,例如控制路由信息的接收、发布、引入等,还需要在filter-policy或者route-policy中调用地址前缀列表才能实现。下一期我们将介绍如何通过filter-policy实现路由过滤,敬请期待~


下一篇:这是最后一篇
上一篇:这是第一篇
zbr0JO5wF9 2slHFv1q6M