常见的路由抓取工具有两种,Access-lsit 和 Prefix-list。这里简单分析一下这两种路由抓取工具应该如何使用。




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

先来看一个例子,一个路由器有如下几个路由条目。我们需要过滤掉21位的汇总路由我们使用ACL要怎么去做。

图中R1 R2运行ospf

R2 R3运行BGP

spacer.gif路由抓取工具使用(ACL,Prefix-List)_第1张图片

spacer.gif


这里是R3收到的所有OSPF条目

路由抓取工具使用(ACL,Prefix-List)_第2张图片

明细条目:

10.0.0.0/24

10.0.1.0/24

10.0.2.0/24

10.0.3.0/24

10.0.4.0/24

10.0.5.0/24

10.0.6.0/24

10.0.7.0/24

10.12.12.0/24

汇总条目:

10.0.0.0/21

假设使用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路由抓取工具使用(ACL,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路由抓取工具使用(ACL,Prefix-List)_第4张图片


我们再将配置修改一下

路由抓取工具使用(ACL,Prefix-List)_第5张图片spacer.gif

新增了两条细路由:

分别为10.0.0.0/25和10.0.0.128/25

路由抓取工具使用(ACL,Prefix-List)_第6张图片

需求改为,仅允许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路由抓取工具使用(ACL,Prefix-List)_第7张图片



为了达到上面的目的,还有一种更为方便的工具,叫做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

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

实例3:

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

实例4:

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

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

实例5:

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


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


过滤掉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


只允许 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