原文鏈接:http://xuanbo.blog.51cto.com/499334/465596/
2010-12-27 12:02:45
上個月我寫一篇關於BGP協議的博文,曾許諾過要完善這個文檔,但因最近的工作和授課很忙,所以沒有時間進行完善。為了實現這個承諾,我在去外地出差期間對BGP協議詳解博文進行一些修改,其中內容包括了一些實驗,以及一些內容的補充和深入闡述,更宜於網友們學習BGP路由協議。因為這個文檔出來的很晚,也希望網友們見諒!
此BGP協議的內容也不算太難,一些關於BGP的高級應用,會在以后MPLS 協議和MPLS流量工程中的內容中會更深入的講解!
希望通過本文檔能幫助那些愛好網絡知識和那些參加CCIE考試的網友們提供一些幫助。
一、BGP的概況
BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定義的;一個路由器只能屬於一個AS。AS的范圍從1-65535(64512-65535是私有AS號),RFC1930提供了AS號使用指南。
BGP的主旨是提供一種域間路由選擇系統,確保自主系統只能夠無環地交換路由選擇信息,BGP路由器交換有關前往目標網絡的路徑信息。
BGP是一種基於策略的路由選擇協議,BGP在確定最佳路徑時考慮的不是速度,而是讓AS能夠根據多種BGP屬性來控制數據流的傳輸。
? BGP將傳輸控制協議(TCP)用作其傳輸協議。是可靠傳輸,運行在TCP的179端口上(目的端口)
? 由於傳輸是可靠的,所以BGP0使用增量更新,在可靠的鏈路上不需要使用定期更新,所以BGP使用觸發更新。
? 類似於OSPF和ISIS路由協議的Hello報文,BGP使用keepalive周期性地發送存活消息(60s)(維持鄰居關系)。
? BGP在接收更新分組的時候,TCP使用滑動窗口,接收方在發送方窗口達到一半的時候進行確定,不同於OSPF等路由協議使用1-to-1窗口。
? 豐富的屬性值
? 可以組建可擴展的巨大的網絡
? 鄰居關系表
n 所有BGP鄰居
? 轉發數據庫
n 記錄每個鄰居的網絡
n 包含多條路徑去往同一目的地,通過不同屬性判斷最好路徑
n 數據庫包括BGP屬性
? 路由表
n 最佳路徑放入路由表中
n EBGP路由(從外部AS獲悉的BGP路由)的管理距離為20
n IBGP路由(從AS系統獲悉的路由)管理距離為200
如下圖所示。
? 鄰居表,包含與之建立BGP連接的鄰居
n 使用命令show ip bgp summary可以查看到
Router#sh ip bgp summary BGP router identifier 11.1.1.1, local AS number 100 BGP table version is 8, main routing table version 8 5 network entries using 585 bytes of memory 6 path entries using 312 bytes of memory 4/3 BGP path/bestpath attribute entries using 496 bytes of memory 1 BGP AS-PATH entries using 24 bytes of memory 0 BGP route-map cache entries using 0 bytes of memory 0 BGP filter-list cache entries using 0 bytes of memory BGP using 1417 total bytes of memory BGP activity 5/0 prefixes, 6/0 paths, scan interval 60 secs Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.1.1.1 4 100 14 18 8 0 0 00:09:32 2 11.1.1.2 4 200 12 16 8 0 0 00:07:03 1 |
? 轉發表,從鄰居那里獲悉的的所有路由都被加入到BGP轉發表中。
n 使用命令show ip bgp可以查看
Router#sh ip bgp BGP table version is 8, local router ID is 11.1.1.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 10.1.1.0/24 0.0.0.0 0 32768 i * i 10.1.1.1 0 100 0 i *> 11.1.1.0/24 0.0.0.0 0 32768 i *>i192.168.1.0 10.1.1.1 0 100 0 i *> 192.168.2.0 0.0.0.0 0 32768 i *> 192.168.3.0 11.1.1.2 0 0 200 i |
? 路由表,BGP路由選擇進程從BGP轉發表中選出前往每個網絡的最佳路由,並加入到路由表中。
n 使用命令show ip route bgp可以查看
Router#sh ip route bgp B 192.168.1.0/24 [200/0] via 10.1.1.1, 00:13:11 B 192.168.3.0/24 [20/0] via 11.1.1.2, 00:11:19 |
? open:用來建立最初的BGP連接。(包含hold-time,router-id)
? Keepalive:對等體之間周期性的交換這些消息以保持會話有效。(默認60秒)
? Update:對等體之間使用這些消息來交換網絡層可達性信息。
? Notification:這些消息用來通知出錯信息。
所有的BGP分組共享同樣的公有首部,在學習不同類型的分組之前,先討論公共首部,如下圖所示,這個首部的字段如下。
? 標記:這個16字節標記字段保留給鑒別用
? 長度:這個2字節字段定義包括首部在內的報文總長度
? 類型:這個1字節段定義分組的類型,用數值1至4定義BGP消息類型
打開消息:主要是利用此報文建立鄰居,運行BGP的路由器打開與鄰居的TCP連接,並發送打開報文,如果鄰居接受這種鄰居關系,由響應保活報文。打開報文格式如下所示。
? 版本:這個1字節字段定義BGP的版本,當前的版本是4
? 自治系統:這個2字節字段定義自治系統號。
? 保持時間:這個2字節字段定義一方從另一方收到保活報文或更新報文之前所經過的最大秒數,若路由器在保持時間的期間內沒有收到這些報文中的一個,就認為對方是不工作的。
? BGP協議標識:這是2字節字段,這定義發送打開報文的路由器,為此,這個路由器通常使用它的IP地址中的一個作為BGP標識符。
? 選項長度:打開報文還可以包含某些選項參數,若包含,則這個1字節字段定義選項參數總長度,若沒有選項參數,則這個字段的值為0
? 選項參數:若選項參數長度的值不是0,則表示有某些選項參數,每一個選項參數本身又有兩個字段,參數長度和參數值,到現在已定義的唯一的選項參數是鑒別。
如下圖是采用ethereal采集到的BGP的打開消息報文。
更新報文:更新報文是BGP協議的核心,路由器使用它來撤銷以前已通知的終點和宣布到一個新終點的路由,或兩者都有,應該注意:BGP可以撤銷好幾個在以前曾通知過的終點,但在單個更新報文中則只能通知一個新終點,如下所示。
? 不可行路由長度:這個2字節字段定義下一字段的長度。
? 撤銷路由:這個字段列出必須從以前通知的清單中刪除的所有路由
? 路徑屬性長度:這個2字節字段定義下一個字段的長度
? 路徑屬性:這個字段定義到這個報文宣布可達性的網絡路徑屬性
? 網絡層可達性信息:這個字段定義這個報文真正通知的網絡。它有一個長度字段和一個IP地址前綴,長度定義前綴中的位數。前綴定義這個網絡地址的共同部分。例如,若這個網絡是123.1.10.0/24,則網絡前綴是24而前綴是123.1.10。
下圖為,是采用ethereal采集到的BGP的更新消息報文。
保活報文:是用來告訴對方自己是工作的,保活報文只包括公共首部,如下圖所示。
下圖為,是采用ethereal采集到的BGP的保活報文。
通知報文:當檢測出差錯狀態或路由器打算關閉連接時,路由器就發送通知報文,如下圖所示。
? 差錯碼:這個1字節字段定義差錯的種類
? 差錯子碼:這個1字節字段進一步定義每一種差錯的類型
? 差錯數據:這個字段可用來給出關於該差錯的更多的診斷信息
具體的差錯碼,如下表所示。
差錯碼 |
差錯碼說明 |
差錯子碼說明 |
1 |
報文首部差錯 |
3種不同的子碼:同步問題(1),壞的報文長度(2),壞的報文類型(3) |
2 |
打開報文差錯 |
6種不同的子碼:不支持的版本(1),壞的對等AS(2),壞的BGP標識符(3),不支持的可選參數(4),鑒別失敗(5),不可接受的保持時間(6) |
3 |
更新報文差錯 |
11 種不同的子碼:錯誤形成的屬性表(1),不能識別的熟知屬性(2),丟失熟知屬性(3),屬性標志差錯(4),屬性長度差錯(5),非法起點屬性 (6),AS路由選擇環路(7),無效的下一路屬性(8),可選屬性差錯(9),無效的網絡字段(10),錯誤形成的AS_PATH(11) |
4 |
保持計時器截止期到 |
未定義子碼 |
5 |
有限狀態機差錯 |
定義過程的差錯,未定義子碼 |
6 |
關閉 |
未定義子碼 |
下圖為,是采用ethereal采集到的BGP的通知報文。
在兩個BGP發言人交換信息之前,BGP都要求建立鄰居關系,BGP不是動態地發現所感興趣的運行BGP的路由器,相反,BGP使用一個特殊的鄰居IP地址來配置的。
BGP使用周期性的Keepalive分組來確認BGP鄰居的可訪問性。
Keepalive 計時器是保持時間(Hold Time)的三分之一,如果發給某一特定BGP鄰居三個連續的Keepalive分組都丟失的話,保持時間計時器超時,那個 鄰居被視為不可達,RFC1771對保持時間的建議是90秒,Keepalive計時器的建議值是30秒。
按照RFC1771,BGP建立鄰居關系要經歷以下幾個階段,如下圖所示。
? Idle:在 此狀態下不分配網絡資源,不允許傳入的BGP連接。當在持續性差錯條件下,經常性的重啟會導致波動。因此,在第一次進入到空閑狀態后,路由器會設置連接重 試定時器,在定時器到期時才會重新啟動BGP,思科的初始連接重試時間為60秒,以后每次連接重試時間都是之前的兩倍,也就是說,連接等待時間呈指數關系 遞增。
? Connect:(已經建立完成了TCP三次握手),BGP等待TCP連接完成,如果連接成功,BGP在發送了OPEN分組給對方之后,狀態機變為OpenSent狀態,如果連接失敗,根據失敗的原因,狀態機可能演變到Active,或是保持Connect,或是返回Idle。
? Active:在這個狀態下,初始化一個TCP連接來建立BGP間的鄰居關系。如果連接成功,BGP在發送了OPEN分組給對方之后,狀態機變為OpenSent狀態,如果連接失敗,可能仍處在Active狀態或返回Idle狀態。
? OpenSent:BGP發送OPEN分組給對方之后,BGP在這一狀態下等待OPEN的回應分組,如果回應分組成功收到,BGP狀態變為OpenConfirm,並給對方發送一條Keepalive分組,如果沒有接到回應分組,BGP狀態重新變為Idle或是Active。
? OpenConfirm:這時,距離最后的Established狀態只差一步,BGP在這個狀態下等待對方的Keepalive分組,如果成功接收,狀態變為Established,否則,因為出現錯誤,BGP狀態將重新變為Idle。
? Established:這是BGP對等體之間 可以交換信息的狀態,可交換的信息包括UPDATE分組、KeepAlive分組和Notification分組。
connect和active都是TCP連接階段,ACTIVE是發起方,connect是應答方。可以使用命令show ip bgp summary、debug ip bgp events、debug ip bgp來查看。
Router#debug ip bgp BGP debugging is on for address family: IPv4 Unicast *Jun 23 22:00:05.619: BGP: 11.1.1.2 went from Idle to Active *Jun 23 22:00:05.627: BGP: 11.1.1.2 open active delayed 30128ms (35000ms max, 28% jitter) *Jun 23 22:00:06.215: BGP: 11.1.1.2 passive open to 11.1.1.1 *Jun 23 22:00:06.219: BGP: 11.1.1.2 went from Active to Idle *Jun 23 22:00:06.219: BGP: 11.1.1.2 went from Idle to Connect *Jun 23 22:00:06.227: BGP: 11.1.1.2 rcv message type 1, length (excl. header) 26 *Jun 23 22:00:06.227: BGP: 11.1.1.2 rcv OPEN, version 4, holdtime 180 seconds *Jun 23 22:00:06.231: BGP: 11.1.1.2 went from Connect to OpenSent *Jun 23 22:00:06.231: BGP: 11.1.1.2 sending OPEN, version 4, my as: 100, holdtime 180 seconds *Jun 23 22:00:06.231: BGP: 11.1.1.2 rcv OPEN w/ OPTION parameter len: 16 *Jun 23 22:00:06.231: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 6 *Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has CAPABILITY code: 1, length 4 *Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has MP_EXT CAP for afi/safi: 1/1 *Jun 23 22:00:06.235: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2 *Jun 23 22:00:06.235: BGP: 11.1.1.2 OPEN has CAPABILITY code: 128, length 0 *Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has ROUTE-REFRESH capability(old) for all address-families *Jun 23 22:00:06.239: BGP: 11.1.1.2 rcvd OPEN w/ optional parameter type 2 (Capability) len 2 *Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has CAPABILITY code: 2, length 0 *Jun 23 22:00:06.239: BGP: 11.1.1.2 OPEN has ROUTE-REFRESH capability(new) for all address-families BGP: 11.1.1.2 rcvd OPEN w/ remote AS 200 *Jun 23 22:00:06.243: BGP: 11.1.1.2 went from OpenSent to OpenConfirm *Jun 23 22:00:06.243: BGP: 11.1.1.2 send message type 1, length (incl. header) 45 *Jun 23 22:00:06.359: BGP: 11.1.1.2 went from OpenConfirm to Established *Jun 23 22:00:06.363: %BGP-5-ADJCHANGE: neighbor 11.1.1.2 Up |
IBGP運行在AS內部,不需要直連。IBGP有水平分割,建議使用Full Mesh,由於Full Mesh不具有擴展性,為了解決IBGP的Full Mesh問題,使用路由反射器(RR)和聯邦兩種方法來解決。主要減少了backbone IGP中的路由。
Neighbor后所指的地址可達。發起方不能是缺省路由,應答方不能是缺省路由。
可以使用下面兩種方法來建立IBGP鄰居:
? 鄰居之間可以通過各自的一個物理接口建立對等關系,該對等關系是通過屬於它們共享的子網的IP地址來建立的。
? 鄰居之間也可以通過使用環回接口建立對等關系。
在IBGP中,由於假定了IBGP鄰居在物理上直接相連的可能性不大,所以將IP分組頭中的TTL域設置為255。
6、建立EBGP鄰居
EBGP運行在AS與AS之間的邊界路由器上,默認情況下,需要直連或使用靜態路由,如果不是直連,必須指EBGP多跳,Neighbor x.x.x.x ebgp-multihop [1-255] 不選擇為最大值,255跳。
可以使用下面兩種方法來建立EBGP鄰居:
? 鄰居之間可以通過各自的一個物理接口建立對等關系。
? 鄰居之間也可以通過使用環回接口建立對等關系。
7、neighbor ip-address remote-as number命令
例:neighbor 10.1.1.1 remote-as 100
指定對方屬於哪一個AS。所指的10.1.1.1地址,必須在IGP中可達。
? 允許鄰居用這個地址來訪問我的179端口,但沒有指明訪問本路由器的哪個地址,只檢查源地址。
? 本路由器以更新源地址去訪問neighbor后面這個地址的179端口,是否可以建立TCP鏈接要看對方是否允許我的更新源來訪問它。
示例:
R1/R2兩台路由器運行RIPv2,都將環回口宣告進RIP。這時假如在兩台路由器之間運行IBGP鄰居關系:
R1:neighbor 192.168.2.1 remote-as 1
R2:neighbor 10.1.1.1 remote-as 1
雙方都沒有寫更新源。(neighbor x.x.x.x update-source lo0代表本路由器的更新源為lo0口,BGP的包以這個接口的地址為源地址發送出去。)
一邊指環回口,一邊指直連接口。可以建立鄰居。這里有2個TCP的session,其中只有R1去訪問R2的環回口的179端口的TCP session可以建立。可以用show tcp brief查看。
Router#sh tcp brief TCB Local Address Foreign Address (state) 65693960 10.1.1.1.51124 192.168.2.1.179 ESTAB |
這時在R2上寫上確定更新源命令:neighbor 10.1.1.1 update-source lo1,這時即可建立2條TCP session。可以使用命令Show tcp brief查看到2條TCP session在建立,當一條establish完成后,另一條過會即消失。
Router#sh tcp brief TCB Local Address Foreign Address (state) 65693960 10.1.1.1.51124 192.168.2.1.179 CLOSED 65693E14 10.1.1.1.37992 192.168.2.1.179 ESTAB Router#sh tcp brief TCB Local Address Foreign Address (state) 65693E14 10.1.1.1.37992 192.168.2.1.179 ESTAB |
注:路由器建立BGP鄰居寫兩條正確的neighbor命令,是為了冗余。
? BGP同步規則指出,BGP路由器不應用使用通過IBGP獲悉的路由或將其通告給外部鄰居,除非該路由是本地的或是通過IGP獲悉的。
? 同步開啟意味着,從一個IBGP鄰居學來的路由,除非從IGP中也同樣學習到,否則不可能被選為最優。
? 如果IGP為OSPF,那么在IGP中,這些前綴的router-id也必須與通告這些前綴的bgp的router-id相匹配。才有可能被選為最優。
實例說明:如下圖所示
R1、R2、R3同為OSPF area 0中路由器(每台路由器的router-id如上圖所示),R2上一條路由3.3.3.0/24宣告進OSPF。
R1、 R3運行IBGP,R1將3.3.3.0/24的前綴引入BGP,傳給R3。這時R3既從OSPF area0中的R2學習到該前綴,又從IBGP對等體 R1,學習到該前綴,如果R3的synchronizaion是開啟的,檢查同步,在R3的BGP轉發表里:
R1 router ospf 10 router-id 2.2.2.1 log-adjacency-changes network 10.1.1.0 0.0.0.255 area 0 network 11.1.1.0 0.0.0.255 area 0 ! router bgp 100 synchronization bgp log-neighbor-changes redistribute ospf 10 neighbor 11.1.1.2 remote-as 100 no auto-summary
R3 router ospf 10 router-id 2.2.2.3 log-adjacency-changes network 11.1.1.0 0.0.0.255 area 0 ! router bgp 100 synchronization bgp log-neighbor-changes neighbor 11.1.1.1 remote-as 100 no auto-summary R3#sh ip bgp BGP table version is 30, local router ID is 11.1.1.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i3.3.3.3/32 10.1.1.1 11 100 0 ? * i10.1.1.0/24 11.1.1.1 0 100 0 ? r>i11.1.1.0/24 11.1.1.1 0 100 0 ? R3#sh ip bgp 3.3.3.3 BGP routing table entry for 3.3.3.3/32, version 26 Paths: (1 available, no best path) Not advertised to any peer Local 10.1.1.1 (metric 20) from 11.1.1.1 (11.1.1.1) Origin incomplete, metric 11, localpref 100, valid, internal, not synchronized |
說明同步檢查沒有通過,當把R1的bgp的router-id改為2.2.2.2時,R3這時檢查同步就可以通過了。
R1 router ospf 10 router-id 2.2.2.1 log-adjacency-changes network 10.1.1.0 0.0.0.255 area 0 network 11.1.1.0 0.0.0.255 area 0 ! router bgp 100 synchronization bgp router-id 2.2.2.2 bgp log-neighbor-changes redistribute ospf 10 neighbor 11.1.1.2 remote-as 100 no auto-summary R3#sh ip bgp BGP table version is 37, local router ID is 11.1.1.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path r>i3.3.3.3/32 10.1.1.1 11 100 0 ? r>i10.1.1.0/24 11.1.1.1 0 100 0 ? r>i11.1.1.0/24 11.1.1.1 0 100 0 ? R3#sh ip bgp 3.3.3.3 BGP routing table entry for 3.3.3.3/32, version 35 Paths: (1 available, best #1, table Default-IP-Routing-Table, RIB-failure(17)) Flag: 0x820 Not advertised to any peer Local 10.1.1.1 (metric 20) from 11.1.1.1 (2.2.2.2) Origin incomplete, metric 11, localpref 100, valid, internal, synchronized, best |
? 關閉同步的條件
n 將EBGP的路由重分布進IGP
n 本AS不為其他AS提供穿越服務(末節的AS)
n 穿越路徑上所有路由器都運行BGP
二、BGP屬性
路由器發送關於目標網絡的BGP更新消息,更新的度量值被稱為路徑屬性。屬性可以是公認的或可選的、強制的或自由決定的、傳遞的或非傳遞的。屬性也可以是部分的。並非組織的和有組合都是合法的,路徑屬性分為4類:
? ——公認強制的
? ——公認自由決定的
? ——可選傳遞的
? ——可選非傳遞的
? 只有可選傳遞屬性可被標記為部分的
公認屬性
? 是公認所有BGP實現都必須能夠識別的屬性。這早些屬性被傳遞給BGP鄰居。
? 公認強制屬性必須出現在路由描述中,公認自由決定屬性可以不出現在路由描述中
可選屬性
? 非公認屬性被稱為可選的,可選屬性可以是傳遞的或非傳遞的
? 可選屬性不要求所有的BGP實現都支持
? 對於不支持的可選傳遞屬性,路由器將其原封不動地傳遞給其他BGP路由器,在這種情況下,屬性被標記為部分的。
? 對於可選非傳遞屬性,路由器必須將其刪除,而不將其傳遞給其他BGP路由器
BGP定義屬性
? 公認強制屬性
? 公認自由決定
? 可選傳遞屬性
? 可選非傳遞屬性
BGP 每條更新消息都有一個長度可變的路徑屬性序列<屬性類型,屬性長度,屬性值>,如果第1比特是0,則屬於是公認屬性,如果它是1,則該屬性是 任選屬性,如果第2比特是0,則該屬性是不可傳遞的,如果它是1,則屬性是可傳遞的,公認屬性總是可傳遞的,屬性標志域中的第3個比特指示任選可傳遞屬性 中的信息是部分的(值為1)還是完整的(值為0),第4個比特確定該屬性長度是1字還是2字節,標志域其他4個比特總為0.屬性類型代碼字節含有屬性代 碼。如下圖所示。
1、AS路徑屬性(AS-path)
AS_PATH是一個公認必選的屬性,它用AS號的順序來描述AS間的路徑或到NLRI所明確的目的地的路由。
當 每個運行運行BGP的路由器發起一條路由——當它在自己的AS域內公布一個有關目的地NLRI——它將自己的AS號附加到AS_PATH中。當后續的運行 BGP的路由器向外部的對端公布路由,它將自己的AS號附加到AS_PATH中。AS可以描述所有它經過的自治系統,以最近的AS開始,以發起者的AS結 束。如下圖所示。
只有將更新消息發送給在另一個AS域內的鄰居時,BGP路由器才將它的AS號加到AS_PATH中,也就是說只有在兩個EBGP對等體之間公布路由時,AS號才被附加到AS_PATH中。
可以通過使用AS附加改變其公布路由的AS_PATH來影響數據流的流向。
AS_PATH屬性的另一個功能就是避免環路,如果BGP路由器從它的外部鄰居收到一條路由,而該路由AS_PATH包含這個BGP路由器自己的AS號。於是該路由器就知道是條環路路由。如下圖所示。
實例說明:如圖所示。
可以將私有的AS號進行隱藏,如下配置所示。
下面是AS屬性的另一個實例,如下圖所示。
R1在發送更新的時候,剝除私有AS號;並且不將AS100的路由傳播給其客戶路由器R3,配置如下所示。
聚合后繼承明細路由的屬性,在大括號里面的as-path在計算長度時,只算一個。在聯盟內小括號里面的AS號,在選路時,不計算到as-path長度里面。
增加as-path的長度,可以用route-map里面的set as-path prepend來做,如:
neighbor 1.1.1.1 route-map AS {in|out} route-map AS set as-path prepend 10 10 |
在neighbor的入向做as-path prepend。是在as-path靠近我的地方加長度,如:
10 10 2i 。10 10是新加的。
而在neighbor的出向做as-path prepend。是在AS起源的方向加path長度,如:
2 10 10i 。10 10是新加的。
在as-path prepend的后面還有一個參數,last-as,如:
route-map AS set as-path prepend last-as ? <1-10> number of last-AS prepends |
意思是將離我最近的AS,將它的AS號在as-path里面再重復出現幾次。這個10看起來可以和allowas-in里面的10對應起來。
假如as-path prepend 與as-path prepend last-as合用的時候,last-as先生效,然后prepend再生效。
減小as-path的長度,如用聯盟和remove-private-AS等可以實現。
注意:Remove-private-as,如果在as-path里交替出現私有和公有的AS號,這樣將無法將私有AS號去掉。在起源的時候,連續的時候才有效。
bgp bestpath as-path ignore(隱藏命令),這條命令可以使我們在選路時,跳過as-path的選路,直接往下繼續選擇最優路徑。
2、源頭屬性(Origin)
源頭是公認強制屬性,它定義了路徑信息的源頭。
IGP:路由在起始AS的內部,使用network命令通過BGP通告路由時,通常屬於這種情況,在BGP表中,IGP源頭用i表示
EGP:路由是通過EGP獲悉的,在BGP表中用e表示。
不完全:路由的源頭未知或是通過其他方法獲悉的,在BGP表中,不完整源頭用?表示
如下示例所示。
2、下一跳屬性(NEXT_HOP)
該為公認必選屬性,描述了到公布目的地的路徑下一跳路由器的IP地址。由BGP NEXT_HOP屬性所描述的IP地址不經常是鄰居路由器的IP地址,要遵循下面的規則:
如果正在進行路由宣告的路由器和接收的路由器在不同的自治系統中,NEXT_HOP是正在宣告路由器接口的IP地址,如下圖所示。
如果正在進行路由宣告的路由器和接收的路由器在同一個AS內,並且更新消息的NLRI指明的目的地也在同一個AS內,那么NEST_HOP就是宣告路由的鄰居的IP地址。如下圖所示。
如果正在宣告的路由器和接收的路由器是內部對等體,並且更新消息的NLRI指明目的地在不同的AS,則NEXT_HOP就是學習到路由的外部對等實體的IP地址。如下圖所示。
從上面圖可以知道,在去往192.168.5.0的網段中會出現路徑不可達的情況,解決這個問題的方法是保證內部路由器知道與兩處自治系統相連的外部網絡,可以使用靜態路由的辦法,但實際的做法是在外部端口上以被動模式運行IGP。但在某種情況下,該方法並不理想。
第二種方法是采用配置選項來做,這個配置選項被稱做next-hop-self。
下面具體詳述了下一跳的不可達的解決方法:
? 解決下一跳不可達的方法:
n 靜態路由
n 在IBGP鄰居所處的IGP中宣告
n 將與EBGP直連的網絡重分布進IGP
n neighbor x.x.x.x next-hop-self(將指向EBGP鄰居更新源的地址變為自己的更新源地址)(RR有的版本會將下一跳改變)
? 一般情況下,在本路由器上將直連的網絡引入BGP,下一跳為0.0.0.0,本路由器聚合的路由的下一跳也為0.0.0.0。
? 在本路由器上將從IGP學來的路由引入BGP時,在本路由器上看BGP的轉發表,下一跳為IGP路由的下一跳。在多訪問網絡環境中,用直連接口建立鄰居關系,會產生第三方下一跳。
實例說明:如下圖所示,
R2與R1是IBGP鄰居,R1與R3是EBGP鄰居,當用直連接口建鄰居時,R2引入BGP的前綴172.16.2.0/24,在R3的bgp轉發表里,將顯示為R2的多訪問網絡接口地址(如:10.1.1.2)。產生第三方下一跳的現象。
n 如果R1、R2、R3全部用直連接口建鄰居時會產生第三方下一跳。
n 如果R1、 R2用環回口而R1、R3用直連建立鄰居時,會產生第三方下一跳。
n 如果R1、R2用直連而R1、R3用回環口時,不會產生第三方下一跳,如下所示配置。
n 如果R1、R2、R3都用環回口建立鄰居,則不會產生第三方下一跳,如下配置所示。
R3#show ip bgp BGP table version is 4, local router ID is 172.16.3.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 10.1.1.1 0 0 100 i *> 172.16.2.0/24 10.1.1.2 0 100 i *> 172.16.3.0/24 0.0.0.0 0 32768 i |
R1 router bgp 100 no synchronization bgp log-neighbor-changes network 172.16.1.0 mask 255.255.255.0 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 ebgp-multihop 2 neighbor 3.3.3.3 update-source Loopback1 neighbor 10.1.1.2 remote-as 100 no auto-summary R3 router bgp 200 no synchronization bgp log-neighbor-changes network 172.16.3.0 mask 255.255.255.0 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 ebgp-multihop 2 neighbor 1.1.1.1 update-source Loopback1 no auto-summary R3#sh ip bgp BGP table version is 8, local router ID is 172.16.3.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 1.1.1.1 0 0 100 i *> 172.16.2.0/24 1.1.1.1 0 100 i *> 172.16.3.0/24 0.0.0.0 0 32768 i |
R1 router bgp 100 no synchronization bgp log-neighbor-changes network 172.16.1.0 mask 255.255.255.0 neighbor 2.2.2.2 remote-as 100 neighbor 2.2.2.2 update-source Loopback1 neighbor 3.3.3.3 remote-as 200 neighbor 3.3.3.3 ebgp-multihop 2 neighbor 3.3.3.3 update-source Loopback1 no auto-summary R2 router bgp 100 no synchronization bgp log-neighbor-changes network 172.16.2.0 mask 255.255.255.0 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 update-source Loopback1 no auto-summary R3 router bgp 200 no synchronization bgp log-neighbor-changes network 172.16.3.0 mask 255.255.255.0 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 ebgp-multihop 2 neighbor 1.1.1.1 update-source Loopback1 no auto-summary R3#sh ip bgp BGP table version is 10, local router ID is 172.16.3.1 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 1.1.1.1 0 0 100 i *> 172.16.2.0/24 1.1.1.1 0 100 i *> 172.16.3.0/24 0.0.0.0 0 32768 i |
第三方下一跳:收到路由更新的源地址與將要發出去的接口地址在同一網段的時候,路由的下一跳不改變,為原來路由更新的源地址。
? 有時雖然路由的下一跳可達,但會出現訪問網絡出現環路的現象。
實例說明:
R5、 R3,R1、R2為EBGP鄰居關系,R1、R3為IBGP鄰居關系。那么R5通過BGP傳給R3的路由(如10.1.1.0/24),R3通過IBGP 傳給R1,R1通過EBGP傳給R2,這時R2訪問10.1.1.0/24這個網絡的下一跳就在R1上。這時R2去訪問R5的時候,就會產生環路。
則R2(走下一跳)——R1(走物理鏈路)——R2,這樣環路產生了。
解決方法:
? neighbor x.x.x.x next-hop-unchanged (此命令只能用在EBGP多跳的環境下,將路由的下一跳,從自己的更新源地址改變為從IBGP學來的下一跳地址)(這時路由的下一跳在路由表里將改變。)
? neighbor x.x.x.x route-map XX {in|out}然后在route-map里面set ip next-hop來改變前綴的下一跳。(在路由表里下一跳會改變。)
? 策略路由PBR,強制命令R2到10.1.1.0/24的時候走R3。(路由表里下一跳不會改變)
3、本地優先級屬性(Local_preference)
本地優先級是公認自由決定的屬性,它告訴AS中的路由器,那條路徑離開AS的首選路徑。本地優先級越高,路徑被選中的可能性越大。本地優先級這種屬性只能在同一個AS中的路由器之間交換,本是優先級只適用於內部鄰居,用於內部對等體之間的Update消息。
本地優先級,可以在本AS和大聯盟內傳遞。越大越優先。影響路由器的出站流量。默認情況下,local-preference為100。
使用下面的命令,如下圖所示
是將路由器收到的所有外部BGP路由的默認本地優先級修改為指定值。對IBGP鄰居路由器傳過來的路由,不會改變它們的local-preference。如果將一個IBGP鄰居傳來的路由傳給另外一個IBGP鄰居,那我必須是RR。
實例說明:如下圖所示。
未使用本地優先級操作路徑,如下所示路由器C的BGP表。
在路由器A 上修改本地優先級,如下所示。
在使用本地優先操縱后的路徑,查看路由器C 的BGP表。
4、原子聚合屬性
原子聚合是一個公認自決的屬性。類型代碼為6,它告訴鄰接AS,始發路由器對路由進行了聚合。可以使用下面的命令進行配置,
命令只聚合已經包含在BGP表中的網絡,這與使用network來通告匯總路由要求不同,后者要求網絡必須出 現在IP路由選擇表中
配置命令aggregate-address后,一條與匯總路由對應的指向null0的BGP路由將自動被加入到IP路由表中。如下示例所示。
可以使用show ip bgp命令來查看
關於原子聚合的詳細內容在以后的章節中詳細說明。
5、權重屬性
cisco私有的參數。本地有效。缺省條件下,本地始發的路徑具有相同的WEIGHT值(即32768),所有其他的路徑的weight值為0。越大越優選。影響路由器的出站流量。
權重只影響當前路由器,指定鄰居的權重。使用下面命令來修改權重。
可以在neighbor的入向設置。范圍0-65535。Neighbor 1.1.1.1 weight 10,從對等體1.1.1.1接收過來的所有路由的weight值都設置為10。
還可以用route-map來設定,可以將特定路由的weight值改變。如下所示:
Neighbor 1.1.1.1 route-map AA in Route-map AA permit 10 Match ip address prefix AA Set weight 10 Route-map AA permit 20 |
6、MED屬性
MED 屬性也被稱為度量值,是一種可選非傳遞屬性。承載於EBGP的Update消息中。MED用於向外部鄰居指出進入AS的首選路徑,當入口有多個時,AS可 以使用MED來動態地影響其他AS如何選擇進入路徑,在BGP中,MED是唯一一個可影響數據如何進入AS的屬性。度量值越小,路徑被選中的可能性越大。 與本地優先級不同,MED是在自主系統之間交換的。MED影響進入AS的數據流,而本地優先級影響離開AS的數據流。如下圖所示。
Metric和med:BGP的metric對IBGP同樣有效。特指med:從EBGP收到的metric比較的時候才叫MED,MED是借用了BGP的metric在EBGP的時候進行比較。MED(多出口區分)比較EBGP的metric找到最優的出口。
MED相當於IGP路由的metric值,越小越優先。在新的IOS中,將IGP中的路由重分布進BGP,BGP將自動繼承IGP路由的metric值。在老的IOS里,如果需要繼承需要在重分布時加route-map,如:
Redistribute rip route-map RE Route-map RE set metric-type internal |
默 認情況下,只有在兩條路徑的第一個(鄰近的)AS相同的情況下才會進行比較:任何聯盟內的子自治系統都被忽略。任何多跳路徑,只有在 AS_SEQUENCE中的第一個AS相同的情況下,才會比較MED;任何打頭的AS_CONFED_SEQUENCE都將被忽略。如果激活了bgp always-compare-med,那么對於所有路徑都比較MED,而不考慮是否來自同一個AS。如果使用了這個選項,就應該在整個AS中都這樣做,以避免路由選擇環路。
實例說明:如下拓撲圖
下面是一個使用策略路由來實現修改MED值的案例。
實例說明:如下圖所示,此實例采用了本地優先級與MED屬性
7、共同體屬性
BGP團體是一組共享某些共同特性的目的地,用於簡化路由策略的執行,一個團體並不被限制在一個網絡或一個AS之中。是另一種過濾入站或出站BGP路由的方法。
COMMUNITY 屬性是一組4個8位組的數值,RFC1997規定,前2個8位組表示自治系統,后2個8位組表示出於管理目的而定義的標識符,格式為AA:NN,而思科的 默認格式為NN:AA,可以使用命令ip bgpcommunity new-format將思科默認格式改為RFC1997的標准格式。
團體屬性是一個可傳遞屬性,類型代碼為8。
? no_export——如果接收到的路由攜帶該數值,不通告到EBGP對等體。如果配置了聯盟,則不能將此路由宣告到聯盟之外。
? no_advertise——如果接收到的路由攜帶該數值,不通告給任何對等體,包括EBGP和IBGP。
? internet ——無任何值,所有路由器默認情況下都屬於該團體,帶此屬性的路由在被收到后,應該被通告給所有的其他路由器
? local_as——帶有此屬性的路由在被收到后,應該被通告給本地AS域內的對等體,但不應該被通告給外部系統中的對等體,包括同一個聯盟內其它自治系統中的對等體。
實例說明:如下圖所示。
三、BGP路由匯總
BGP的匯總有2種:
A.匯總:summary
靜態路由手工匯總指向null 0,再network引入BGP。
如果明細路由斷了,匯總仍然會被引入,且缺乏靈活性。
命令network要求路由選擇表中有與指定的前綴或掩碼完全匹配的條目,為滿足這種要求,可配置一條指向接口null0的靜態路由,如果IGP執行匯總,則路由選擇中可能已以有這樣的靜態路由。
命令network告訴BGP通告哪些網絡,而不如何通告,僅當描寫的網絡號出現在IP路由選擇中后,BGP才會通告它,如下圖所示。
B.聚合:aggregate
聚合路由在本路由器上生成一條聚合路由,下一跳為0.0.0.0。
aggregate-address 172.16.12.0 255.255.252.0 ?
advertise-map Set condition to advertise attribute
as-set Generate AS set path information
attribute-map Set attributes of aggregate
route-map Set parameters of aggregate
summary-only Filter more specific routes from updates
suppress-map Conditionally filter more specific routes from updates
nlri
<cr>
? Advertise-map
n 只 對advertise-map里面匹配的路由進行聚合。當advertise-map里面匹配的明細路由全部消失后,即使聚合路由范圍內還有其他明細路 由,聚合路由也將消失。當與as-set合用時,只繼承advertise-map里面匹配的明細路由的屬性。如果用summary-only,會將所有 的明細包括沒有在advertise-map里面匹配的路由一起抑制。
? As-set
n 聚合路由繼承明細路由的屬性,包 括:as-path、local_preference、community、origin-code。與advertise-map合用,只繼承 advertise-map里面匹配的明細路由的屬性。如果繼承了as-path屬性,繼承的as-path如果沒有在大括號{ }中顯示,則有幾個算幾 個AS;如果繼承AS是在大括號中排列的,那么只算一個AS號。只關心AS的號碼,不關心順序。
? As-path、as-seq(as-path)原子聚合不帶任何AS。AS-SET首先是區別於atomic-aggregate,產生了AS的序列,序列中無分先后順序,這一點也不同於有明確順序的AS-SEQEUENCE
? Attribute-map和route-map
? 這兩個參數一樣,可以將聚合路由的屬性清除掉(除了as-path屬性),添加自己需要添加的屬性。Attribute-map 與 as-set的合用時,能否將聚合的路由的屬性重置。(OK可以改)
? Summary-only將聚合路由所包括的所有路由都抑制掉,被抑制的路由在bgp的轉發表里,顯示為s,代表suppress的意思。發送更新時,只發送聚合路由。可以與
? neighbor 1.1.1.1 unsuppress-map XX合用,對特定鄰居漏過特定的明細路由。
? Suppress-map,將suppress-map里面匹配的路由抑制掉,被抑制的路由在bgp的轉發表里,顯示為s,代表suppress的意思。發送更新時,只發送聚合路由和沒有被抑制的明細路由。可以與
? neighbor 1.1.1.1 unsuppress-map XX合用,對特定鄰居漏過特定的明細路由。
四、BGP路由決策
BGP的RIB包括三部分:
? Adj-RIBs-In:存儲了從對等體學習到的路由理新中未經處理的路由信息,這些包含在Adj-RIBs-In中的路由被認為是可行路由。
? Loc-RIB:包含了BGP發言者對Adj-RIBs-In中的路由應用本地策略之后選定的路由
? Adj-RIBs-Out:包含了BGP發言者向對等體宣告路由。
BGP有三個部分既可以是3個不同的數據庫,也可以是利用指針來區分不同部分的單一數據庫。BGP路由決策通過對Adj-RIBs-In中的路由應用本地路由策略,且向Loc-RIB 和Adj-RIBs-Out中輸入選定或修改的路由進行路由選擇。其有三個階段。
第一階段:計算每條可行路由的優先級
第二階段:從所有可用路由中為特定目的地選出最佳路由,並將其安裝到Loc-RIB中。
第三階段:將相應的路由加入到Adj-RIBs-Out中,以便向對等體進行宣告。
以下為BGP選路原則的13條:
(1)weight
cisco私有的參數。本地有效。缺省條件下,本地始發的路徑具有相同的WEIGHT值(即32768),所有其他的路徑的weight值為0。越大越優選。影響路由器的出站流量。
(2)local-preference
本地優先級,可以在本AS和大聯盟內傳遞。越大越優先。影響路由器的出站流量。默認情況下,local-preference為100。
(3)本地起源
路 由器本地始發的路徑優先。在BGP的轉發表里顯示為0.0.0.0。依次降低的優先級順序是:default-originate(針對每個鄰居配置)、 default-informaiton-originate(針對每種地址簇配置)、network、redistribute、 aggregate-address。
(4)as-path
評估as-path的長度,as-path列表最短的路徑優先。
聚合后繼承明細路由的屬性,在大括號里面的as-path在計算長度時,只算一個。在聯盟內小括號里面的AS號,在選路時,不計算到as-path長度里面。
(5)起源代碼
評估路由的origin code屬性,有3個i<e<?。i代表用network將IGP引入BGP的,或者是聚合等路由,e代表EGP,?代表重分布進BGP的路由。i為0,e為1,?為3。越小越優。
(6)MED
metric傳遞不能傳出AS。例外:始發路由器可以metric傳給鄰居,可以是IBGP/EBGP,但是EBGP再傳不出去。
MED相當於IGP路由的metric值,越小越優先。
(7)EBGP優於IBGP
這里EBGP>聯盟內的EBGP>IBGP。
(8)最近的IGP鄰居
這里是指peer的更新源在我的路由表里顯示,哪個最近哪個最優。
OSPF是否考慮O、OIA、OE1、OE2?只看cost不看O/OIA/OE。
(9)如果配置了maximum-path[ibgp]n,如果存在多條等價的路徑,會插入多條路徑。
BGP默認maximum-path=1,只能有一條最優路徑,但可以通過命令來改變,如果沒有IBGP參數,默認只能做EBGP的負載均衡。做負載均衡還有一個條件,就是上面的8條都比不出哪條最優的情況下,才有可能出現負載均衡。
做了BGP的負載均衡后,在BGP的轉發表里還是一個最優,但在路由表里可以出現2個下一跳。
(10)最老的
與本端最早建立鄰居關系的peer,被優選。因為它最穩定。但一般不考慮,會跳過這個繼續往下選。
如果以下任一條件為真,這一步將會被忽略:
啟用了bgp bestpath compare-routerid,多條路徑具有相同的router-id,因為這些路由都是從同一台路由器接收過來的;當前沒有最佳路徑。缺乏當前最佳路徑的例子發生在正在通告最佳路徑的鄰居失效的時候。
(11)最低的ROUTER-ID
BGP 優選來自具有最低的路由器ID的BGP路由器的路由。Router-id是路由器上最高的IP地址,並且優選環回口。也可以通過bgp router- id命令靜態的設定路由器ID。如果路徑包含RR屬性,那么在路徑選擇過程中,就用originator-id來替代路由器ID。
(12)多跳路徑的始發路由器ID相同,那么選擇CLUSTER_LIST長度短的,因為每經過一個RR,cluster-list會加上這個RR的router-id
如果多條路徑的始發router-id相同,那么BGP將優選cluster-list長度最短的路徑。這種情況僅僅出現在BGP RR的環境下。
(13)BGP優選來自於最低的鄰居地址的路徑。是BGP的neighbor配置中的那個地址,如果是環回口,則看環回口地址的高低。
BGP優選來自於最低的鄰居地址的路徑。這是BGP的neighbor配置中所使用的IP地址,並且它對應於與本地路由器建立TCP連接的遠端對等體。
五、路由翻動(route flaps)和路由懲罰(route dampening)
路由翻動產生的原因有很多種比如:鏈路不穩定、路由器接口故障、ISP工程施工、管理員錯誤配置和錯誤故障檢查等等都能造成路由翻動,由於路由翻動會造成每台路由器重新計算路由,從而消耗了大量的網絡帶寬和路由器的CPU資源。
BGP鄰居的flaping
當 R1與R2兩台路由器運行IGP協議,並且建立EBGP的鄰居關系,用環回口建立鄰居關系。這時假如R1、R2將他們的更新源通告進了BGP,然后通過 BGP傳遞給對方,這時由於從EBGP學到的路由的AD為20,大於IGP的默認AD,這時會產生鄰居的flaping現象。
這時show ip bgp summary可以看到每經過60秒BGP table version is 1, main routing table version 1會改變一次。BGP轉發表里變化了多少次。
用debug ip bgp、debug ip bgp update來查看BGP的flaping。
解決方法:
(1)EBGP建鄰居時不要將環回口引入BGP。
(2)Network + backdoor
R1、 R2、R3因為屬於同一個AS,所以運行一個IGP,R2-R4,R3-R5之間的鏈路並沒有通告進IGP中。R1、R2、R3 IBGP對等體關 系,R3在指R1時,打了neighbor 1.1.1.1 next-hop-self;R4、R2 ,R5、R3 ,R4、R5為EBGP對等體關 系,它們都拿直連接口建立鄰居關系。
這時R4將它的環回口4.4.4.0/24和R2-R4的直連網絡24.0.0.0/24引入BGP, 這時在R1上就會產生路由下一跳flaping的現象。這時show ip bgp summary可以看到每經過60秒 BGP table version is 1, main routing table version 1會改變一次。
解決方法:
(1)靜態路由(R1上靜態路由)
(2)在IBGP鄰居所處的IGP中宣告
(3)將與EBGP直連的網絡重分布進IGP
(4)neighbor x.x.x.x next-hop-self(R2指R1時輸入)
路由懲罰(route dampening)由RFC2439描述,它主要由以下三個目的:
? 提供了一種機制,以減少由於不穩定路由引起的路由器處理負載
? 防止持續的路由抖動
? 增強了路由的穩定性,但不犧牲表現良好的(well-behaved)路由的收斂時間。
ROUTER BG 1
BG DAMP 15 750 2000 60 ---- 針對所有的路由。
BG DAMP ROUTE-MAP XXX
ROUTE-MAP XXX
MATIP ADD PREFIS XX
SET DAM 15 750 2000 60 ---DEFAULT
IP PREFIX XX PERMIT 1.1.1.0/24
SH IP BG 1.1.1.0
SH IP BG DAM PARA
Dampening為每一條前綴維護了一個路由抖動的歷史記錄。Dampening算法包含以下幾個參數:
? 歷史記錄――――當一條路由flaping后,改路由就會被分配一個懲罰值,並且它的懲罰狀態被設置為history。
? 懲罰值(penalty)――――路由每flaping一次,這個懲罰值就會增加。默認的路由flaping懲罰值為1000。如果只有路由屬性發生了變化,那么懲罰值為500。這個值是硬件編碼的。
? 抑制門限(suppress limit)――――如果懲罰值超過了抑制門限,改路由將被懲罰或dampen。路由狀態將由history轉變為damp狀態。默認值的抑制門限是2000,它可以被設置。
? 懲罰狀態(damp state)――――當路由處於懲罰狀態時,路由器在最佳路徑選擇中將不考慮這條路徑,因此也不會把這條前綴通告給它的對等體。
? 半衰期(half life)――――在一半的生命周期的時間內,路由的懲罰值將被減少,半衰期的缺省值是15分鍾。路由的懲罰值每5秒鍾減少一次。半衰期的值可以被設置。
? 重 用門限(reuse limit)――――路由的懲罰值不斷的遞減。當懲罰值降到重用門限以下時,改路由將不再被抑制。缺省的重用門限為750。路由器每 10秒鍾檢查一次那些不需要被抑制的前綴。重用門限時可以被配置的。當懲罰值達到了重用門限的一半時,這條前綴的歷史記錄(history)將被清除,以 便更有效率的使用內存。
? 最大抑制門限/最大抑制時間――――如果路由在短時間內表現出極端的不穩定性,然后又穩定下來,那么累計的懲罰 值可能會導致這條路由在過長的時間里一直處於懲罰狀態。這就是設置最大抑制門限的基本目的。如果路由表現出連續的不穩定性,那么懲罰值就停留在它的上限 上,使得路由保持在懲罰狀態。最大抑制門限是用公式計算出來的。最大抑制時間為一條路由停留在懲罰狀態的最長時間。默認為60分鍾(半衰期的4倍)可以配 置。
n 最大抑制門限=重用門限×2(最大抑制時間÷半衰期)
n 由於最大抑制門限為公式算出來的,所以有可能最大抑制門限≤抑制門限,當這種情況發生時,dampening的設置是沒有效果的。如重用門限=750,抑制門限=3000,半衰期=30分鍾,最大抑制時間=60分鍾。按照這樣的配置,算出來的最大抑制門限為3000,
n 與抑制門限一樣,因為必須超過抑制門限,才能對路由進行dampening,所以這時dampening的設置沒有效果。
BGP的dampening僅僅影響EBGP的路由。Dampening是基於每條路徑的路由而操作的。如果一條前綴具有兩條路徑,並且其中一條被懲罰了,那么另一條前綴仍然是可用的,可以通告給BGP對等體。
命令:
bgp dampening [route-map XX] [{Half-life reuse-limit suppress-limit Maximum-time }]
如果掛了route-map,那么就在route-map里面匹配特定EBGP路由,來設置dampening值。
檢查命令:
show ip protocol
sh ip bgp dampening ?
dampened-paths 只顯示(清除)被抑制的路由。
flap-statistics 顯示(清除)所有出現擺動的路由以及該路由出現擺動的次數。
parameters Display details of configured dampening parameters
show ip bgp neighbors 1.1.1.1 dampened-routes
show ip bgp neighbors 1.1.1.1 flap-statistics
六、路由反射器
由於IBGP的水平分割問題,所以IBGP需要Full Mesh。由於整個IBGP full mesh的話,需要建的session數為n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,路由反射器是其中一種,而另一種則是聯邦。
路由反射器是被配置為允許它把通過IBGP所獲悉的路由通告到其他IBGP對等體的路由器,路由器反射器與其他路由器有部分IBGP對等關系,這些路由器被稱為客戶。客戶間的對等是不需要的,因為路由反射器將在客戶間傳遞通告。 如下圖所示。
其優點:減少AS內BGP鄰居關系的數量,從而減少了TCP連接數;在AS內可以有多個路由反射器,即是為了冗余也是為了分成組,以進一步減少所需IBGP會話的數量。路由反射器的路由器可以與非路由反射器的路由器共存,所以配置更簡單。
RFC1966中定義了3條RR用來決定要宣告哪條路由的規則,具體使用時取決於路由是如何學習到的。
? 如果路由學習自非客戶IBGP對等體,則僅反射給客戶路由器。
? 如果路由學習自某客戶,則反射給所有非客戶和客戶路由器(發起該路由的客戶除外)。
? 如果路由學習自EBGP對等體,則反射給所有非客戶和客戶路由器
路 由反射器的客戶並不知道自己是客戶。客戶和非客戶經過路由反射器反射的路由更新將會帶上cluster-list和originator,可用於IBGP 防環。Cluster-id默認為路由反射器自己的router-id,可以通過命令bgp cluster-id 1.1.1.1來修 改,cluster-id為32位的值,可以寫成點分十進制,也可以寫成十進制數;originator為IBGP內起源路由器的router-id。路 由反射器是IBGP的特性,出了IBGP后,路由反射器所有的特性消失(即路由攜帶的cluster-list和originator全部消失)。
neighbor 1.1.1.1 route-reflector-client
可以通過這條命令來將IBGP的peer 1.1.1.1變為自己的客戶。建議對每個IBGP鄰居都打上。
當路由反射器的客戶full mesh時,可以用no bgp client-to-client reflection禁止客戶到客戶的路由反射。可以減少路由更新。
如下圖為路由反射器的基本配置。
七、BGP聯邦
由於IBGP的水平分割問題,所以IBGP需要full mesh。由於整個IBGP full mesh的話,需要建的session數為n*(n-1)/2。不具有擴展性。所以產生兩種解決方法,聯邦是其中一種。
聯邦既有EBGP的特性,又有IBGP的特性。
聯盟是另一種控制大量IBGP對等體的方法,它就是一個被細分為一組子自治系統(稱為成員自治系統)的AS。如下圖所示。
聯盟增加了兩種類型的AS_PATH屬性
AS_CONFED_SEQUENCE:一個去往特定目的地所經路徑上的有序AS號列表,其用法與AS_SEQUENCE完全一樣,區別在於該列表中的AS號屬於本地聯盟中的自治系統。
AS_CONFED_SET:一個去往特定目的地所經路徑上的無序AS號列表,其用法與AS_SET完全一樣,區別在於該列表中的AS號屬於本地聯盟中的自治系統。
由於AS_PATH發生被用於成員自治系統之間,因而保留了環路預防功能。將Update消息發送給聯盟之外的對等體時,將從AS_PATH屬性中剝離AS_CONFED_SEQUENCE和AS_CONFED_SET信息,而將聯盟ID附加到AS_PATH中。
Local_preference和MED可以在聯邦內傳遞。聯盟內的小AS號,在as-path里顯示在小括號里,在as-path計算長度時,不被考慮。下一跳在聯邦內傳遞不會改變。
八、配置樣例1
下面的示例中涉及到BGP的基本配置,涉及到一些基本的知識點,如EBGP多跳、更新源使用環回接口、路由映射發布團體屬性等,如下圖所示。
下面是其參考配置。
R1#sh running-config
!
interface Loopback0
ip address 192.168.250.1 255.255.255.0
!
interface Loopback1
ip address 192.168.1.213 255.255.255.252
!
interface Loopback6
ip address 5.5.5.5 255.255.255.0
!
interface Serial2/0
ip address 192.168.1.210 255.255.255.252
serial restart-delay 0
!
router bgp 300
no synchronization
bgp log-neighbor-changes
network 192.168.1.212 mask 255.255.255.252
network 192.168.250.0
neighbor 6.6.6.6 remote-as 100
neighbor 6.6.6.6 ebgp-multihop 2
neighbor 6.6.6.6 update-source Loopback6
no auto-summary
!
ip route 6.6.6.0 255.255.255.0 192.168.1.209
!
R2#sh running-config
!
interface Loopback5
ip address 1.1.1.1 255.255.255.255
!
interface Loopback6
ip address 6.6.6.6 255.255.255.0
!
interface Ethernet1/0
ip address 192.168.1.221 255.255.255.252
duplex half
!
interface Ethernet1/1
ip address 192.168.1.193 255.255.255.252
duplex half
!
!
interface Serial2/0
ip address 192.168.1.209 255.255.255.252
serial restart-delay 0
!
interface Serial2/1
ip address 192.168.1.226 255.255.255.252
serial restart-delay 0
!
router ospf 10
log-adjacency-changes
passive-interface Serial2/0
passive-interface Serial2/1
network 1.1.1.1 0.0.0.0 area 0
network 192.168.1.192 0.0.0.3 area 0
network 192.168.1.220 0.0.0.3 area 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 update-source Loopback5
neighbor 2.2.2.2 next-hop-self
neighbor 3.3.3.3 remote-as 100
neighbor 3.3.3.3 update-source Loopback5
neighbor 3.3.3.3 next-hop-self
neighbor 5.5.5.5 remote-as 300
neighbor 5.5.5.5 ebgp-multihop 2
neighbor 5.5.5.5 update-source Loopback6
neighbor 192.168.1.225 remote-as 200
no auto-summary
!
ip route 5.5.5.0 255.255.255.0 192.168.1.210
!
R3#sh running-config
!
interface Loopback5
ip address 2.2.2.2 255.255.255.255
!
interface Ethernet1/0
ip address 192.168.1.222 255.255.255.252
duplex half
!
interface Ethernet1/1
ip address 192.168.1.198 255.255.255.252
duplex half
!
router ospf 10
log-adjacency-changes
network 2.2.2.2 0.0.0.0 area 0
network 192.168.1.196 0.0.0.3 area 0
network 192.168.1.220 0.0.0.3 area 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 update-source Loopback5
neighbor 3.3.3.3 remote-as 100
neighbor 3.3.3.3 update-source Loopback5
no auto-summary
!
R4#sh running-config
!
interface Loopback5
ip address 3.3.3.3 255.255.255.255
!
interface Ethernet1/0
ip address 192.168.1.194 255.255.255.252
duplex half
!
interface Ethernet1/1
ip address 192.168.1.197 255.255.255.252
duplex half
!
interface Ethernet1/2
ip address 192.168.1.206 255.255.255.252
duplex half
!
!
router ospf 10
log-adjacency-changes
passive-interface Ethernet1/2
network 3.3.3.3 0.0.0.0 area 0
network 192.168.1.192 0.0.0.3 area 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 1.1.1.1 remote-as 100
neighbor 1.1.1.1 update-source Loopback5
neighbor 1.1.1.1 next-hop-self
neighbor 2.2.2.2 remote-as 100
neighbor 2.2.2.2 update-source Loopback5
neighbor 2.2.2.2 next-hop-self
neighbor 192.168.1.205 remote-as 400
no auto-summary
!
R5#sh running-config
!
interface Loopback0
ip address 192.168.50.1 255.255.255.0
!
interface Loopback1
ip address 192.168.75.1 255.255.255.0
!
interface Loopback3
ip address 192.168.1.201 255.255.255.252
!
interface Ethernet1/0
ip address 192.168.1.205 255.255.255.252
duplex half
!
router bgp 400
no synchronization
bgp log-neighbor-changes
network 192.168.1.200 mask 255.255.255.252
network 192.168.50.0
network 192.168.75.0
neighbor 192.168.1.206 remote-as 100
no auto-summary
!
R6#sh running-config
!
interface Loopback0
ip address 192.168.100.1 255.255.255.0
!
interface Loopback1
ip address 192.168.200.1 255.255.255.0
!
interface Loopback3
ip address 192.168.1.217 255.255.255.252
!
interface Loopback10
ip address 192.168.192.1 255.255.255.0
!
interface Loopback11
ip address 192.168.193.1 255.255.255.0
!
interface Loopback12
ip address 192.168.194.1 255.255.255.0
!
interface Loopback13
ip address 192.168.195.1 255.255.255.0
!
interface Loopback14
ip address 192.168.196.1 255.255.255.0
!
interface Loopback15
ip address 192.168.197.1 255.255.255.0
!
interface Loopback16
ip address 192.168.198.1 255.255.255.0
!
interface Loopback17
ip address 192.168.199.1 255.255.255.0
!
interface Serial2/0
ip address 192.168.1.225 255.255.255.252
serial restart-delay 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
network 192.168.1.216 mask 255.255.255.252
network 192.168.100.0
network 192.168.192.0
network 192.168.193.0
network 192.168.194.0
network 192.168.195.0
network 192.168.196.0
network 192.168.197.0
network 192.168.198.0
network 192.168.199.0
network 192.168.200.0
aggregate-address 192.168.192.0 255.255.248.0
neighbor 192.168.1.226 remote-as 100
neighbor 192.168.1.226 send-community
neighbor 192.168.1.226 route-map community out
no auto-summary
!
!
no ip http server
no ip http secure-server
!
!
access-list 110 permit ip host 192.168.192.0 host 255.255.248.0
!
route-map community permit 10
match ip address 110
set community none
!
route-map community permit 20
set community no-export
!
使用一些常用命令來查看其狀態信息,如下所示:
R2#sh ip bgp
BGP table version is 18, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i192.168.1.200/30 3.3.3.3 0 100 0 400 i
*> 192.168.1.212/30 5.5.5.5 0 0 300 i
*> 192.168.1.216/30 192.168.1.225 0 0 200 i
*>i192.168.50.0 3.3.3.3 0 100 0 400 i
*>i192.168.75.0 3.3.3.3 0 100 0 400 i
*> 192.168.100.0 192.168.1.225 0 0 200 i
*> 192.168.192.0 192.168.1.225 0 0 200 i
*> 192.168.192.0/21 192.168.1.225 0 0 200 i
*> 192.168.193.0 192.168.1.225 0 0 200 i
*> 192.168.194.0 192.168.1.225 0 0 200 i
*> 192.168.195.0 192.168.1.225 0 0 200 i
*> 192.168.196.0 192.168.1.225 0 0 200 i
*> 192.168.197.0 192.168.1.225 0 0 200 i
*> 192.168.198.0 192.168.1.225 0 0 200 i
*> 192.168.199.0 192.168.1.225 0 0 200 i
*> 192.168.200.0 192.168.1.225 0 0 200 i
*> 192.168.250.0 5.5.5.5 0 0 300 i
R2#sh ip bgp summary
BGP router identifier 6.6.6.6, local AS number 100
BGP table version is 18, main routing table version 18
17 network entries using 1989 bytes of memory
17 path entries using 884 bytes of memory
5/4 BGP path/bestpath attribute entries using 620 bytes of memory
3 BGP AS-PATH entries using 72 bytes of memory
1 BGP community entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 3589 total bytes of memory
BGP activity 17/0 prefixes, 17/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2.2.2.2 4 100 15 18 18 0 0 00:12:09 0
3.3.3.3 4 100 16 18 18 0 0 00:12:17 3
5.5.5.5 4 300 16 18 18 0 0 00:12:49 2
192.168.1.225 4 200 17 18 18 0 0 00:12:03 12
R4#sh ip bgp
BGP table version is 18, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.200/30 192.168.1.205 0 0 400 i
*>i192.168.1.212/30 1.1.1.1 0 100 0 300 i
*>i192.168.1.216/30 1.1.1.1 0 100 0 200 i
*> 192.168.50.0 192.168.1.205 0 0 400 i
*> 192.168.75.0 192.168.1.205 0 0 400 i
*>i192.168.100.0 1.1.1.1 0 100 0 200 i
*>i192.168.192.0 1.1.1.1 0 100 0 200 i
*>i192.168.192.0/21 1.1.1.1 0 100 0 200 i
*>i192.168.193.0 1.1.1.1 0 100 0 200 i
*>i192.168.194.0 1.1.1.1 0 100 0 200 i
*>i192.168.195.0 1.1.1.1 0 100 0 200 i
*>i192.168.196.0 1.1.1.1 0 100 0 200 i
*>i192.168.197.0 1.1.1.1 0 100 0 200 i
*>i192.168.198.0 1.1.1.1 0 100 0 200 i
*>i192.168.199.0 1.1.1.1 0 100 0 200 i
*>i192.168.200.0 1.1.1.1 0 100 0 200 i
*>i192.168.250.0 1.1.1.1 0 100 0 300 i
R4#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
B 192.168.192.0/24 [200/0] via 1.1.1.1, 00:12:47
1.0.0.0/32 is subnetted, 1 subnets
O 1.1.1.1 [110/11] via 192.168.1.193, 00:13:28, Ethernet1/0
B 192.168.193.0/24 [200/0] via 1.1.1.1, 00:12:47
2.0.0.0/32 is subnetted, 1 subnets
O 2.2.2.2 [110/21] via 192.168.1.193, 00:13:28, Ethernet1/0
B 192.168.194.0/24 [200/0] via 1.1.1.1, 00:12:47
B 192.168.75.0/24 [20/0] via 192.168.1.205, 00:12:49
3.0.0.0/32 is subnetted, 1 subnets
C 3.3.3.3 is directly connected, Loopback5
B 192.168.195.0/24 [200/0] via 1.1.1.1, 00:12:47
B 192.168.196.0/24 [200/0] via 1.1.1.1, 00:12:47
B 192.168.197.0/24 [200/0] via 1.1.1.1, 00:12:47
B 192.168.198.0/24 [200/0] via 1.1.1.1, 00:12:48
B 192.168.199.0/24 [200/0] via 1.1.1.1, 00:12:48
B 192.168.200.0/24 [200/0] via 1.1.1.1, 00:12:48
B 192.168.250.0/24 [200/0] via 1.1.1.1, 00:12:49
B 192.168.50.0/24 [20/0] via 192.168.1.205, 00:12:51
192.168.1.0/30 is subnetted, 7 subnets
B 192.168.1.200 [20/0] via 192.168.1.205, 00:12:51
C 192.168.1.204 is directly connected, Ethernet1/2
C 192.168.1.192 is directly connected, Ethernet1/0
C 192.168.1.196 is directly connected, Ethernet1/1
B 192.168.1.216 [200/0] via 1.1.1.1, 00:12:48
O 192.168.1.220 [110/20] via 192.168.1.193, 00:13:30, Ethernet1/0
B 192.168.1.212 [200/0] via 1.1.1.1, 00:12:49
B 192.168.100.0/24 [200/0] via 1.1.1.1, 00:12:48
B 192.168.192.0/21 [200/0] via 1.1.1.1, 00:12:48
R4#sh ip bgp summary
BGP router identifier 3.3.3.3, local AS number 100
BGP table version is 18, main routing table version 18
17 network entries using 1989 bytes of memory
17 path entries using 884 bytes of memory
5/4 BGP path/bestpath attribute entries using 620 bytes of memory
3 BGP AS-PATH entries using 72 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 3565 total bytes of memory
BGP activity 17/0 prefixes, 17/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
1.1.1.1 4 100 19 17 18 0 0 00:13:37 14
2.2.2.2 4 100 16 17 18 0 0 00:13:25 0
192.168.1.205 4 400 17 19 18 0 0 00:13:30 3
R5#sh ip bgp
BGP table version is 18, local router ID is 192.168.75.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 192.168.1.200/30 0.0.0.0 0 32768 i
*> 192.168.1.212/30 192.168.1.206 0 100 300 i
*> 192.168.1.216/30 192.168.1.206 0 100 200 i
*> 192.168.50.0 0.0.0.0 0 32768 i
*> 192.168.75.0 0.0.0.0 0 32768 i
*> 192.168.100.0 192.168.1.206 0 100 200 i
*> 192.168.192.0 192.168.1.206 0 100 200 i
*> 192.168.192.0/21 192.168.1.206 0 100 200 i
*> 192.168.193.0 192.168.1.206 0 100 200 i
*> 192.168.194.0 192.168.1.206 0 100 200 i
*> 192.168.195.0 192.168.1.206 0 100 200 i
*> 192.168.196.0 192.168.1.206 0 100 200 i
*> 192.168.197.0 192.168.1.206 0 100 200 i
*> 192.168.198.0 192.168.1.206 0 100 200 i
*> 192.168.199.0 192.168.1.206 0 100 200 i
*> 192.168.200.0 192.168.1.206 0 100 200 i
*> 192.168.250.0 192.168.1.206 0 100 300 i
R5#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
B 192.168.192.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.193.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.194.0/24 [20/0] via 192.168.1.206, 00:13:03
C 192.168.75.0/24 is directly connected, Loopback1
B 192.168.195.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.196.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.197.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.198.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.199.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.200.0/24 [20/0] via 192.168.1.206, 00:13:03
B 192.168.250.0/24 [20/0] via 192.168.1.206, 00:13:34
C 192.168.50.0/24 is directly connected, Loopback0
192.168.1.0/30 is subnetted, 4 subnets
C 192.168.1.200 is directly connected, Loopback3
C 192.168.1.204 is directly connected, Ethernet1/0
B 192.168.1.216 [20/0] via 192.168.1.206, 00:13:04
B 192.168.1.212 [20/0] via 192.168.1.206, 00:13:35
B 192.168.100.0/24 [20/0] via 192.168.1.206, 00:13:04
B 192.168.192.0/21 [20/0] via 192.168.1.206, 00:13:04
九、配置樣例2
下面的示例中涉及到聚合路由內容,並將聚合路由使用community、router-map及prefix-list等功能實現過濾精細路由,拓撲圖如下所示。
具體配置如下:
R1#sh running-config
!
hostname R1
!
interface Loopback0
ip address 192.168.192.1 255.255.255.0
!
interface Loopback1
ip address 192.168.193.1 255.255.255.0
!
interface Loopback2
ip address 192.168.194.1 255.255.255.0
!
interface Loopback3
ip address 192.168.195.1 255.255.255.0
!
interface Loopback4
ip address 192.168.196.1 255.255.255.0
!
interface Loopback5
ip address 192.168.197.1 255.255.255.0
!
interface Loopback6
ip address 192.168.198.1 255.255.255.0
!
interface Loopback7
ip address 192.168.199.1 255.255.255.0
!
interface Ethernet1/0
ip address 10.1.1.1 255.255.255.0
duplex half
!
interface Ethernet1/1
ip address 10.1.6.1 255.255.255.0
duplex half
!
router ospf 10
log-adjacency-changes
network 10.1.1.0 0.0.0.255 area 0
network 10.1.6.0 0.0.0.255 area 0
network 192.168.192.0 0.0.0.255 area 0
network 192.168.193.0 0.0.0.255 area 0
network 192.168.194.0 0.0.0.255 area 0
network 192.168.195.0 0.0.0.255 area 0
network 192.168.196.0 0.0.0.255 area 0
network 192.168.197.0 0.0.0.255 area 0
network 192.168.198.0 0.0.0.255 area 0
network 192.168.199.0 0.0.0.255 area 0
-------------------------------------------------------------------------------------------------------------------------
R2#sh running-config
interface Ethernet1/0
ip address 10.1.1.2 255.255.255.0
duplex half
!
interface Serial2/0
ip address 10.1.2.1 255.255.255.0
serial restart-delay 0
!
router ospf 10
log-adjacency-changes
network 10.1.1.0 0.0.0.255 area 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
aggregate-address 192.168.192.0 255.255.248.0
redistribute ospf 10 metric 50
neighbor 10.1.2.2 remote-as 200
neighbor 10.1.2.2 send-community
neighbor 10.1.2.2 route-map community out
neighbor 10.1.6.2 remote-as 100
no auto-summary
!
access-list 110 permit ip host 192.168.192.0 host 255.255.248.0
!
route-map community permit 10
match ip address 110
set community none
!
route-map community permit 20
set community no-export
!
-------------------------------------------------------------------------------------------------------------------------
R3#sh running-config
interface Ethernet1/0
ip address 10.1.7.1 255.255.255.0
duplex half
!
interface Serial2/0
ip address 10.1.2.2 255.255.255.0
serial restart-delay 0
!
interface Serial2/1
ip address 10.1.3.1 255.255.255.0
serial restart-delay 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 10.1.2.1 remote-as 100
neighbor 10.1.3.2 remote-as 300
neighbor 10.1.7.2 remote-as 200
no auto-summary
!
-------------------------------------------------------------------------------------------------------------------------
R4#sh running-config
interface Serial2/0
ip address 10.1.3.2 255.255.255.0
serial restart-delay 0
!
interface Serial2/1
ip address 10.1.4.1 255.255.255.0
serial restart-delay 0
!
router bgp 300
no synchronization
bgp log-neighbor-changes
neighbor 10.1.3.1 remote-as 200
neighbor 10.1.4.2 remote-as 200
no auto-summary
!
-------------------------------------------------------------------------------------------------------------------------
R5#sh running-config
interface Ethernet1/0
ip address 10.1.7.2 255.255.255.0
duplex half
!
interface Serial2/0
ip address 10.1.4.2 255.255.255.0
serial restart-delay 0
!
interface Serial2/1
ip address 10.1.5.1 255.255.255.0
serial restart-delay 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 10.1.4.1 remote-as 300
neighbor 10.1.5.2 remote-as 100
neighbor 10.1.7.1 remote-as 200
no auto-summary
!
-------------------------------------------------------------------------------------------------------------------------
R6#sh running-config
interface Ethernet1/0
ip address 10.1.6.2 255.255.255.0
duplex half
!
interface Serial2/0
ip address 10.1.5.2 255.255.255.0
serial restart-delay 0
!
!
router ospf 10
log-adjacency-changes
network 10.1.6.0 0.0.0.255 area 0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
aggregate-address 192.168.192.0 255.255.248.0
redistribute ospf 10 metric 50
neighbor 10.1.1.2 remote-as 100
neighbor 10.1.5.1 remote-as 200
neighbor 10.1.5.1 send-community
neighbor 10.1.5.1 route-map community out
no auto-summary
!
!
ip prefix-list aggregate seq 5 permit 192.168.192.0/21
!
route-map community permit 10
match ip address prefix-list aggregate
set community none
!
route-map community permit 20
set community no-export
!
配置完成以后,可以查看聚合路由表。
R4#sh ip bgp
BGP table version is 32, local router ID is 10.1.4.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* 192.168.192.0/21 10.1.4.2 0 200 100 i
*> 10.1.3.1 0 200 100 i
R3#sh ip bgp
BGP table version is 22, local router ID is 10.1.7.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i10.1.1.0/24 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 0 0 100 ?
* i10.1.6.0/24 10.1.5.2 0 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.192.0/21 10.1.5.2 0 100 0 100 i
*> 10.1.2.1 0 0 100 i
* i192.168.192.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.193.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.194.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.195.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.196.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.197.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.198.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.199.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
R5#sh ip bgp
BGP table version is 33, local router ID is 10.1.7.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i10.1.1.0/24 10.1.2.1 0 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i10.1.6.0/24 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 0 0 100 ?
*> 192.168.192.0/21 10.1.5.2 0 0 100 i
* i 10.1.2.1 0 100 0 100 i
* i192.168.192.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.193.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.194.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.195.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.196.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.197.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.198.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
* i192.168.199.1/32 10.1.2.1 50 100 0 100 ?
*> 10.1.5.2 50 0 100 ?
使用下面的命令查看攜帶NO-EPORT COMMUNITY屬性的路由情況
R3#sh ip bgp community no-export
BGP table version is 22, local router ID is 10.1.7.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.1.1.0/24 10.1.2.1 0 0 100 ?
*> 10.1.6.0/24 10.1.2.1 50 0 100 ?
*> 192.168.192.1/32 10.1.2.1 50 0 100 ?
*> 192.168.193.1/32 10.1.2.1 50 0 100 ?
*> 192.168.194.1/32 10.1.2.1 50 0 100 ?
*> 192.168.195.1/32 10.1.2.1 50 0 100 ?
*> 192.168.196.1/32 10.1.2.1 50 0 100 ?
*> 192.168.197.1/32 10.1.2.1 50 0 100 ?
*> 192.168.198.1/32 10.1.2.1 50 0 100 ?
*> 192.168.199.1/32 10.1.2.1 50 0 100 ?
R5#sh ip bgp community no-export
BGP table version is 33, local router ID is 10.1.7.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.1.1.0/24 10.1.5.2 50 0 100 ?
*> 10.1.6.0/24 10.1.5.2 0 0 100 ?
*> 192.168.192.1/32 10.1.5.2 50 0 100 ?
*> 192.168.193.1/32 10.1.5.2 50 0 100 ?
*> 192.168.194.1/32 10.1.5.2 50 0 100 ?
*> 192.168.195.1/32 10.1.5.2 50 0 100 ?
*> 192.168.196.1/32 10.1.5.2 50 0 100 ?
*> 192.168.197.1/32 10.1.5.2 50 0 100 ?
*> 192.168.198.1/32 10.1.5.2 50 0 100 ?
*> 192.168.199.1/32 10.1.5.2 50 0 100 ?
也可以在上面配置的基礎上實現如下策略:
? 通過R2-R3鏈路來宣告192.168.192.0/24、192.168.193.0/24、192.168.194.0/24
? 通過R6-R5鏈路來宣告192.168.196.0/24、192.168.197.0/24、192.168.198.0/24
? 不宣告192.168.195.0/24、192.168.199.0/24
具體配置如下:
R2#sh running-config
router bgp 100
no synchronization
bgp log-neighbor-changes
aggregate-address 192.168.192.0 255.255.248.0 suppress-map suppress
!
access-list 1 permit 192.168.195.0 0.0.0.255
access-list 1 permit 192.168.196.0 0.0.3.255
!
route-map suppress permit 10
match ip address 1
R6#sh running-config
router bgp 100
no synchronization
bgp log-neighbor-changes
aggregate-address 192.168.192.0 255.255.248.0 suppress-map suppress
!
ip prefix-list suppress seq 5 permit 192.168.192.0/22 le 24
ip prefix-list suppress seq 10 permit 192.168.199.0/24
!
route-map suppress permit 10
match ip address prefix-list suppress
使用命令查看路由狀態
R3#sh ip bgp
BGP table version is 39, local router ID is 10.1.7.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
* i10.1.1.0/24 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 0 0 100 ?
* i10.1.6.0/24 10.1.5.2 0 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.192.0/21 10.1.5.2 0 100 0 100 i
*> 10.1.2.1 0 0 100 i
* i192.168.192.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.193.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.194.1/32 10.1.5.2 50 100 0 100 ?
*> 10.1.2.1 50 0 100 ?
* i192.168.195.1/32 10.1.5.2 50 100 0 100 ?
* i192.168.196.1/32 10.1.5.2 50 100 0 100 ?
* i192.168.197.1/32 10.1.5.2 50 100 0 100 ?
* i192.168.198.1/32 10.1.5.2 50 100 0 100 ?
* i192.168.199.1/32 10.1.5.2 50 100 0 100 ?
R5#sh ip bgp
BGP table version is 62, local router ID is 10.1.7.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 10.1.1.0/24 10.1.5.2 50 0 100 ?
* i 10.1.2.1 0 100 0 100 ?
*> 10.1.6.0/24 10.1.5.2 0 0 100 ?
* i 10.1.2.1 50 100 0 100 ?
*> 192.168.192.0/21 10.1.5.2 0 0 100 i
* i 10.1.2.1 0 100 0 100 i
*> 192.168.192.1/32 10.1.5.2 50 0 100 ?
* i 10.1.2.1 50 100 0 100 ?
*> 192.168.193.1/32 10.1.5.2 50 0 100 ?
* i 10.1.2.1 50 100 0 100 ?
*> 192.168.194.1/32 10.1.5.2 50 0 100 ?
* i 10.1.2.1 50 100 0 100 ?
*> 192.168.195.1/32 10.1.5.2 50 0 100 ?
*> 192.168.196.1/32 10.1.5.2 50 0 100 ?
*> 192.168.197.1/32 10.1.5.2 50 0 100 ?
*> 192.168.198.1/32 10.1.5.2 50 0 100 ?
*> 192.168.199.1/32 10.1.5.2 50 0 100 ?
