前缀列表ip prefix-list
前缀列表书写规范:
ip prefix-list 1 permit 192.168.16.0/[mask] ge [value] le [value]
Len(mask)<ge-value<=le-value
前缀列表会先根据掩长度码范围进行匹配(也就是说,不看IP,先看掩码)
ge[value] 表示 大于等于 [value]
le[value] 表示 小于等于 [value]
再按期望的mask值进行匹配(使IP与MASK进行比较匹配)
len=mask(期望的mask值)
mask是如何进行匹配的?
192.168.00010000.0192.168.00010010.0
255.255.11111101.0
mask = 22
我们只需把两个ip不同的位 置0,所得的结果就是我们所期待的前缀掩码
比如我们希望匹配
192.168.16.0 /24和192.168.18.0/24两条路由
那么我们的前缀列表应写为
ip prefix-list 1 permit 192.168.16.0/22 ge 24 le 24
以上命令的意思表示先把/24掩码的路由筛选出来,然后再按照mask值/22进行匹配
如果范围空着不写的话会有一些缺省值:
不写ge和le那么ge=le=mask
只写le不写ge那么ge=mask
只写ge不写le那么le=32
例:/24 le 32 表示掩码在24-32之间
/24 ge 26 表示掩码在26到32之间
/24 ge 26 le 30 表示掩码在 26到30之间
/24 表示掩码等于24的路由去匹配/24的掩码
和ACL比Prefix-list的好处:
access-list 1 permit 192.168.16.0 0.0.2.0以上ACL可以过滤192.168.16.0和18.0两条路由,但ACL不能准确的描述掩码
比如我们还有一条192.168.16.0/30的路由
那么ACL会把/24和/30的一起过滤掉
而前缀列表只会过滤掉/24的路由
附:在router-map里匹配前缀列表的写法
map# match ip address prefix-list [list num]
比如我们希望匹配
192.168.16.0 /24和192.168.18.0/24
那么我们的前缀列表应写为
ip prefix-list 1 permit 192.168.16.0/22 ge 24 le 24
匹配A类地址,且掩码大于16小于24(A类前缀0~127是0,B类128~191是10,C类是110,D类是1110)
ip pre 1 per 0.0.0.0/1 ge 16 le 24
不同于用于匹配流量的IP访问列表,IP前缀列表主要是用来指定具体的网络可达的。前缀列表用来匹配前缀(网段)和前缀长度(子网掩码)。前缀列表有两个参数很难理解。
下面是普通的前缀列表的参数:
ip prefix-list [name] [permit | deny] [prefix]/[len]
name为任意的名字或者数字,prefix是指定的路由前缀(网段),len是指定的前缀长度(子网掩码)。例子如下:
ip prefix-list LIST permit 1.2.3.0/24
上面的例子中指定匹配网段1.2.3.0,并且指定子网掩码为255.255.255.0,这个列表不匹配1.2.0.0/24,也不匹配1.2.3.4/32
ip prefix-list LIST permit 0.0.0.0/0
上面的例子指定匹配网段0.0.0.0和子网掩码0.0.0.0。这个列表用来匹配默认路由。
通常情况下,在使用前缀列表的时候加上“GE”(大于或等于)和“LE”(小于或等于)时比较容易发生混淆。这是因为当使用“GE”和“LE”时,列表的长度(len)发生了改变。
另外一种前缀列表的参数:
ip prefix-list [name] [permit | deny] [prefix]/[len] ge [min_length] le [max_length]
name为任意的名字或者数字,prefix是将要进行比较的路由前缀(网段),len是指从最左边开始的比特位,min_length为最小的子网掩码的值,max_length为最大的子网掩码的值
使用GE和LE,必须满足下面的条件:
len < GE <= LE
上面的参数很容易混淆,简单的说就是一个匹配前缀或子网的地址的范围。
看下面的例子:
ip prefix-list LIST permit 1.2.3.0/24 le 32
上面的例子表示前缀1.2.3.0前面的24位必须匹配。此外,子网掩码必须小于或等于32位
ip prefix-list LIST permit 0.0.0.0/0 le 32
上面的例子意味着0位需要匹配,此外子网掩码必须小于或等于32位。一位所有的网段的掩码都小于或等于32位,并且一位都不用匹配,所以这句话等于permit any
ip prefix-list LIST permit 10.0.0.0/8 ge 21 le 29
上面的例子说明网段10.0.0.0的前8位必须匹配,此外子网掩码必须在21位和29位之间。注意
使用前缀列表不能像访问列表那样匹配具体的应用流。
前缀列表也不能用来具体匹配奇数或偶数的前缀,或什么可以被15整除的前缀
在前缀列表中,比特位必须是连续的,并且从左边开始
ip prefix-list fuck permit 0.0.0.0/0 ge 1 表示除了默认路由外的所有路由
ip prefix-list test16 seq 5 permit 0.0.0.0/1 ge 8 le 8 配置A类地址
ip prefix-list test16 seq 10 permit 128.0.0.0/2 ge 16 le 16 配置B类地址
ip prefix-list test16 seq 15 permit 192.0.0.0/3 ge 24 le 24 配置C类地址