字首清單
不同于用于比對流量的IP通路清單,IP字首清單主要是用來指定具體的網絡可達的。字首清單用來比對字首(網段)和字首長度(子網路遮罩)。在BGP路由選擇協定中,可以對BGP路由選擇更新進行過濾,要完成這個工作要用到字首清單。
一、字首清單的特點:
(1)、可以增量修改,我們知道對于普通通路控制清單,我們不能删除該清單中的某個條目,如果想删除清單中的某個條目隻能将該通路清單全部删除,而字首清單中,一個條目可以單獨地删除或添加。
(2)、字首清單在Cisco IOS 12.0及其以後的版本中可以使用。
(3)、在大型清單的加載和路由查找方面比通路控制清單有顯著的性能改進。
(4)、字首清單用于BGP路由。
二、字首清單的指令描述
(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
下面就祥細的說明一下路由器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.11.0/24
第二種情況、在這種情況中,對路由器A做了如下配置:
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做了如下配置:
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做了如下配置:
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做了如下配置:
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這兩條路由。