这是本个专题的第一篇正式文章,这里我们将阐述一下路由的抓取工具。

常用的路由抓取工具有两个分别是Access-List和Prefix-list。废话不多说,我们直接切入主题。



ACL

接触过网络的小伙伴一定对Access-list非常的熟悉了,更常见的实在接口之下调用,用于做数据层面的控制。但是ACL不仅仅局限在数据层面的控制上,还可以作为一个路由抓取的工具,下文中将简单介绍ACL在两种不同的情景之下的作用。

ACL有两种用途常见用途:

第一种是直接调用在接口上,可以调用在接口的In或者out方向从而影响到数据的通过性(Deny或Permit)。

第二种种是作为路由抓取的工具,与其他路由策略的工具(Distribute-list,Route-map,filter-list,offset-list搭配使用),等搭配使用。


第一种直接作用于数据层面,达到数据层面的进出控制。第二种作用于控制层面,影响发出的路由和路由携带的参数等信息,从而在控制层面上达到对路由控制的目的,从而进一步间接的影响到数据的转发。



举一个简单的例子帮助大家理解,假如你中了特等奖,有一亿的奖金。你将钱存在家里,为了防止被盗你可以采取两种方式。

方式1:雇佣保安,安装安防设备等等。

方式2:继续装穷,假装什么都没有发生。

方式1,大家已经知道了你很有钱,你采取了一些方式防止有不法企图的人进入而使用的方式。这种就像数据层面的ACL控制。

方式2,大家根本就不知道你很有钱,没有人惦记你的钱。这种就很像,数据层面的控制,也就是利用ACL和其他的路由控制工具一起协同达成的。



这里与在接口调用的ACL不同,我们抓取的不是一个网段的地址,而是抓取的一个路由条目。

例如:

想要抓取一个网段(4.4.4.0/24),在接口下调用的ACL是这么做的:

access-list 1 permit/deny 4.4.4.0 0.0.0.255

而作为路由抓取工具时是这样做的:

access-list 1 permit/deny 4.4.4.0 0.0.0.0


这里我们不再进行讨论接口调用的ACL,只讨论ACL作为路由抓取的工具


1.标准的ACL:标准ACL标准ACL只能匹配路由前缀,无法匹配路由的前缀长度,例如,如果想抓取192.168.1.0/24这条路由,用access-list 1 permit 192.168.1.0,则该条路由被匹配,但是同时,192.168.1.0/25、/26......也都被匹配了,因为ACL无法匹配掩码,或者说,前缀长度。再者,在使用标准ACL抓取路由的时候,建议不加反掩码,否则被匹配的路由条目范围将更大更不精确。


2.扩展的ACL:标准ACL有源部分、目的部分,使用源匹配路由前缀,使用目的部分匹配路由掩码。例如,要抓取192.168.1.0/24这条路由,则access-list 100 permit ip 192.168.1.0 0.0.0.0 255.255.255.0 0.0.0.0。所以其实很简单,只要把路由的前缀掩码部分,分别使用ACL的目的部分进行匹配即可。



Prefix-List

对于没有接触过路由策略的小伙伴Prefix-List可能比较陌生,这是由于前缀列表(Prefix-list)通常只有在路由策略中用作路由的抓取工具,它的功能和语法语义相对ACL而言更加强大并贴合自然语言习惯,而且可以实现精准抓取多个路由条目的功效。话不多说我们直接进入正题。


Prefix-list抓取流程和特性如下:

  • 可匹配路由前缀中的网络号及前缀长度,增强了匹配的精确度

  • 前缀列表的可控性比访问列表高得多,支持增量修改,更为灵活

  • 前缀列表包含序列号,从最小的开始匹配

  • 如果前缀不与前缀列表中的任何条目匹配,将被拒绝


基本语法如下

router(config)# ip prefix-list {list-name [seq number] {deny | permit} network/length[ge ge-value] [le le-value]

注意要满足一点length


配置实例如下:


实例1:

ip prefix-list ABC seq 5 permit 10.0.0.0/8

路由前8 bit必须与10.0.0.0匹配,且掩码必须为8位掩码

实例2:

ip prefix-list ABC seq 5 permit 10.0.0.0/8 le 24

实例3:

路由前8 bit必须与10.0.0.0匹配,且掩码是8-24位之间。这里表示

实例4:

ip prefix-list ABC seq 5 permit 10.0.0.0/8 ge 24

路由前8 bit必须与10.0.0.0匹配,且掩码是24-32位之间。注意这里没有写参数le,默认添加缺省le 32

实例5:

ip prefix-list ABC seq 5 permit 10.0.0.0/8 ge 21 le 24

路由前8 bit必须与10.0.0.0匹配,且掩码是21-24位之间

实例6:

ip prefix-list ABC seq 5 permit 0.0.0.0/0 le 32

路由前0 bit必须与0.0.0.0匹配,也就是说可以任意匹配,掩码为0-32位。这条也就是代表着permit any的含义。

注意:通acl一样,如果使用deny的方法过滤路由记得再最后加上这条,否则默认为deny any





实验:

我们结合一个例子,看一下具体的用法。

实验环境:

R2 R3运行BGP,R1 R2运行任何IGP协议,这里我用了OSPF。

spacer.gif路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第1张图片


spacer.gif

这里是R3收到的所有路由条目

路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第2张图片


从上面的路由表中看有一条汇总条目:

10.0.0.0/21

如果我们想要过滤掉这条汇总条目10.0.0.0/21但是要求保留10.0.0.0/24这条明细路由。注意这里我们运用了Distribute-List相关的讲解将在后续文档中给出,这里我们先看一下路由抓取。

假设使用ACL要怎么做?

1.如果采用标准的acl:

R2:

access-list 1 deny 10.0.0.0 0.0.0.0

access-list 1 permit any

router bgp 1

neighbor 23.23.23.3 distribute-list 1 out


如果这么做会出现什么问题呢,我们不仅过滤了10.0.0.0/21这个路由还过滤掉了10.0.0.0/24这条路由。因此,标准的ACL无法达到目的。输出最后如下图所示,我们看到不仅过滤了10.0.0.0/21还过滤了10.0.0.0/24

spacer.gif路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第3张图片

2.如果采用扩展的acl怎么做?

access-list 100 deny ip 10.0.0.0 0.0.0.0 255.255.248.0 0.0.0.0

access-list 100 permit ip any any

router bgp 1

neighbor 23.23.23.3 distribute-list 100 out

这么做可以达到目的

spacer.gif路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第4张图片


我们再将配置修改一下

spacer.gif在R1上把10.0.0.0/24拆分为10.0.0.0/25和10.0.0.128/25两个子网段,并且手动汇总这条路由。

路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第5张图片


需求改为,仅允许10.0.0.0-10.0.7.0这8条24位的路由条目,且不允许使用deny

这里如果使用扩展的acl怎么做?

access-list 100 permit ip 10.0.0.0 0.0.7.0 255.255.255.0 0.0.0.0

router bgp 1

neighbor 23.23.23.3 distribute-list 100 out

这里可以通过扩展的ACL获得所需输出。

spacer.gif路由策略专题(一)之路由抓取工具(Access-List和Prefix-List)_第6张图片






我们看一下如果想要实现上面的例子中的输出使用Prefix-List怎么做应该怎么做


过滤掉10.0.0.0/21

ip prefix-list abc seq 5 deny 10.0.0.0/21

ip prefix-list abc seq 10 permit 0.0.0.0/0 le 32

router bgp 1

nei 23.23.23.3 prefix-list abc out


只permit 10.0.0.0-10.0.7.0的24位路由

ip prefix-list abc seq 5 permit 10.0.0.0/21 ge 24 le 24

router bgp 1

nei 23.23.23.3 prefix-list abc out



小补充:利用prefix-list分别匹配A类B类和C类网络路由,及CIDR路由


首先我们要先明确ABC类地址是什么

A类网络号:高位以0开头,且掩码为8位。注意0和127不可用。(1.0.0.0-126.0.0.0)

B类网络号:高位以10开头,且掩码为16位。(128.0.0.0-191.255.0.0)

C类网络号:高位以110开头,且掩码为24位(192.0.0.0-239.255.255.0)

D类地址:高位以1110开头,没有掩码

E类地址:高位以11110开头,没有掩码


仅匹配主类路由:

A类地址匹配

ip prefix-list seq 5 deny 0.0.0.0/8

ip prefix-list ClassA seq 10 deny 127.0.0.0/8

ip prefix-list ClassA seq 15 permit 0.0.0.0/1 ge 8 le 8


B类地址匹配

ip prefix-list ClassB seq 5 permit 128.0.0.0/2 ge 16 le 16


C类地址匹配

ip prefix-list ClassC seq 5 permit 192.0.0.0/3 ge 24 le 24


匹配无类路由

ip prefix-list seq 5 deny 0.0.0.0/8 le 32

ip prefix-list ClassA seq 10 deny 127.0.0.0/8 le 32

ip prefix-list ClassA seq 15 permit 0.0.0.0/1 ge 8 le 32


B类地址匹配

ip prefix-list ClassB seq 5 permit 128.0.0.0/2 ge 16 le 32


C类地址匹配

ip prefix-list ClassC seq 5 permit 192.0.0.0/3 ge 24 le 32