常见的路由抓取工具有两种,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
这里是R3收到的所有OSPF条目
明细条目:
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
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
这么做可以达到目的
我们再将配置修改一下
新增了两条细路由:
分别为10.0.0.0/25和10.0.0.128/25
需求改为,仅允许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获得所需输出。
为了达到上面的目的,还有一种更为方便的工具,叫做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