路由过滤
1、访问控制列表 是基于包的
2、前缀列表 是基于路由的
前缀列表(prefix-list)
不同于用于匹配流量的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类地址一、前缀列表的特点:
(1)、可以增量修改,我们知道对于普通访问控制列表,我们不能删除该列表中的某个条目,如果想删除列表中的某个条目只能将该访问列表全部删除,而前缀列表中,一个条目可以单独地删除或添加。
(2)、前缀列表在Cisco IOS 12.0及其以后的版本中可以使用。
(3)、在大型列表的加载和路由查找方面比访问控制列表有显著的性能改进。
(4)、前缀列表用于BGP路由。
二、前缀列表的命令描述
(1)、ip prefix-list list-name [seq seq-value] {deny|permit} network/len [ge ge-value] [le le-value]
list name 代表被创建的前缀列表名(注意该列表名是区分大小写的)
seq-value 代表前缀列表语名的32bit序号,用于确定过滤语句被处理的次序。缺省序号以5递增(5,10,15等等)。
deny|permit 代表当发现一个匹配条目时所要采取的行动
network/len 代表要进行匹配的前缀和前缀长度。Network是32位的地址,长度是一个十进制的数。
ge-value 代表比”network/len”更具体的前缀,要进行匹配的前缀长度的范围。如果只规定了”ge”属性,该范围被认为是从”ge-value”到32。
le-vlaue 代表比”network/len”更具体的前缀,要进行匹配的前缀长度的范围。如果只规定了”le”属性,该范围被认为是从”len”到”le-value”。
(2)、neighbor {ip-address | peer-group-name} prefix-list prefix-listname {in|out}
ip-address 代表要为之进行路由过滤的BGP邻居的IP地址。
peer-group-name 代表BGP对等体组的名称。
prefix-listname 代表要被用来过滤路由的前缀列表的名称。
in 说明前缀列表要被应用在来自邻居的入路由通告。
out 说明前缀列表要被应用在发送给邻居的外出的路由通告。
三、在”ip prefix-list”命令中”ge”和”le”任选项的使用可能令人迷惑,理解起来比较难,下面我们做了一个测试,以便更好的了解这些选项的含义。
网络拓朴描述如下:
路由器A属于AS65000,路由器B与路由器C是路由器A的邻居,路由器A从路由器B学到了,172.16.10.0/24, 172.16.11.0这两条路由,路由器C接路由器A的端口地址是:10.1.1.1
在这个测试中使用了3台路由器:路由器B,路由器A和路由器C,路由器C是路由器A的EBGP邻居,路由器C的接口地址为10.1.1.1,如上所示。
假设配置前缀列表之前,路由器A学到了下面的路由(从路由器B那里学来的):
172.16.0.0 subnetted:
172.16.10.0/24
172.16.11.0/24
我们测试了如下5种情况:
第一种情况、在这种情况下,对路由器A做了如下配置:
router bgp 65000 aggregate-address 171.16.0.0 255.255.0.0 neighbor 10.1.1.1 prefix-list tenonly out ip prefix-list tenonly permit 172.16.10.0/8 le 24
当用”show run”命令查看路由器的配置时,我们将看到路由器A自动地将这个配置的最后一行改为下面这样:
ip prefix-fix tenonly permit 172.0.0.0/8 le 24
这时路由器C学到了三个路由器,即:
172.16.0.0/16 172.16.10.0/24 172.16.11.0/24
下面就祥细的说明一下路由器C为什么会学到这三条路由:
因为我们在路由器A中用aggregate创建了一条聚合路由器172.16.0.0/16,
而且在使用这个命令的时候没有加参数summary-only所以,路由器A的EBGP邻居,即路由器C有可能学到三条路由,即聚合路由172.16.0.0/16,具体路由172.16.10.0/24,
具体路由172.16.11.0/24。
在命令”in prefix-list tenonly permit 172.16.10.0/8 le 24″中, len等于8,len-value等24,。前面我们说过对于比”network/len”更具体的前缀,要加上参数len-value,如果只规定了”le”属性,该范围被认为是从”len”到”le-value”,这里的8和24是长度的概念,即可以精确匹配前8位,前9位,前11位,…….一直到可以精确匹配前24位。172.16.0.0/16被认为是精确匹配了前16位,而172.16.10.0/24和172.16.11.0/24则被认为是精确匹配了前24位,如果是172.0.0.0/8则被认为是精确匹配了前8位,即这里的8至24可是掩码位的概念,就是说从路由器C的角度上来说,我可以学到路由器A的BGP路由表中的掩码为/8,/9,/10,/11,/12,/13,/14,/15,/16,/17,/18,/19,/20,/21,/22,/23,/24的路由器,所以在这种情况下路由器C学到了三条路由即:
172.16.0.0/16 172.16.10.0/24 172.16.11.0/24
第二种情况、在这种情况中,对路由器A做了如下配置:
router bgp 65000 aggregate-address 171.16.0.0 255.255.0.0 neighbor 10.1.1.1 prefix-list tenonly out ip prefix-list tenonly permit 172.16.10.0/8 le 16
在这里从路由器C的角度来说,我有可能学到的路由是172.16.0.0/16 , 172.16.11.0/24
,172.16.10.0/24,但实际我只学到172.16.0.0/16这一条路由器,原因是,len-value的值已经改为16,即我只能学到掩码为/8,/9,/10,/11,/12,/13,/14,/15,/16的路由,在上面的三条路由中,符合条件的只有 172.16.0.0/16,所以路由器C只学到172.16.0.0/16这一条路由。
第三种情况、在这个情况中,对路由器A做了如下配置:
router bgp 65000 aggregate-address 171.16.0.0 255.255.0.0 neighbor 10.1.1.1 prefix-list tenonly out ip prefix-list tenonly permit 172.16.10.0/8 ge 17
在这里从路由器C的角度来说,我有可能学到的路由是172.16.0.0/16 , 172.16.11.0/24,172.16.10.0/24,但路由器C只学到172.16.11.0/24,172.16.10.0/24这两条路由,为什么呢,这是因为这里ge-value 的值为17,它精确匹配前17位,前19位,前20位,一直可以精确匹配前32位,即从路由器C的角度上来看,我能说到路由器A中的BGP路由表中的掩码为/17,/18,/19,/20,/21,/22,/23,/24,/25,/26,/27,/28,/29,/30,/31,/32的路由,所以路由器C学到了两条路由:172.16.11.0/24,172.16.10.0/24。
第四种情况、在这个情况中,对路由器A做了如下配置:
router bgp 65000 aggregate-address 171.16.0.0 255.255.0.0 neighbor 10.1.1.1 prefix-list tenonly out ip prefix-list tenonly permit 172.16.10.0/8 ge 16 le24
在这里从路由器C的角度来说,我有可能学到的路由是172.16.0.0/16 ,172.16.11.0/24,172.16.10.0/24,路由器C能从路由器A的BGP路由表中学到掩码为
/16,/17,/18,/19,/20,/21,/22,/23,/24的路由,以上三条路由都符合条件,所以都被路由器C学到了。
第五种情况、在这个情况中,对路由器A做了如下配置:
router bgp 65000 aggregate-address 171.16.0.0 255.255.0.0 neighbor 10.1.1.1 prefix-list tenonly out ip prefix-list tenonly permit 172.16.10.0/8 ge 17 le24
在这里从路由器C的角度来说,我有可能学到的路由是172.16.0.0/16 ,172.16.11.0/24,172.16.10.0/24,路由器C能从路由器A的BGP路由表中学到掩码为/17,/18,/19,/20,/21,/22,/23,/24的路由,以上三条路由中只有172.16.11.0/24,172.16.10.0/24符合条件,所以路由器C学到了172.16.11.0/24,172.16.10.0/24这两条路由。
看下面的例子:
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类地址
文章目录
评论抢沙发