这是本个专题的第一篇正式文章,这里我们将阐述一下路由的抓取工具。
常用的路由抓取工具有两个分别是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。
这里是R3收到的所有路由条目
从上面的路由表中看有一条汇总条目:
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
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
这么做可以达到目的
我们再将配置修改一下
在R1上把10.0.0.0/24拆分为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怎么做应该怎么做
过滤掉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