其实说白话讲,和ACL 的做用是一样的,就是能够更加精准的,更加方便的匹配路由条目
它同样可以和distribute-list 以及route-map ,做路由重分发策略时使用,
角色也是相同的,和distribute-list相结合使用时,prefix占有决定权
而和route-map结合使用时,由route-map决定是生是死,
再有就是prefix-list 相对于acl而言,只有当出现很多很多条路由时,才会显得那么出众,如果一两条而言,完全没有必要的。
从这一点看出来,route-map在不管是路由策略,还是策略路由中,都占有很重要的一席之地
命令解释
(conifg)#ip prefix-list xx permit\deny x.x.x.x/x ge x le x
不支持数字编号,只可以命名,默认以5递增
x.x.x.x/x 的意思就是要求去匹配的前缀 以及相同的掩码位。什么意思?
比如 192.168.0.0 /24
192.168.1.0 /24
这两个条目有哪些前缀部份是肯定相同的?
192.168部份相同,不相同的我都用0来代替。
那么我就可以这样写
192.168.0.0/16 ge 24 le 24
抓取路由前缀为192.168.0.0的条目,/16的意思是前面16位必须相同,
Ge/le 标记为掩码位的长度,GE是≥,LE是≤,此时我写的是大于等于24,且小于等于24,其意思就是我只匹配为/24长度掩码的条目。
这条命令的意思就是
我要匹配带有192.168.0.0前16位一模一样的条目,并且掩码为24位的。
几种常用的prefix-list命令,适用于抓取不同类型的路由条目前缀
#ip prefix-list wfy permit 192.168.0.0/24 ge 24
// 匹配某一条特定的路由条目 //掩码大于等于24位
#ip prefix-list wfy permit 0.0.0.0/0
//匹配默认路由条目 全0
#ip prefix-list wfy permit 0.0.0.0/0 ge 32
// 匹配所有主机条目,因为主机条目都是255.255.255.255,掩码大于32位
#ip prefix-list wfy permit 0.0.0.0/0 le 32
// 匹配所有条目,因为条件是小于等于32,这是所有路由条目都能满足的
Ok
来看个实例
如图中所示,
R1—R2运行eigrp
R2—R3运行ospf
由R2负责将两端的协议进行重分发
但是要应用路由策略
要求1 ,在R2上拒收来自于/24网段的条目,使用+prefix-list+distribute
ACL可以实现吗?
Access-list 1 per 192.168.0.0 ????完了,没有了? //至此1条
那这样儿的话,
你说,是192.168.0.0---192.168.6.0以 /16的形式抓取的,还是以/24的形式抓取的?
如果是/24的类型抓取,请问,我是不是只抓取了192.168.0.1这一个地址?
如果是/16的类型抓取,请问,我是不是把0.0-6.0的所有网段都抓取了?
当然也不是不能分着写,也可以针对于精确的掩码输入,但是不要忘了,如果路由条目很多呢?几百条,你也要一条一条的写吗?我们是干什么的?能省事儿,绝对不费事儿,干完就走......
所以,这个时候,一个针对于路由前缀的列表,出现了,
对于抓取路由条目方面,它要强ACL几条街。
我们来具体的看一下它的一个命令格式,来分析一下为什么
(实验一会儿再说)
(config)# ip prefix-list xx permit/deny x.x.x.x/x ge x le x
名称 抓取/拒绝 具体的网段和掩码
最后ge 大于等于 le 小于等于
回到实例中
要求1 ,在EIGRP重分布到ospf时,只保留4.0/5.0/6.0三个条目,
思路,先要将0.0 1.0 2.0 3.0 这三个网段进行汇总,此时用到的就是cidr
4个子网,那就是2的2次方,也就是上两位,原24 变成了22
那么在prefix-list中,后面还有一个选项,就是大于等于, 和小于等于,
我们该用哪个呢~
由于其它网段都是/24的,为了不扩大范围而影响其它网段,那么我们就限制在24喽~
具体配置
R2(config)#ip prefix-list 22 permit 192.168.0.0/22 ge 24 le 24
//名字为22 网段为/22 掩码控制在24(必须=24)
(192.168.0.0/24 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24)这4个地址如果汇总成/22的,是一个超网,如果有/25的条目我不管,当然这里可以写成le 32,有可能会更好理解一些.
R2(config)#route-map 22 deny 10 //route-map定义确认还是拒绝条目 R2(config-route-map)#match ip add prefix-list 22 //关联prefix前缀列表 R2(config-route-map)#exit R2(config)#route-map 22 permit 20 //允许其它所有 R2(config-router)#redistribute eigrp 1 subnets route-map 22 //重分布调用route-map
OK ,到R3上看一下具体的条目变化
可以看到,只有4.0/5.0/6.0这三个条目了,其它的全部干掉了
这些条目在R2上可都是有的,是在分发的过程中被干掉的。
要求2 在R3 上配置分发列表,不要4.0、5.0只保留6.0条目,使用prefix-list来实现
要求一条命令抓取条目
分析,4.0 5.0 两个条目,可以看做是两个子网, 2的1次方=2,那么就等于是借了1位,
由原来的/24 变成了 /23 也就是192.168.4.0 /23,包含了这两个子网,那么配置如下
R3(config)#ip prefix-list r1 deny 192.168.4.0/23 le 24
//定义拒绝条目 /23超网,但是要求 只能小于等于/24的条目
R3(config)#ip prefix-list r1 per 0.0.0.0/0 le 32 //允许其它小于等于/32的条目 R3(config)#router ospf 1 R3(config-router)#distribute-list prefix r1 in //distribute,挂接prefix-list
再次提醒,prefix-list 和acl,这两者与distribute-list的组合使用效果是一样的,起到决策权的都不是distribute-list, 而是acl 和prefix-list,只有当这两个技术遇到route-map 之后才变成小弟,因为确实没有人家牛。Route-map永远是占据主导地位。不可撼动
OK ,再反过来,
要求3
Ospf进入eigrp 后,只保留 172.16.1.0/24、2.0、3.0、6.0 但是 4.0和5.0不要
分析,
0.0/1.0/2.0/3.0/22为一组,
继续走,
C 172.16.4.0/25 is directly connected, Loopback4
C 172.16.5.0/26 is directly connected, Loopback5
C 172.16.6.0/24 is directly connected, Loopback6
我擦嘞,什么情况,这两个掩码长度不一样啊~
不一样又能怎么样呢?干就完了,
分析
4.0/25 5.0/26
如果写成这样行不行
Ip prefix-list r3 permit 172.16.4.0/24 ge 25
不行,为什么?
因为条件无法满足,172.16.4.0/24里面无法包含 172.16.5.0 明白?
那么就只能这样儿了,
Ip prefix-list r3 permit 172.16.4.0/23 ge 24
抓取/23的掩码,然后别外条件就是大于等于/24,这样其它网段就不受影响了,
只有/26的那条 5.0会受影响,6.0是/24的,不会受到影响
配置如下
R2(config)#ip prefix-list r2 permit 172.16.4.0/23 ge 24 le 32 //其实最后的LE 32 写不写都无所谓的,不过这是一个好习惯 ,可以规定范围 R2(config)#route-map r2 deny 10 R2(config-route-map)#match ip address prefix-list r2 R2(config-route-map)#exit R2(config)#route-map R2(config)#route-map r2 per 20 R2(config-router)#$e ospf 1 metric 10000 100 255 1 1500 route-map r2 //重分布调用route-map
看到了吧
其实并不难,只是你如何去计算更为准确的子网cidr地址,以及它的范围
最后再提问一下,
像上面最后一个要求 ,可以有几种实现的方法?
1 acl+distribute-list
2 acl+route-map
3 prefix-list+distribute-list
4 prefix-list+route-map
而且有时也完全没有必须要进行CIDR,只要你匹配前面一样的,知道多少位就可以了,最主要的是在/X后面的这个/上,以及合理使用GE 和LE