前綴列表
不一樣於用於匹配流量的IP訪問列表,IP前綴列表主要是用來指定具體的網絡可達的。前綴列表用來匹配前綴(網段)和前綴長度(子網掩碼)。在BGP路由選擇協議中,能夠對BGP路由選擇更新進行過濾,要完成這個工做要用到前綴列表。
1、前綴列表的特色:
(1)、能夠增量修改,咱們知道對於普通訪問控制列表,咱們不能刪除該列表中的某個條目,若是想刪除列表中的某個條目只能將該訪問列表所有刪除,而前綴列表中,一個條目能夠單獨地刪除或添加。
(2)、前綴列表在Cisco IOS 12.0及其之後的版本中可使用。
(3)、在大型列表的加載和路由查找方面比訪問控制列表有顯著的性能改進。
(4)、前綴列表用於BGP路由。
2、前綴列表的命令描述
(1)、「ip prefix-list list-name [seq seq-value] 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」屬性,該範圍被認爲是從「le」到「le-value」。
(2)、「neighbor {ip-address | peer-group-name} prefix-list prefix-listname 」
ip-address 表明要爲之進行路由過濾的BGP鄰居的IP地址。
peer-group-name 表明BGP對等體組的名稱。
prefix-listname 表明要被用來過濾路由的前綴列表的名稱。
in 說明前綴列表要被應用在來自鄰居的入路由通告。
out 說明前綴列表要被應用在發送給鄰居的外出的路由通告。
下面是普通的前綴列表的參數:
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類地址
網絡拓樸描述以下:
路由器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
in 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」屬性,該範圍被認爲是從「le」到「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
in 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
in 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
in 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
in 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這兩條路由。