地址前缀列表与ACL有什么不同呢,你知道吗?

相信大家在工作当中ACL用得也是比较多吧,对ACL也有一定认识吧。那么,你们了解过地址前缀吗?它具体有啥作用?它与ACL有哪些不同呢?带着这些疑问,我们一起往下看吧?

地址前缀列表与ACL的区别

为了让看官们有直观的了解,先看两个具体的例子吧

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

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

在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。

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 
 
Destination/Mask Proto 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、通过地址前缀列表对引入的路由进行过滤

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

首先我们尝试用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只能匹配网络号,无法匹配掩码

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

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

[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更为灵活,可以匹配路由的网络号及掩码,增强了路由匹配的精确度。

地址前缀列表原理及应用

1、地址前缀列表的过滤规则

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

  1. 当匹配上某一索引项时,如果该索引项是permit,则这条路由被允许通过;如果该索引项是deny,则这条路由被拒绝通过。
  2. 当遍历了地址前缀列表中的所有索引项,都没有匹配上,那么这条路由就被拒绝通过。

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

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

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

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

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 用于指定网络号
  2. mask-length 用于限定网络号的前多少位需严格匹配
  3. greater-equal greater-equal-value 可以理解为掩码≥greater-equal-value
  4. less-equal less-equal-value 可以理解为掩码≤less-equal-value

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条路由。

ip ip-prefix test index 10 permit 10.1.1.0 24 

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

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

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

ip ip-prefix test index 10 permit 10.1.1.0 24 greater-equal 26
举报
评论 0