06-BGP配置
本章節下載: 06-BGP配置 (1010.42 KB)
目 錄
![]()
在以下路由協議的介紹中所指的路由器及路由器圖標,代表了一般意義下的路由器以及運行了路由協議的以太網交換機。
BGP(Border Gateway Protocol,邊界網關協議)是一種用於AS(Autonomous System,自治係統)之間的動態路由協議。AS是擁有同一選路策略,在同一技術管理部門下運行的一組路由器。
早期發布的三個版本分別是BGP-1(RFC 1105)、BGP-2(RFC 1163)和BGP-3(RFC 1267),當前使用的版本是BGP-4(RFC 1771,已更新至RFC 4271)。BGP-4做為事實上的Internet外部路由協議標準,被廣泛應用於ISP(Internet Service Provider,互聯網服務提供商)之間。
![]()
下文中若不做特殊說明,所指的BGP均為BGP-4。
BGP特性描述如下:
l BGP是一種外部網關協議(Exterior Gateway Protocol,EGP),與OSPF、RIP等內部網關協議(Interior Gateway Protocol,IGP)不同,其著眼點不在於發現和計算路由,而在於控製路由的傳播和選擇最佳路由。
l BGP使用TCP作為其傳輸層協議(端口號179),提高了協議的可靠性。
l BGP支持CIDR(Classless Inter-Domain Routing,無類域間路由)。
l 路由更新時,BGP隻發送更新的路由,大大減少了BGP傳播路由所占用的帶寬,適用於在Internet上傳播大量的路由信息。
l BGP路由通過攜帶AS路徑信息徹底解決路由環路問題。
l BGP提供了豐富的路由策略,能夠對路由實現靈活的過濾和選擇。
l BGP易於擴展,能夠適應網絡新的發展。
發送BGP消息的路由器稱為BGP發言者(BGP Speaker),它接收或產生新的路由信息,並發布(Advertise)給其它BGP發言者。當BGP發言者收到來自其它自治係統的新路由時,如果該路由比當前已知路由更優、或者當前還沒有該路由,它就把這條路由發布給自治係統內所有其它BGP發言者。
相互交換消息的BGP發言者之間互稱對等體(Peer),若幹相關的對等體可以構成對等體組(Peer group)。
BGP在路由器上以下列兩種方式運行:
l IBGP(Internal BGP):當BGP運行於同一自治係統內部時,被稱為IBGP;
l EBGP(External BGP):當BGP運行於不同自治係統之間時,稱為EBGP。
BGP有5種消息類型:Open、Update、Notification、Keepalive和Route-refresh。這些消息有相同的報文頭,其格式如圖1-1所示。
圖1-1 BGP消息的報文頭格式

主要字段的解釋如下:
l Marker:16字節,用於標明BGP報文邊界,所有比特均為“1”。
l Length:2字節,BGP消息總長度(包括報文頭在內),以字節為單位。
l Type:1字節,BGP消息的類型。其取值從1到5,分別表示Open、Update、Notification、Keepalive和Route-refresh消息。其中,前四種消息是在RFC 1771中定義,而Type為5的消息則是在RFC 2918中定義的。
Open消息是TCP連接建立後發送的第一個消息,用於建立BGP對等體之間的連接關係。其消息格式如圖1-2所示。
圖1-2 BGP Open消息格式

主要字段的解釋如下:
l Version:BGP的版本號。對於BGP-4來說,其值為4。
l My autonomous system:本地AS號。通過比較兩端的AS號可以確定是EBGP連接還是IBGP連接。
l Hold time:保持時間。在建立對等體關係時兩端要協商Hold Time,並保持一致。如果在這個時間內未收到對端發來的Keepalive消息或Update消息,則認為BGP連接中斷。
l BGP identifier:BGP標識符。以IP地址的形式表示,用來識別BGP路由器。
l Opt Parm Len(Optional Parameters Length):可選參數的長度。如果為0則沒有可選參數。
l Optional parameters:可選參數。用於多協議擴展(Multiprotocol Extensions)等功能。
Update消息用於在對等體之間交換路由信息。它既可以發布可達路由信息,也可以撤銷不可達路由信息。其消息格式如圖1-3所示。
圖1-3 BGP Update消息格式

一條Update報文可以通告一類具有相同路徑屬性的可達路由,這些路由放在NLRI(Network Layer Reachability Information,網絡層可達性信息)字段中,Path Attributes字段攜帶了這些路由的屬性,BGP根據這些屬性進行路由的選擇;同時Update報文還可以攜帶多條不可達路由,被撤銷的路由放在Withdrawn Routes字段中。
主要字段的解釋如下:
l Unfeasible routes length:不可達路由字段的長度,以字節為單位。如果為0則說明沒有Withdrawn Routes字段。
l Withdrawn routes:不可達路由的列表。
l Total path attribute length:路徑屬性字段的長度,以字節為單位。如果為0則說明沒有Path Attributes字段。
l Path attributes:與NLRI相關的所有路徑屬性列表,每個路徑屬性由一個TLV(Type-Length-Value)三元組構成。BGP正是根據這些屬性值來避免環路,進行選路,協議擴展等。
l NLRI:可達路由的前綴和前綴長度二元組。
當BGP檢測到錯誤狀態時,就向對等體發出Notification消息,之後BGP連接會立即中斷。其消息格式如圖1-4所示。

主要字段的解釋如下:
l Error code:差錯碼,指定錯誤類型。
l Error subcode:差錯子碼,錯誤類型的詳細信息。
l Data:用於輔助發現錯誤的原因,它的內容依賴於具體的差錯碼和差錯子碼,記錄的是出錯部分的數據,長度不固定。
BGP會周期性地向對等體發出Keepalive消息,用來保持連接的有效性。其消息格式中隻包含報文頭,沒有附加其他任何字段。
Route-refresh消息用來要求對等體重新發送指定地址族的路由信息。其消息格式如圖1-5所示。
![]()
主要的字段解釋如下:
l AFI:Address Family Identifier,地址族標識。
l Res.:保留,必須置0。
l SAFI:Subsequent Address Family Identifier,子地址族標識。
BGP路由屬性是跟隨路由一起發送出去的一組參數,封裝在Update報文的Path attributes字段中。它對特定的路由進行了進一步的描述,使得路由接收者能夠根據路由屬性值對路由進行過濾和選擇。
事實上,所有的BGP路由屬性都可以分為以下四類:
l 公認必須遵循(Well-known mandatory):所有BGP路由器都必須能夠識別這種屬性,且必須存在於Update消息中。如果缺少這種屬性,路由信息就會出錯。
l 公認可選(Well-known discretionary):所有BGP路由器都可以識別,但不要求必須存在於Update消息中,可以根據具體情況來選擇。
l 可選過渡(Optional transitive):在AS之間具有可傳遞性的屬性。BGP路由器可以不支持此屬性,但它仍然會接收帶有此屬性的路由,並通告給其他對等體。
l 可選非過渡(Optional non-transitive):如果BGP路由器不支持此屬性,該屬性被忽略,且不會通告給其他對等體。
BGP路由幾種基本屬性和對應的類別如表1-1所示。
表1-1 路由屬性和類別
|
屬性名稱 |
類別 |
|
ORIGIN |
公認必須遵循 |
|
AS_PATH |
公認必須遵循 |
|
NEXT_HOP |
公認必須遵循 |
|
LOCAL_PREF |
公認可選 |
|
ATOMIC_AGGREGATE |
公認可選 |
|
AGGREGATOR |
可選過渡 |
|
COMMUNITY |
可選過渡 |
|
MULTI_EXIT_DISC (MED) |
可選非過渡 |
|
ORIGINATOR_ID |
可選非過渡 |
|
CLUSTER_LIST |
可選非過渡 |
(1) 源(ORIGIN)屬性
ORIGIN屬性定義路由信息的來源,標記一條路由是怎麼成為BGP路由的。它有以下三種類型:
l IGP:優先級最高,說明路由產生於本AS內。
l EGP:優先級次之,說明路由通過EGP學到。
l incomplete:優先級最低,它並不是說明路由不可達,而是表示路由的來源無法確定。例如,引入的其它路由協議的路由信息。
(2) AS路徑(AS_PATH)屬性
AS_PATH屬性按一定次序記錄了某條路由從本地到目的地址所要經過的所有AS號。當BGP將一條路由通告到其他AS時,便會把本地AS號添加在AS_PATH列表的最前麵。收到此路由的BGP路由器根據AS_PATH屬性就可以知道去目的地址所要經過的AS。離本地AS最近的相鄰AS號排在前麵,其他AS號按順序依次排列。如圖1-6所示。

通常情況下,BGP不會接受AS_PATH中已包含本地AS號的路由,從而避免了形成路由環路的可能。
![]()
在目前的實現中,根據某些特殊的具體應用需求,可以通過配置peer allow-as-loop命令允許AS號重複。
同時,AS_PATH屬性也可用於路由的選擇和過濾。在其他因素相同的情況下,BGP會優先選擇路徑較短的路由。比如在上圖中,AS 50中的BGP路由器會選擇經過AS 40的路徑作為到目的地址8.0.0.0的最優路由。
在某些應用中,可以使用路由策略來人為地增加AS路徑的長度,以便更為靈活地控製BGP路徑的選擇。
通過配置AS路徑過濾列表,還可以針對AS_PATH屬性中所包含的AS號來對路由進行過濾。
(3) 下一跳(NEXT_HOP)屬性
BGP的下一跳屬性和IGP的有所不同,不一定就是鄰居路由器的IP地址。
下一跳屬性取值情況分為三種,如圖1-7所示。
l BGP發言者把自己產生的路由發給所有鄰居時,將把該路由信息的下一跳屬性設置為自己與對端連接的接口地址;
l BGP發言者把接收到的路由發送給EBGP對等體時,將把該路由信息的下一跳屬性設置為本地與對端連接的接口地址;
l BGP發言者把從EBGP鄰居得到的路由發給IBGP鄰居時,並不改變該路由信息的下一跳屬性。如果配置了負載分擔,等價路由被發給IBGP鄰居時則會修改下一跳屬性。關於“負載分擔”的概念請參見“1.1.4 BGP的選路規則”。

(4) MED(MULTI_EXIT_DISC)
MED屬性僅在相鄰兩個AS之間交換,收到此屬性的AS一方不會再將其通告給任何其他第三方AS。
MED屬性相當於IGP使用的度量值(metrics),它用於判斷流量進入AS時的最佳路由。當一個運行BGP的路由器通過不同的EBGP對等體得到目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇MED值較小者作為最佳路由。如圖1-8所示,從AS 10到AS 20的流量將選擇Router B作為入口。
圖1-8 MED屬性

通常情況下,BGP隻比較來自同一個AS的路由的MED屬性值。
![]()
在目前的實現中,通過配置compare-different-as-med命令,可以強製BGP比較來自不同AS的路由的MED屬性值。
(5) 本地優先(LOCAL_PREF)屬性
LOCAL_PREF屬性僅在IBGP對等體之間交換,不通告給其他AS。它表明BGP路由器的優先級。
LOCAL_PREF屬性用於判斷流量離開AS時的最佳路由。當BGP的路由器通過不同的IBGP對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇LOCAL_PREF屬性值較高的路由。如圖1-9所示,從AS 20到AS 10的流量將選擇Router C作為出口。

(6) 團體(COMMUNITY)屬性
團體屬性也是跟隨路由一起發送出去的一組特殊數據。根據需要,一條路由可以攜帶一個或多個團體屬性值(每個團體屬性值用一個四字節的整數表示)。接收到該路由的路由器就可以根據團體屬性值對路由作出適當的處理(比如決定是否發布該路由、在什麼範圍發布等),從而能夠簡化路由策略的應用和降低維護管理的難度。
公認的團體屬性有:
l INTERNET:缺省情況下,所有的路由都屬於INTERNET團體。具有此屬性的路由可以被通告給所有的BGP對等體。
l NO_EXPORT:具有此屬性的路由在收到後,不能被發布到本地AS之外。如果使用了聯盟,則不能被發布到聯盟之外,但可以發布給聯盟中的其他子AS(關於聯盟的定義請參見“1.1.6 大規模BGP網絡所遇到的問題”)。
l NO_ADVERTISE:具有此屬性的路由被接收後,不能被通告給任何其他的BGP對等體。
l NO_EXPORT_SUBCONFED:具有此屬性的路由被接收後,不能被發布到本地AS之外,也不能發布到聯盟中的其他子AS。
在目前的實現中,BGP選擇路由時采取如下策略:
(1) 首先丟棄下一跳(NEXT_HOP)不可達的路由;
(2) 優選Preferred-value值最大的路由;
(3) 優選本地優先級(LOCAL_PREF)最高的路由;
(4) 優選聚合路由;
(5) 優選AS路徑(AS_PATH)最短的路由;
(6) 依次選擇ORIGIN類型為IGP、EGP、Incomplete的路由;
(7) 優選MED值最低的路由;
(8) 依次選擇從EBGP、聯盟、IBGP學來的路由;
(9) 優選下一跳Cost值最低的路由;
(10) 優選CLUSTER_LIST長度最短的路由;
(11) 優選ORIGINATOR_ID最小的路由;
(13) 優選地址最小的對等體發布的路由。
![]()
l CLUSTER_ID為路由反射器的集群ID,CLUSTER_LIST由CLUSTER_ID序列組成,反射器將自己的CLUSTER_ID加入CLUSTER_LIST中,若反射器收到路由中CLUSTER_LIST中包含有自己的CLUSTER_ID,則丟棄該路由,從而避免群內環路的發生。
l 如果配置了負載分擔,並且有多條到達同一目的地的路由,則根據配置的路由條數選擇多條路由進行負載分擔。
在BGP中,由於協議本身的特殊性,它產生的路由的下一跳地址可能不是當前路由器直接相連的鄰居。常見的一個原因是:IBGP之間發布路由信息時不改變下一跳。這種情況下,為了能夠將報文正確轉發出去,路由器必須先找到一個直接可達的地址(查找IGP建立的路由表項),通過這個地址到達路由表中指示的下一跳。在上述過程中,去往直接可達地址的路由被稱為依賴路由,BGP路由依賴於這些路由指導報文轉發。根據下一跳地址找到依賴路由的過程就是路由迭代(recursion)。
目前係統支持基於迭代的BGP負載分擔,即如果依賴路由本身是負載分擔的(假設有三個下一跳地址),則BGP也會生成相同數量的下一跳地址來指導報文轉發。需要說明的是,基於迭代的BGP負載分擔並不需要命令配置,這一特性在係統上始終啟用。
在實現方法上,BGP的負載分擔與IGP的負載分擔有所不同:
l IGP是通過協議定義的路由算法,對到達同一目的地址的不同路由,根據計算結果,將度量值(metric)相等的(如RIP、OSPF)路由進行負載分擔,選擇的標準很明確(按metric)。
l BGP本身並沒有路由計算的算法,它隻是一個選路的路由協議,因此,不能根據一個明確的度量值決定是否對路由進行負載分擔,但BGP有豐富的選路規則,可以在對路由進行一定的選擇後,有條件地進行負載分擔,也就是將負載分擔加入到BGP的選路規則中去。
![]()
l BGP隻對AS_PATH屬性、ORIGIN屬性、LOCAL_PREF和MED值完全相同的路由進行負載分擔。
l BGP負載分擔特性適用於EBGP、IBGP以及聯盟之間。
l 如果有多條到達同一目的地的路由,則根據配置的路由條數選擇多條路由進行負載分擔。
圖1-10 BGP負載分擔示意圖

在圖1-10中,Router D和Router E是Router C的IBGP對等體。當Router A和Router B同時向Router C通告到達同一目的地的路由時,如果用戶在Router C配置了負載分擔(如balance 2),則當滿足一定的選路規則後,並且兩條路由具有相同的AS_PATH屬性、ORIGIN屬性、LOCAL_PREF和MED值時,Router C就把接收的兩條路由同時加入到轉發表中,實現BGP路由的負載分擔。Router C隻向Router D和Router E轉發一次該路由,AS_PATH不變,但NEXT_HOP屬性改變為Router C的地址,而不是原來的EBGP對等體地址。其它的BGP過渡屬性將按最佳路由的屬性傳遞。
在目前的實現中,BGP發布路由時采用如下策略:
l 存在多條有效路由時,BGP發言者隻將最優路由發布給對等體;
l BGP發言者隻把自己使用的路由發布給對等體;
l BGP發言者從EBGP獲得的路由會向它所有BGP對等體發布(包括EBGP對等體和IBGP對等體);
l BGP發言者從IBGP獲得的路由不向它的IBGP對等體發布;
l BGP發言者從IBGP獲得的路由發布給它的EBGP對等體(關閉BGP與IGP同步的情況下,IBGP路由被直接發布;開啟BGP與IGP同步的情況下,該IBGP路由隻有在IGP也發布了這條路由時才會被同步並發布給EBGP對等體);
l 連接一旦建立,BGP發言者將把自己所有的BGP路由發布給新對等體。
同步是指IBGP和IGP之間的同步,其目的是為了避免出現誤導外部AS路由器的現象發生。
如果一個AS中有非BGP路由器提供轉發服務,經該AS轉發的IP報文將可能因為目的地址不可達而被丟棄。如圖1-11所示,Router E通過BGP從Router D可以學到Router A的一條路由8.0.0.0/8,於是將到這個目的地址的報文轉發給Router D,Router D查詢路由表,發現下一跳是Router B(通過peer next-hop-local命令手動設置)。由於Router D從IGP學到了到Router B的路由,所以通過路由迭代,Router D將報文轉發給Router C。但Router C並不知道去8.0.0.0/8的路由,於是將報文丟棄。
圖1-11 IBGP和IGP同步

如果設置了同步特性,在IBGP路由加入路由表並發布給EBGP對等體之前,會先檢查IGP路由表。隻有在IGP也知道這條IBGP路由時,它才會被發布給EBGP對等體。
在下麵的情況中,可以關閉同步特性。
l 本AS不是過渡AS(上圖中的AS 20就屬於一個過渡AS)
l 本AS內所有路由器建立IBGP全連接
在大規模的網絡中,BGP路由表十分龐大,使用路由聚合(Routes Aggregation)可以大大減小路由表的規模。
路由聚合實際上是將多條路由合並的過程。這樣BGP在向對等體通告路由時,可以隻通告聚合後的路由,而不是將所有的具體路由都通告出去。
目前係統支持自動聚合和手動聚合方式。使用後者還可以控製聚合路由的屬性,以及決定是否發布具體路由。
BGP路由衰減(Route Dampening)用來解決路由不穩定的問題。路由不穩定的主要表現形式是路由振蕩(Route flaps),即路由表中的某條路由反複消失和重現。
發生路由振蕩時,路由協議就會向鄰居發布路由更新,收到更新報文的路由器需要重新計算路由並修改路由表。所以頻繁的路由振蕩會消耗大量的帶寬資源和CPU資源,嚴重時會影響到網絡的正常工作。
在多數情況下,BGP協議都應用於複雜的網絡環境中,路由變化十分頻繁。為了防止持續的路由振蕩帶來的不利影響,BGP使用衰減來抑製不穩定的路由。
BGP衰減使用懲罰值來衡量一條路由的穩定性,懲罰值越高則說明路由越不穩定。路由每發生一次振蕩(路由從激活狀態變為未激活狀態,稱為一次路由振蕩),BGP便會給此路由增加一定的懲罰值(1000,此數值為係統固定,不可修改)。當懲罰值超過抑製閾值時,此路由被抑製,不加入到路由表中,也不再向其他BGP對等體發布更新報文。
被抑製的路由每經過一段時間,懲罰值便會減少一半,這個時間稱為半衰期(Half-life)。當懲罰值降到再使用閾值時,此路由變為可用並被加入到路由表中,同時向其他BGP對等體發布更新報文。
圖1-12 BGP衰減示意圖

對等體組(Peer Group)是一些具有某些相同屬性的對等體的集合。當一個對等體加入對等體組中時,此對等體將獲得與所在對等體組相同的配置。當對等體組的配置改變時,組內成員的配置也相應改變。
在大型BGP網絡中,對等體的數量會很多,其中很多對等體具有相同的策略,在配置時會重複使用一些命令,利用對等體組在很多情況下可以簡化配置。
將對等體加入對等體組中,對等體與對等體組具有相同的路由更新策略,提高了路由發布效率。
![]()
如果對等體和對等體組都對某個選項做了配置,配置以最後一次的修改為準。
對等體組可以使一組對等體共享相同的策略,而利用團體可以使多個AS中的一組BGP路由器共享相同的策略。團體是一個路由屬性,在BGP對等體之間傳播,它並不受到AS範圍的限製。
BGP路由器在將帶有團體屬性的路由發布給其它對等體之前,可以改變此路由原有的團體屬性。
除了使用公認的團體屬性外,用戶還可以使用團體屬性列表自定義擴展團體屬性,以便更為靈活地控製路由策略。
為保證IBGP對等體之間的連通性,需要在IBGP對等體之間建立全連接關係。假設在一個AS內部有n台路由器,那麼應該建立的IBGP連接數就為n(n-1)/2。當IBGP對等體數目很多時,對網絡資源和CPU資源的消耗都很大。
利用路由反射可以解決這一問題。在一個AS內,其中一台路由器作為路由反射器RR(Route Reflector),其它路由器做為客戶機(Client)與路由反射器之間建立IBGP連接。路由反射器在客戶機之間傳遞(反射)路由信息,而客戶機之間不需要建立BGP連接。
既不是反射器也不是客戶機的BGP路由器被稱為非客戶機(Non-Client)。非客戶機與路由反射器之間,以及所有的非客戶機之間仍然必須建立全連接關係。其示意圖如圖1-13所示。

路由反射器和它的客戶機組成了一個集群(Cluster)。某些情況下,為了增加網絡的可靠性和防止單點故障,可以在一個集群中配置一個以上的路由反射器。這時,位於相同集群中的每個路由反射器都要配置相同的Cluster_ID,以避免路由循環。如圖1-14所示。

在某些網絡中,路由反射器的客戶機之間已經建立了全連接,它們可以直接交換路由信息,此時客戶機到客戶機之間的路由反射是沒有必要的,而且還占用帶寬資源。目前,係統支持配置相關命令來禁止在客戶機之間反射路由。
![]()
禁止客戶機之間的路由反射後,客戶機到非客戶機之間的路由仍然可以被反射。
聯盟(Confederation)是處理AS內部的IBGP網絡連接激增的另一種方法,它將一個自治係統劃分為若幹個子自治係統,每個子自治係統內部的IBGP對等體建立全連接關係,子自治係統之間建立聯盟內部EBGP連接關係。其示意圖如圖1-15所示。

在不屬於聯盟的BGP發言者看來,屬於同一個聯盟的多個子自治係統是一個整體,外界不需要了解內部的子自治係統情況,聯盟ID就是標識聯盟這一整體的自治係統號,如上圖中的AS 200就是聯盟ID。
聯盟的缺陷是:從非聯盟方案向聯盟方案轉變時,要求路由器重新進行配置,邏輯拓撲也要改變。
在大型BGP網絡中,路由反射器和聯盟可以被同時使用。
GR是一種在協議重啟或主備切換時保證轉發業務不中斷的機製。GR有兩個角色:
l GR Restarter:發生協議重啟或主備倒換事件且具有GR能力的設備。
l GR Helper:和GR Restarter具有鄰居關係,協助完成GR流程的設備。
基於BGP的GR Restarter為了與BGP對等體建立一個BGP會話連接,首先要發送一個包含了GR能力的OPEN消息到對端,BGP對等體收到該消息後,得知發送方已具有GR能力。這樣,通過OPEN消息交互GR能力,GR Restarter與其BGP對等體之間協商建立起GR Session連接。如果雙方都沒有交換GR能力的信息,建立起的會話也就不具備GR能力。
對於分布式設備,當進行主備倒換時,會話項將丟失,此時具備GR感知能力的BGP對等體會將所有與該GR Restarter有關的路由進行失效標記。但在GR Time內仍按照這些路由進行報文轉發,這樣確保了在從BGP對等體重新收集路由信息的過程中沒有報文丟失。
對於分布式設備,主備倒換完成後,GR Restarter會重新與BGP對等體建立GR Session連接,同時發送新的GR消息以宣告其重啟完畢。此時兩個BGP對等體間進行路由信息交換。交換完成後,GR Restarter根據新的路由轉發信息更新路由表和轉發表,刪除失效的路由,完成BGP協議收斂。
傳統的BGP-4隻能管理IPv4單播的路由信息,對於使用其它網絡層協議(如IPv6等)的應用,在跨自治係統傳播時就受到一定限製。
為了提供對多種網絡層協議的支持,IETF對BGP-4進行了擴展,形成MP-BGP,目前的MP-BGP標準是RFC 4760(Multiprotocol Extensions for BGP-4,BGP-4的多協議擴展)。
支持BGP擴展的路由器與不支持BGP擴展的路由器可以互通。
BGP-4使用的報文中,與IPv4地址格式相關的三條信息都由Update報文攜帶,這三條信息分別是:NLRI、路徑屬性中的NEXT_HOP、路徑屬性中的AGGREGATOR(該屬性中包含形成聚合路由的BGP發言者的IP地址)。
為實現對多種網絡層協議的支持,BGP-4需要將網絡層協議的信息反映到NLRI及NEXT_HOP。MP-BGP中引入了兩個新的路徑屬性:
l MP_REACH_NLRI:Multiprotocol Reachable NLRI,多協議可達NLRI。用於發布可達路由及下一跳信息。
l MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多協議不可達NLRI。用於撤銷不可達路由。
這兩種屬性都是可選非過渡(Optional non-transitive)的,因此,不提供多協議能力的BGP發言者將忽略這兩個屬性的信息,不把它們傳遞給其它鄰居。
MP-BGP采用地址族(Address Family)來區分不同的網絡層協議,關於地址族的一些取值可以參考RFC 1700(Assigned Numbers)。目前,係統實現了多種MP-BGP擴展應用,包括對VPN的擴展、對IPv6的擴展等,不同的擴展應用在各自的地址族視圖下配置。
![]()
l 有關VPN的擴展應用,請參見“MPLS配置指導”中的“MPLS L3VPN”。
l 有關IPv6的擴展應用,請參見“三層技術-IP路由配置指導”中的“IPv6 BGP”。
l 本章不對MP-BGP地址族視圖下的、與特定應用相關的命令作詳細介紹。
與BGP相關的協議規範有:
l RFC 1771:A Border Gateway Protocol 4 (BGP-4)
l RFC 2858:Multiprotocol Extensions for BGP-4
l RFC 3392:Capabilities Advertisement with BGP-4
l RFC 2918:Route Refresh Capability for BGP-4
l RFC 2439:BGP Route Flap Damping
l RFC 1997:BGP Communities Attribute
l RFC 2796:BGP Route Reflection
l RFC 3065:Autonomous System Confederations for BGP
l RFC 4271,A Border Gateway Protocol 4 (BGP-4)
l RFC 5291,Outbound Route Filtering Capability for BGP-4
l RFC 5292,Address-Prefix-Based Outbound Route Filter for BGP-4
l draft-ietf-idr-restart-08:Graceful Restart Mechanism for BGP
表1-2 BGP配置任務簡介
|
配置任務 |
說明 |
詳細配置 |
|
|
配置BGP連接 |
創建BGP連接 |
必選 |
|
|
配置建立TCP連接使用的源接口 |
可選 |
||
|
配置允許同非直連鄰居建立EBGP連接 |
可選 |
||
|
控製路由信息的生成 |
配置BGP發布本地路由 |
二者至少選其一 |
|
|
配置BGP引入其它路由 |
|||
|
配置BGP引入其它協議缺省路由 |
可選 |
||
|
控製路由信息的發布與接收 |
配置BGP路由聚合 |
可選 |
|
|
配置向對等體/對等體組發送缺省路由 |
|||
|
配置BGP路由信息的發布/接收策略 |
|||
|
配置BGP與IGP路由同步 |
|||
|
限製從BGP對等體/對等體組接收的路由前綴數量 |
|||
|
配置BGP路由衰減 |
|||
|
配置shortcut路由 |
|||
|
配置BGP的路由屬性 |
為接收路由分配首選值 |
可選 |
|
|
配置BGP的路由優先級 |
|||
|
配置Local-Preference缺省值 |
|||
|
配置MED屬性 |
|||
|
配置下一跳屬性 |
|||
|
配置AS_PATH屬性 |
|||
|
調整和優化BGP網絡 |
配置BGP存活時間間隔與保持時間 |
可選 |
|
|
配置發送路由更新報文的時間間隔 |
|||
|
配置BGP軟複位 |
|||
|
配置BGP ORF能力 |
|||
|
使能4字節AS號抑製功能 |
|||
|
使能EBGP連接快速複位功能 |
|||
|
配置BGP建立TCP連接時進行MD5認證 |
|||
|
配置BGP負載分擔 |
|||
|
禁止與對等體/對等體組建立會話 |
|||
|
配置大型BGP網絡 |
配置BGP對等體組 |
可選 |
|
|
配置BGP團體 |
|||
|
配置BGP路由反射器 |
|||
|
配置BGP聯盟 |
|||
|
配置BGP GR |
可選 |
||
|
開啟Trap功能 |
可選 |
||
|
使能BGP日誌功能 |
可選 |
||
|
配置BGP與BFD聯動 |
可選 |
||
本節講述最基本的BGP網絡配置過程。
![]()
在本節中,不對BGP和MP-BGP進行嚴格的區分,命令的適用情況請參考所在的視圖。
在配置BGP連接之前,需保證相鄰節點在網絡層互通。
要在路由器上創建BGP連接,必須配置該路由器所在的AS編號即啟動BGP、配置對等體(對等體組)的AS編號。
Router ID用來在一個自治係統中唯一的標識一台路由器,一台路由器如果要運行BGP協議,則必須存在Router ID。
l 用戶可以在啟動BGP進入BGP視圖後指定Router ID,配置時,必須保證自治係統中任意兩台路由器的ID都不相同。通常的做法是將路由器的ID配置為與該路由器某個接口的IP地址一致,為了增加網絡的可靠性,建議將Router ID配置為Loopback接口的IP地址。
l 如果沒有在BGP視圖下配置Router ID,則缺省使用全局Router ID。
l 如果BGP使用的是全局Router ID,當Router ID所在接口被刪除時會重新選擇路由器的Router ID。
l 如果是在BGP視圖下手工配置的Router ID,隻有使用undo router-id命令才能重新選擇路由器的Router ID。
表1-3 創建BGP連接
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
配置全局Router ID |
router id router-id |
可選 缺省情況下,未配置全局Router ID 如果沒有配置全局Router ID,則按照下麵的規則進行選擇: (1) 如果存在配置IP地址的Loopback接口,則選擇Loopback接口地址中最大的作為Router ID (2) 如果沒有配置IP地址的Loopback接口,則從其他接口的IP地址中選擇最大的作為Router ID(不考慮接口的up/down狀態) |
|
啟動BGP,進入BGP視圖 |
bgp as-number |
必選 缺省情況下,係統沒有運行BGP |
|
配置Router ID |
router-id router-id |
可選 缺省情況下,與全局Router ID相同 |
|
指定對等體/對等體組及其AS號 |
peer { group-name | ip-address } as-number as-number |
必選 缺省情況下,沒有指定對等體/對等體組AS號 |
|
配置使用peer as-number命令創建鄰居時默認使能IPv4單播地址族 |
default ipv4-unicast |
可選 |
|
激活指定對等體 |
peer ip-address enable |
可選 缺省情況下,BGP對等體是激活的 |
|
配置對等體/對等體組的描述信息 |
peer { group-name | ip-address } description description-text |
可選 缺省情況下,對等體/對等體組沒有描述信息 |
![]()
BGP使用TCP作為其傳輸層協議,缺省情況下,BGP使用到達對等體最佳路由的出接口作為與對等體/對等體組建立TCP連接的源接口。
當建立BGP連接的路由器之間存在冗餘鏈路時,如果路由器上的一個接口發生故障,鏈路狀態變為down,建立TCP連接的源接口可能會隨之發生變化,導致BGP需要重新建立TCP連接,造成網絡振蕩。為了避免該情況的發生,建議網絡管理員使用Loopback接口建立BGP連接,並將建立BGP連接所使用的源接口配置為Loopback接口,來提高BGP連接的可靠性和穩定性。
表1-4 配置建立TCP連接使用的源接口
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置與對等體/對等體組創建BGP會話時建立TCP連接使用的源接口 |
peer { group-name | ip-address } connect-interface interface-type interface-number |
必選 缺省情況下,BGP使用到達BGP對等體的最佳路由的出接口作為與對等體/對等體組創建BGP會話時建立TCP連接的源接口 |
![]()
當兩個設備之間建立多條BGP連接時,如果沒有為每個連接明確指定建立TCP連接的源接口,可能會由於無法根據到達BGP對等體的最優路由確定TCP連接源接口從而導致無法建立TCP連接,在此情況下建議用戶配置BGP對等體時明確配置BGP會話建立TCP連接的源接口。
當前路由器要與另外一個路由器建立EBGP連接,它們必須具有直連的物理鏈路,如果不滿足這一要求,則必須使用peer ebgp-max-hop命令允許它們之間經過多跳建立TCP連接。
表1-5 配置允許同非直連鄰居建立EBGP連接
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置允許同非直接相連網絡上的鄰居建立EBGP連接 |
peer { group-name | ip-address } ebgp-max-hop [ hop-count ] |
必選 缺省情況下,不允許同非直接相連網絡上的鄰居建立EBGP連接 |
![]()
直連EBGP對等體不需要配置peer ebgp-max-hop命令。
BGP與IGP不同,其著眼點主要在於控製路由的傳播和選擇最佳路由。
要生成BGP路由,主要有以下兩種途徑:
l 配置BGP發布本地路由
l 引入其它路由
網絡管理員也可以根據需要配置引入其它協議的缺省路由。
在控製BGP路由信息的生成之前,需要先創建BGP連接。
用戶可以在BGP視圖下配置發布某個網段的路由,從而將該路由發布給對等體,通過該種方式發布的路由的Origin屬性為IGP。網絡管理員還可以通過使用路由策略更為靈活地控製所發布的路由。
需要注意的是,要發布的本地路由必須存在於IP路由表中。
表1-6 配置BGP發布本地路由
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
將網段路由發布到BGP路由表中 |
network ip-address [ mask | mask-length ] route-policy route-policy-name |
必選 缺省情況下,BGP不發布任何網段路由 |
BGP可以向鄰居AS發送本地AS內部網絡的路由信息,但BGP不是自己去發現AS內部的路由信息,而是將IGP的路由信息引入到BGP路由表中,並發布給對等體。在引入IGP路由時,可以針對不同的路由協議來對路由信息進行過濾。
通過引入方式發布的路由的Origin屬性為incomplete。
表1-7 配置BGP引入其它路由
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
引入其它協議路由信息並通告 |
import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] |
必選 缺省情況下,BGP不引入其它協議的路由 目前隻有OSPF協議支持配置allow-direct參數 |
![]()
隻能引入路由表中狀態為active的路由,是否為active狀態可以通過display ip routing-table protocol命令來查看。
BGP不能通過import-route命令從其它協議引入缺省路由,如果要引入其它協議缺省路由,必須要使用下麵命令進行配置。
表1-8 配置BGP引入其它協議缺省路由
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
引入其它協議路由信息並通告 |
import-route protocol [ { process-id | all-processes } [ allow-direct | med med-value | route-policy route-policy-name ] * ] |
必選 缺省情況下,BGP不引入其它協議的路由 目前隻有OSPF協議支持配置allow-direct參數 |
|
允許將缺省路由引入到BGP路由表中 |
default-route imported |
必選 缺省情況下,BGP不允許將缺省路由引入到BGP路由表中 |
在控製BGP路由信息的發布與接收之前,需要先配置BGP連接。
在中型或大型BGP網絡中,在向對等體發布路由信息時,需要配置路由聚合,減小對等體路由表中的路由數量。BGP支持自動聚合和手動聚合兩種聚合方式,同時配置時,手動聚合的優先級高於自動聚合的優先級。
配置自動聚合功能後,BGP將對引入的IGP子網路由進行聚合,不再發布子網路由,而是發布聚合後的自然網段的路由。
需要注意的是,用network命令發布的路由不能進行自動聚合。
表1-9 配置路由自動聚合
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置對引入的IGP子網路由進行自動聚合 |
summary automatic |
必選 缺省情況下,不對引入的IGP子網路由進行自動聚合 |
自動聚合是按照自然網段進行聚合,而且隻能對IGP引入的子網路由進行聚合。
通過配置手動聚合,用戶可以同時對IGP引入的子網路由和用network命令發布的路由進行聚合,而且還可以根據需要定義聚合路由的子網掩碼長度。
表1-10 配置路由手動聚合
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置路由手動聚合 |
aggregate ip-address { mask | mask-length } [ as-set | attribute-policy route-policy-name | detail-suppressed | origin-policy route-policy-name | suppress-policy route-policy-name ] * |
必選 缺省情況下,不進行路由聚合 |
通過配置向對等體/對等體組發送缺省路由,不論本地路由表中是否存在缺省路由,都將向指定對等體/對等體組發布一條下一跳地址為本地地址的缺省路由。
表1-11 配置向對等體/對等體組發送缺省路由
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
向對等體/對等體組發送缺省路由 |
peer { group-name | ip-address } default-route-advertise [ route-policy route-policy-name ] |
必選 缺省情況下,不向對等體/對等體組發送缺省路由 |
配置BGP路由信息的發布/接收策略前,根據采取的策略,需要配置下列過濾器:
l 訪問控製列表
l IP地址前綴列表
l 路由策略
l AS路徑過濾列表
關於訪問控製列表的詳細配置過程,請參考“ACL和QoS配置指導”中的“ACL”。
關於IP地址前綴列表、路由策略和AS路徑過濾列表的詳細配置過程,請參考“三層技術-IP路由配置指導”中的“路由策略”。
用戶可以使用路由策略、訪問控製列表、AS路徑過濾列表或IP地址前綴列表對發布給對等體的路由信息進行過濾,可以根據需求選擇過濾策略。
表1-12 配置BGP路由信息的發布策略
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置引入的路由在發布時進行過濾 |
filter-policy { acl-number | ip-prefix ip-prefix-name } export [ direct | isis process-id | ospf process-id | rip process-id | | static ] |
至少選其一 缺省情況下,不對發布的路由信息進行過濾 可以根據需求選擇過濾策略 同時配置幾種過濾策略時,按照如下順序執行: l filter-policy export l peer filter-policy export l peer as-path-acl export l peer ip-prefix export l peer route-policy export 隻有通過前麵的過濾策略,才能繼續執行後麵的過濾策略;隻有通過所有配置的過濾策略後,路由信息才能被發布 |
|
對發布給對等體/對等體組的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name export |
|
|
為對等體/對等體組設置基於ACL的過濾策略 |
peer { group-name | ip-address } filter-policy acl-number export |
|
|
為對等體/對等體組設置基於AS路徑過濾列表的BGP路由過濾策略 |
peer { group-name | ip-address } as-path-acl as-path-acl-number export |
|
|
為對等體/對等體組設置基於IP前綴列表的路由過濾策略 |
peer { group-name | ip-address } ip-prefix ip-prefix-name export |
用戶可以使用路由策略、訪問控製列表、AS路徑過濾列表或IP地址前綴列表對從等體接收的路由信息進行過濾,隻有滿足某些條件的路由才能被BGP接收,並加到路由表中。
網絡管理員可以根據需求選擇過濾策略,可以對從所有對等體接收的路由信息進行過濾,也可以從指定對等體接收的路由信息進行過濾。
需要注意的是,對等體組的成員可以與所在的組使用不同的入方向路由策略,即接收路由時,各對等體可以選擇自己的策略。
表1-13 配置BGP路由信息的接收策略
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
對接收的路由信息進行過濾 |
filter-policy { acl-number | ip-prefix ip-prefix-name } import |
至少選其一 缺省情況下,不對接收的路由信息進行過濾 可以根據需求選擇過濾策略 同時配置幾種過濾策略時,按照如下順序執行: l filter-policy import l peer filter-policy import l peer as-path-acl import l peer ip-prefix import l peer route-policy import 隻有通過前麵的過濾策略,才能繼續執行後麵的過濾策略;隻有通過所有配置的過濾策略後,路由信息才能被接收 |
|
對來自對等體/對等體組的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name import |
|
|
為對等體/對等體組設置基於ACL的過濾策略 |
peer { group-name | ip-address } filter-policy acl-number import |
|
|
為對等體/對等體組設置基於AS路徑過濾列表的BGP路由過濾策略 |
peer { group-name | ip-address } as-path-acl as-path-acl-number import |
|
|
為對等體/對等體組設置基於IP前綴列表的路由過濾策略 |
peer { group-name | ip-address } ip-prefix ip-prefix-name import |
BGP路由器收到一條IBGP路由,缺省隻檢查該路由的下一跳是否可達。如果可達, BGP路由器就將這條IBGP路由發布給EBGP對等體。如果配置了同步特性,則需要同時滿足以下條件, BGP路由器才會將該IBGP路由發布給EBGP對等體:
l 該路由的下一跳可達;
l 在IGP路由表中存在一條active的路由,與該IBGP路由的目的網段完全相同。(IGP路由是否為active狀態可以通過display ip routing-table protocol命令來查看)
表1-14 配置BGP與IGP路由同步
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置BGP與IGP路由同步 |
synchronization |
必選 缺省情況下,BGP和IGP路由不同步 |
表1-15 限製從BGP對等體/對等體組接收的路由前綴數量
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置當從指定對等體/對等體組收到的路由前綴數量超過最大值時,路由器中斷BGP連接 |
peer { group-name | ip-address } route-limit prefix-number [ percentage-value ] |
三者必選其一 缺省情況下,沒有限製從BGP對等體/對等體組接收的路由前綴數量 |
|
配置當從指定對等體/對等體組收到的路由前綴數量超過最大值時,僅打印告警信息,路由器保持與指定對等體/對等體組的連接 |
peer { group-name | ip-address } route-limit prefix-number alert-only [ percentage-value ] |
|
|
配置當從指定對等體/對等體組收到的路由前綴數量超過允許的最大值時,路由器中斷BGP連接,但會自動與對等體重建連接 |
peer { group-name | ip-address } route-limit prefix-number reconnect reconnect-time [ percentage-value ] |
通過配置BGP衰減,可以抑製不穩定的路由信息,不將這類路由加入到路由表中,也不將這類路由向其他BGP對等體發布。
表1-16 配置BGP路由衰減
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置BGP路由衰減 |
dampening [ half-life-reachable half-life-unreachable reuse suppress ceiling | route-policy route-policy-name ] * |
必選 缺省情況下,沒有配置BGP路由衰減 |
缺省情況下,接收到的EBGP路由的路由管理優先級為255,比本地生成的路由的管理優先級低。
通過將一條EBGP路由被配置成short-cut,那麼這條路由在加入到路由表時將使用本地生成路由的路由管理值,而不是EBGP路由的路由管理值,此時,這條路由成為最佳路由的可能性被提高了很多。
表1-17 配置shortcut路由
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置short-cut路由 |
network ip-address [ mask | mask-length ] short-cut |
可選 缺省情況下,接收到的EBGP路由的路由管理優先級為255 |
BGP具有很多路由屬性,利用這些屬性可以改變BGP的選路策略。
在配置BGP的路由屬性之前,需要先配置BGP連接。
BGP選擇路由時將首先丟棄下一跳不可達的路由,其次再優選Preferred-value值最大的路由。
缺省情況下,從對等體/對等體組學到的路由的首選值為0,網絡管理員可以為從某個對等體/對等體組接收的路由配置首選值,從而提高從指定對等體/對等體學到的路由的優先級。
表1-18 為接收路由分配首選值
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
為從對等體/對等體組接收的路由分配首選值 |
peer { group-name | ip-address } preferred-value value |
可選 缺省情況下,從對等體/對等體組接收的路由的首選值為0 |
由於路由器上可能同時運行多個動態路由協議,就存在各個路由協議之間路由信息共享和選擇的問題。係統為每一種路由協議設置一個優先級,在不同協議發現同一條路由時,優先級高的路由將被優先選擇。
用戶可以修改EBGP路由、IBGP路由以及用本地產生的BGP路由的路由優先級;還可以應用路由策略為匹配過濾條件的特定路由配置優先級,對於那些沒有匹配的路由,使用缺省優先級。
表1-19 配置BGP的路由優先級
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置BGP路由的管理優先級 |
preference { external-preference internal-preference local-preference | route-policy route-policy-name } |
可選 缺省情況下,EBGP路由的管理優先級為255,IBGP路由的管理優先級為255,本地產生的BGP路由的管理優先級為130 |
Local-Preference用來判斷流量離開AS時的最佳路由。當BGP的路由器通過不同的IBGP對等體得到目的地址相同但下一跳不同的多條路由時,將優先選擇Local-Preference值較高的路由。
用戶可以通過default local-preference命令改變BGP路由器向IBGP對等體發送的路由Local-Preference的缺省值。
表1-20 配置Local-Preference缺省值
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置本地優先級的缺省值 |
default local-preference value |
可選 缺省情況下,本地優先級的缺省值為100 |
MED用來判斷流量進入AS時的最佳路由。當一個運行BGP的路由器通過不同的EBGP對等體得到目的地址相同但下一跳不同的多條路由時,在其它條件相同的情況下,將優先選擇MED值較小者作為最佳路由。
表1-21 配置MED缺省值
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置係統MED的缺省值 |
default med med-value |
可選 缺省情況下,MED的缺省值為0 |
缺省情況下,BGP隻比較來自同一個AS的路由的MED屬性值。
通過配置compare-different-as-med命令,可以強製BGP比較來自不同AS的路由的MED屬性值。
表1-22 配置允許比較來自不同AS鄰居路由的MED屬性值
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置允許比較來自不同AS鄰居的路由路徑的MED屬性值 |
compare-different-as-med |
必選 缺省情況下,不允許比較來自不同AS鄰居的路由路徑的MED屬性值 |
缺省情況下,係統不會對來自同一AS的路由進行MED排序優選。
BGP選擇最優路由時是將新的路由和當前BGP路由表中的最優路由進行比較,隻要新的路由比當前BGP路由表中的最優路由更優,新的路由將成為最優路由,路由學習的順序有可能會影響最優路由的選擇結果。
圖1-16 MED排序優選示意圖

如上圖所示所示,Router D分別從Router A和Router B學習到了到達網段10.0.0.0的路由,由於Router B的Router ID值較小,因此,從Router B學來的路由被選為最優路由:
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 2.2.2.2 50 0 300e
* i 3.3.3.3 50 0 200e
當路由器再從Router C學習到到達10.0.0.0 網段的路由時,由於它隻和當前路由表的最優路由進行比較,由於Router C的Router ID值更小,相對更優,它將成為最優路由。
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 1.1.1.1 60 0 200e
* i 10.0.0.0 2.2.2.2 50 0 300e
* i 3.3.3.3 50 0 200e
但是如果將這條路由與從Router A學習到的路由進行比較,那麼由於來自同一AS 200且MED值更大,應該視為無效路由。
通過在Router D上配置bestroute compare-med命令,Router D對於學習到的路由會首先按照路由來自的AS分組,對來自同一AS的路由根據MED值的大小進行優選,首先選出來MED值最小的路由,然後再對來自不同AS的路由進行優選,從而避免路由優選結果的不確定性。配置對來自同一AS的路由進行MED排序優選後,Router D上的BGP 路由表如下所示,從Router C學習到的到達10.0.0.0 網段的路由將成為最優路由。
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.0.0 3.3.3.3 50 0 200e
* i 10.0.0.0 2.2.2.2 50 0 300e
* i 1.1.1.1 60 0 200e
需要注意的是,BGP將無法進行負載分擔,因為BGP要求進行負載分擔的路由必須AS PATH相同。
表1-23 配置對來自同一AS的路由進行MED排序優選
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置根據路由來自的AS進行分組,並根據MED排序優選 |
bestroute compare-med |
必選 缺省情況下,不根據路由來自的AS進行分組對MED排序優選 |
表1-24 配置允許比較來自同一聯盟不同子自治係統鄰居路由的MED屬性值
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置允許比較來自同一聯盟不同子自治係統鄰居路由的MED屬性值 |
bestroute med-confederation |
必選 缺省情況下,不比較來自同一聯盟不同子自治係統鄰居路由的MED屬性值 |
![]()
隻有AS_PATH裏不包含聯盟體外的子自治係統編號時,才會比較來自同一聯盟不同子自治係統鄰居路由的MED屬性值,例如有三條路由,它們的AS-PATH值分別為65006 65009、65007 65009和65008 65009,MED值分別為2、3、1,由於第三條路由包含了聯盟體外的子自治係統編號,因此在選擇最優路由時第一條路由將成為最優路由。
缺省情況下,路由器向IBGP對等體/對等體組發布路由時,不將自身地址作為下一跳,但有的時候為了保證IBGP鄰居能夠找到下一跳,可以配置將自身地址作為下一跳。以下圖為例,Router A與Router B建立EBGP鄰居關係,Router B與Router C建立IBGP鄰居關係,Router B在向Router C發布從Router A學到的BGP路由時,如果Router C上沒有到達1.1.1.1/24的路由,可以在Router B上配置peer next-hop-local命令將3.1.1.1/24做為下一跳,這樣,Router C就能找到下一跳。
圖1-17 配置BGP下一跳屬性應用組網圖一

在一些比較特殊的組網環境中(即兩個BGP連接在同一網段的廣播網),路由器向EBGP對等體/對等體組發布路由時不會將自身地址作為下一跳,以下圖為例:Router A與Router B建立EBGP鄰居關係,Router B與Router C建立IBGP鄰居關係,兩個BGP連接都位於同一個廣播網1.1.1.0/24中,Router B向Router A發布EBGP路由時不會將自身地址1.1.1.2/24作為下一跳,但如果用戶有需要,也可以通過通過配置peer next-hop-local命令實現將自身地址1.1.1.2/24作為下一跳。
圖1-18 配置BGP下一跳屬性應用組網圖二

需要注意的是,如果配置了BGP負載分擔,則不論是否配置了peer next-hop-local命令,本地路由器向IBGP對等體/對等體組發布路由時都先將下一跳地址改變為自身地址。
表1-25 配置BGP的下一跳屬性
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置發布路由時將自身地址作為下一跳 |
peer { group-name | ip-address } next-hop-local |
可選 缺省情況下,向EBGP對等體/對等體組發布路由時,將自身地址作為下一跳;向IBGP對等體/對等體組發布路由時,不將自身地址作為下一跳 |
通常情況下,BGP會檢查對等體發來的路由的AS_PATH屬性,如果其中已存在本地AS號,則BGP會忽略此路由,以免形成路由環路。
通過配置peer allow-as-loop命令,可以允許本地AS號在所接收的路由的AS_PATH屬性中出現,並可同時配置允許重複的次數。
表1-26 配置允許本地AS號重複出現的次數
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置允許本地AS號重複出現的次數 |
peer { group-name | ip-address } allow-as-loop [ number ] |
必選 缺省情況下,不允許本地AS重複出現 |
路由器在選擇最優路由時會優選AS路徑最短的路由,通過如下配置可以禁止路由器將AS_PATH當作選路算法中的一個因素。
表1-27 禁止路由器將AS_PATH當作選路算法中的一個因素
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
禁止路由器將AS_PATH當作選路算法中的一個因素 |
bestroute as-path-neglect |
必選 缺省情況下,路由器將AS_PATH當作選路算法中的一個因素 |
當網絡管理員需要進行係統移植時,例如,Router A原來位於AS 2,現在需要將它移植到AS 3裏,可以在Router A上為已經創建的EBGP對等體(組)配置一個虛擬的本地自治係統號2,將本地真實的AS號3隱藏起來;由於位於其他AS內的EBGP對等體隻能看到這個虛擬AS號2,因此它們不需要改變現有配置,從而在係統升級調試過程中可以不中斷現有的BGP服務。
表1-28 為對等體/對等體組定製一個虛擬的自治係統號
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
為對等體/對等體組定製一個虛擬的自治係統號 |
peer { group-name | ip-address } fake-as as-number |
必選 缺省情況下,沒有為對等體/對等體組配置虛擬的本地自治係統號 |
![]()
peer fake-as命令隻適用於EBGP對等體/對等體組。
在MPLS L3VPN中,如果PE和CE之間運行EBGP,由於BGP使用AS號檢測路由環路,為保證路由信息的正確發送,需要為物理位置不同的站點分配不同的AS號。
如果物理分散的CE複用相同的AS號,就應該在PE上配置BGP的AS號替換功能。此功能是BGP的出口策略,在發布路由時有效。
使能了BGP的AS號替換功能後,當PE向指定對等體中的CE發布路由時,如果路由的AS_PATH中有與CE相同的AS號,將被替換成PE的AS號後再發布。
圖1-19 BGP AS號替換應用示意圖

如圖1-19所示,CE 1和CE 2都使用AS號800,在PE 2上使能針對CE 2的AS號替換功能。當CE 1發來的Update信息從PE 2發布給CE 2時,PE 2發現AS_PATH中存在與CE 2相同的AS號800,就把它替換為自己的AS號100,這需要注意的是,如果需要完全的連接性,PE 1上也需要做類似的配置。
表1-29 配置AS號替換功能
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置用本地AS號替換AS_PATH屬性中指定對等體/對等體組的AS號 |
peer { group-name | ip-address } substitute-as |
必選 缺省情況下,沒有用本地AS號替換AS_PATH屬性中指定對等體/對等體組的AS號 |
![]()
替換AS_PATH屬性中的AS號命令僅在特定組網環境下使用,錯誤的配置會引起路由環路。
表1-30 配置發送BGP更新報文時AS_PATH屬性中不攜帶私有AS號
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置發送BGP更新報文時AS_PATH屬性中不攜帶私有AS號 |
peer { group-name | ip-address } public-as-only |
必選 缺省情況下,發送BGP更新報文時,攜帶私有自治係統號 |
通常情況下,BGP會檢查對等體發來的路由的AS_PATH屬性。如果第一個AS號不是BGP鄰居的AS號,則丟棄此路由。
通過配置ignore-first-as命令,可以忽略對EBGP路由第一個AS號的檢測。
表1-31 配置EBGP不檢測路由的第一個AS號
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置不檢測EBGP路由的第一個AS號 |
ignore-first-as |
必選 缺省情況下,係統收到EBGP路由後,會檢測路由的第一個AS號 |
在調整和優化BGP網絡之前,需要先配置BGP連接。
當對等體間建立了BGP連接後,它們定時向對端發送Keepalive消息,以防止路由器認為BGP連接已中斷。若路由器在設定的連接保持時間(Holdtime)內未收到對端的Keepalive消息或Update報文,則認為此BGP連接已中斷,從而斷開此BGP連接。
用戶可以配置當前路由的BGP存活時間間隔與保持時間,也可以配置與指定對等體/對等體組建立連接的存活時間間隔和保持時間:
l 如果當前路由器的保持時間與對等體/對等體組上配置的不一致,則數值較小者作為協商後的保持時間。
l 存活時間間隔為0,協商的保持時間不為0時,以協商的保持時間的三分之一作為存活時間間隔發送keepalive消息。
l 存活時間間隔不為0時,以協商的保持時間的三分之一再與配置的存活時間間隔比較取最小值作為存活時間間隔發送keepalive消息。
表1-32 配置BGP存活時間間隔與保持時間
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置BGP的存活時間間隔與保持時間 |
timer keepalive keepalive hold holdtime |
可選 缺省情況下,存活時間間隔為60秒,保持時間為180秒 |
|
配置指定對等體/對等體組的存活時間間隔和保持時間 |
peer { group-name | ip-address } timer keepalive keepalive hold holdtime |
![]()
l 合理的最大Keepalive消息發送間隔為保持時間的三分之一,且該發送間隔不能小於1秒,因此,保持時間如果不為0,則最小為3秒。
l 使用timer命令配置的定時器比使用peer timer命令配置的定時器優先級要低。
l 如果與對等體的鄰居關係已經建立,必須要複位BGP連接才能使新配置的存活時間間隔與保持時間生效。
l 配置timer命令後,不會影響已建立的BGP連接,隻對新建立的連接生效。
l 配置peer timer命令後,如果新配置的值與之前的配置值不同,會影響已建立的BGP連接:BGP連接會直接斷開,再使用新參數重新建立連接。
表1-33 配置發送路由更新報文的時間間隔
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置對等體/對等體組發送同一路由更新報文的時間間隔 |
peer { group-name | ip-address } route-update-interval interval |
可選 缺省情況下,向IBGP對等體發送同一路由更新報文的時間間隔為15秒,向EBGP對等體發送同一路由更新報文的時間間隔為30秒 |
BGP的選路策略改變後,為了使新的策略生效,必須複位BGP連接,但這樣會造成短暫的BGP連接中斷。
如果當前路由器和對等體都支持Route-Refresh功能,通過使能Route-Refresh功能,在策略改變時,係統可以在不中斷BGP連接的情況下,自動對BGP路由表進行動態刷新。
如果對等體不支持Route-Refresh功能,則需要將從對等體接收的所有路由更新保存在本地,當選路策略發生改變後,在不中斷連接的情況下重新刷新BGP路由表,並應用新的策略。
在對等體支持並使能Route-Refresh功能的情況下,如果BGP的路由策略發生了變化,本地路由器會向BGP對等體發布Router-Refresh消息,收到此消息的對等體會將其路由信息重新發給本地路由器。這樣,在不中斷BGP連接的情況下,就可以對BGP路由表進行動態更新,並應用新的選路策略。
表1-34 通過使能Route-Refresh實現BGP軟複位
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
使能BGP路由刷新功能 |
peer { group-name | ip-address } capability-advertise route-refresh |
可選 缺省情況下,BGP路由刷新功能處於使能狀態 |
當對等體不支持Route-Refresh功能時,可通過配置peer keep-all-routes命令將從對等體接收的所有路由更新保存在本地用戶,然後再執行refresh bgp命令對保存在本地的所有路由使用路由策略重新過濾一遍。
表1-35 通過將所有路由更新保存在本地實現BGP軟複位
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
禁止BGP路由刷新和多協議擴展功能 |
peer { group-name | ip-address } capability-advertise conventional |
必選 缺省情況下,BGP路由刷新和多協議擴展功能處於使能狀態 |
|
保存所有來自對等體/對等體組的原始路由信息 |
peer { group-name | ip-address } keep-all-routes |
必選 缺省情況下,不保存所有來自對等體/對等體組的原始路由信息 |
|
退回用戶視圖 |
return |
- |
|
手工對BGP連接進行軟複位 |
refresh bgp { all | ip-address | group group-name | external | internal } { export | import } |
必選 |
![]()
如果對端鄰居不支持Route-Refresh功能,同時本端又未配置peer keep-all-routes命令,那麼在修改BGP路由信息的接收策略後,需要根據策略的影響來決定是否手工斷開鄰居,重新學習路由。
BGP ORF(Outbound Route Filtering,輸出路由過濾)功能是將本地入口策略通過Route-refresh報文發送給鄰居,當鄰居需要向BGP對等體發送Update更新報文時,通過本地的路由策略後還需要進行ORF策略的過濾,隻有通過ORF策略的路由信息才會發給BGP對等體,以達到減少BGP鄰居間Update更新報文的交互,節省網絡資源的目的。
使能BGP ORF能力後,本地和BGP對等體會通過Open報文協商ORF能力(即收發的報文裏是否允許攜帶ORF信息,如果允許攜帶,是否可以攜帶非標準的ORF信息),當協商完畢並成功建立鄰居關係後,可以通過特殊的Route-refresh報文交互ORF信息。
ORF能力協商成功需要兩端的配置來保證,關於兩端參數的選擇請參見表1-37。
表1-36 配置BGP ORF能力
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
使能BGP路由刷新功能 |
peer { group-name | ip-address } capability-advertise route-refresh |
必選 缺省情況下,BGP路由刷新功能處於使能狀態 |
|
使能BGP鄰居的非標準ORF能力 |
peer { group-name | ip-address } capability-advertise orf non-standard |
可選 缺省情況下,BGP ORF能力支持RFC5291、RFC5292的標準能力 如果對端隻支持非標準值的ORF報文,則必須配置該命令 |
|
使能BGP鄰居的ORF能力 |
peer { group-name | ip-address } capability-advertise orf ip-prefix { both | receive | send } |
必選 缺省情況下,BGP對等體/對等體組不使能鄰居的ORF能力 |
表1-37 both、send、receive參數選擇以及配置效果描述表
|
本地選擇參數 |
對端選擇參數 |
協商成功後 |
|
send |
receive |
本端的ORF發送能力,對端的ORF接收能力 |
|
both |
||
|
receive |
send |
本端的ORF接收能力,對端的ORF發送能力 |
|
both |
||
|
both |
both |
雙向的ORF發送和接收能力 |
通常情況下,設備在與對端設備建立BGP對等體連接關係時會發送BGP Open消息,在消息中的Optional parameters字段攜帶信息:說明AS號取值占用4字節(即取值範圍為1~4294967295)。此時,如果對端設備不支持AS號取值為4字節(比如隻支持2字節),則連接關係無法建立。
為了解決上述問題,您可以使能4字節AS號抑製功能:當對端設備不支持AS號取值為4字節時,設備發出的BGP Open消息仍然可以被對端設備正常識別,從而BGP對等體連接關係可以成功建立。
表1-38 使能4字節AS號抑製功能
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
使能4字節AS號抑製功能 |
peer { group-name | ip-address } capability-advertise suppress-4-byte-as |
必選 缺省情況下,設備沒有使能4字節AS號抑製功能 |
如果對端設備支持4字節AS號能力時,請不要使能該功能,否則會導致對等體無法建立。
路由器在設定的連接保持時間(Holdtime)內未收到對端的Keepalive消息或Update報文,則認為此BGP連接已中斷,從而斷開此BGP連接。
通過使能EBGP連接快速複位功能,如果當前路由器與直連的EBGP鄰居鏈路變為down狀態,係統將重新建立與該鄰居的EBGP會話。
表1-39 使能EBGP連接快速複位功能
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
使能EBGP連接快速複位功能 |
ebgp-interface-sensitive |
可選 缺省情況下,使能EBGP連接快速複位功能處於關閉狀態 |
BGP使用TCP做為傳輸層協議,為提高BGP的安全性,可以配置BGP在建立TCP連接時進行MD5認證,即兩台路由器必須配置相同的密碼,才能建立TCP連接。
BGP的MD5認證並不能對BGP報文認證,它隻是為TCP連接設置MD5認證密碼,由TCP完成認證。如果認證失敗,則不建立TCP連接。
表1-40 配置BGP建立TCP連接時進行MD5認證
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置BGP建立TCP連接時進行MD5認證 |
peer { group-name | ip-address } password { cipher | simple } password |
可選 缺省情況下,BGP在建立TCP連接時不進行MD5認證 |
如果到一個目的地有幾條開銷相同的路徑,可以實現等價路由負載分擔,IP報文在這幾個鏈路上負載分擔,以提高鏈路利用率。
該配置用以設置BGP協議的最大等價路由條數。
表1-41 配置BGP負載分擔
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置進行BGP負載分擔的路由條數 |
balance number |
可選 缺省情況下,BGP不進行路由負載分擔 |
表1-42 禁止與對等體/對等體組建立會話
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
禁止與對等體/對等體組建立會話 |
peer { group-name | ip-address } ignore |
可選 缺省情況下,允許與BGP對等體/對等體組建立會話 |
在大型BGP網絡中,對等體的數目眾多,配置和維護極為不便,可以根據組網需要,配置對等體組、團體、路由反射器或聯盟,以降低管理難度和提高路由發布效率。
在配置大型BGP網絡之前,需完成以下任務:相鄰節點的網絡層互通。
對等體組是具有相同更新策略的對等體的集合。
在大型BGP網絡中,對等體的數量會很多,其中,很多對等體需要配置相同的策略,通過配置對等體組並將對等體加入到對等體組,可以使對等體獲得與所在對等體組相同的配置,而且當對等體組的配置改變時,組內成員的配置也相應改變,從而簡化配置。
根據對等體所在的AS,對等體組可分為:
l IBGP對等體組:對等體組中的對等體與當前路由器位於同一AS。
l EBGP對等體組:對等體組中的對等體與當前路由器位於不同AS。
需要注意的是,如果對等體組中已經存在對等體,則不能改變該對等體組的AS號,也不能使用undo命令刪除已指定的AS號。
創建IBGP對等體組後,係統在將對等體加入IBGP對等體組時,會自動在BGP視圖下創建該對等體,並設置其AS號為本地AS號。
表1-43 配置IBGP對等體組
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- 缺省情況下,係統沒有運行BGP |
|
創建IBGP對等體組 |
group group-name [ internal ] |
必選 |
|
向對等體組中加入對等體 |
peer ip-address group group-name |
必選 |
根據對等體組中的對等體是否屬於同一個外部AS,EBGP對等體組又可以分為純EBGP對等體組和混合EBGP對等體組;如果對等體組中的對等體屬於同一個外部AS,該對等體組就是純EBGP對等體組;如果對等體組中的對等體屬於不同外部AS,該對等體組就是混合EBGP對等體組。
用戶有三種方式配置EBGP對等體組:
l 第一種方式是創建對等體組後,先指定AS號,再將對等體加入到對等體組中,該方式下加入的對等體具有相同的AS號;
l 第二種方式是創建對等體組完畢後,先配置對等體的AS號,再將對等體加入對等體組中。
l 第三種方式是創建對等體組完畢後,將對等體加入對等組的同時指定AS號。
表1-44 配置EBGP對等體組(方式一)
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
創建EBGP對等體組 |
group group-name external |
必選 |
|
設置對等體組的AS號 |
peer group-name as-number as-number |
必選 |
|
向對等體組中加入對等體 |
peer ip-address group group-name |
必選 |
![]()
l 該方式下,對等體加入對等體之前不能配置AS號;
l 該方式下,對等體組中所有對等體的AS號等於對等體組的AS號。
表1-45 配置EBGP對等體組(方式二)
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
創建EBGP對等體組 |
group group-name external |
必選 |
|
設置對等體的AS號 |
peer ip-address as-number as-number |
必選 |
|
向對等體組中加入對等體 |
peer ip-address group group-name [ as-number as-number ] |
必選 as-number as-number參數可選可不選,如果選擇則必須和peer ip-address as-number as-number命令中配置的一致 |
![]()
該方式下,對等體組中對等體的AS號可以相同也可以不同。
表1-46 配置EBGP對等體組(方式三)
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
創建EBGP對等體組 |
group group-name external |
必選 |
|
向對等體組中加入對等體 |
peer ip-address group group-name as-number as-number |
必選 |
![]()
l 該方式下,對等體加入對等體之前不能配置AS號;
l 該方式下,對等體組中對等體的AS號可以相同也可以不同。
團體是一組有相同特征的目的地址的集合,沒有物理上的邊界,與其所在的AS無關。
用戶可以先通過路由策略定義一組目的地址屬於某個指定團體,並配置向對等體/對等體組發布團體屬性:
l 在向對等體/對等體組發布路由時可以指定發布策略,在發布策略中通過團體屬性對發布給對等體/對等體組的路由信息進行過濾;
l 對等體/對等體組在接收路由信息時也可以指定接收策略,在接收策略中通過團體屬性對從等體/對等體組接收的路由信息進行過濾。
在路由策略中通過團體來進行路由過濾,可以提高路由策略配置的靈活度,並簡化路由策略的管理,從而降低維護管理的難度。
關於路由策略的詳細配置,請參見“三層技術-IP路由配置指導”中的“路由策略”。
表1-47 配置BGP團體
|
操作 |
命令 |
說明 |
|
|
進入係統視圖 |
system-view |
- |
|
|
進入BGP視圖 |
bgp as-number |
- |
|
|
配置向對等體/對等體組發布團體屬性 |
配置向對等體/對等體組發布團體屬性 |
peer { group-name | ip-address } advertise-community |
必選 缺省情況下,不將團體屬性和擴展團體屬性發布給任何對等體/對等體組 |
|
配置向對等體/對等體組發布擴展團體屬性 |
peer { group-name | ip-address } advertise-ext-community |
||
|
對發布給對等體/對等體組的路由指定路由策略 |
peer { group-name | ip-address } route-policy route-policy-name export |
必選 缺省情況下,不指定對等體/對等體組的路由策略 |
|
如果同一個AS內有多個BGP路由器,為了減少在同一AS內建立的IBGP連接數,可以把幾個BGP路由器劃分為一個集群,將其中的一台路由器配置為反射器,其它路由器作為客戶機。
為了增加網絡的可靠性和防止單點故障,可以在一個集群中配置一個以上的路由反射器,這時,網絡管理員必須給位於相同集群中的每個路由反射器配置相同的集群ID,以避免路由循環。
表1-48 配置BGP路由反射器
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置將本機作為路由反射器,並將對等體/對等體組作為路由反射器的客戶 |
peer { group-name | ip-address } reflect-client |
必選 缺省情況下,沒有配置路由反射器及其客戶 BGP視圖和BGP-VPNv4子地址族視圖下均支持peer reflect-client命令。當在BGP視圖下配置該命令時,表示本機可以反射公網路由;當在BGP-VPNv4子地址族視圖下配置該命令時,表示本機可以反射私網路由。(在BGP視圖下使用ipv4-family vpnv4命令可以進入BGP-VPNv4子地址族視圖,ipv4-family vpnv4命令的詳細介紹請參見“MPLS命令參考”中的“MPLS L3VPN”) |
|
配置允許客戶到客戶的路由反射 |
reflect between-clients |
可選 缺省情況下,允許客戶到客戶的路由反射 |
|
配置路由反射器的集群ID |
reflector cluster-id cluster-id |
可選 缺省情況下,每個路由反射器是使用自己的Router ID作為集群ID |
![]()
l 通常情況下,路由反射器的客戶之間不要求是全連接的,路由缺省通過反射器從一個客戶反射到其它客戶;如果客戶之間是全連接的,可以禁止客戶間的反射,以便減少開銷。
l 通常,一個集群裏隻有一個路由反射器。此時是由反射器的路由器ID來識別該集群的。設置多個路由反射器可提高網絡的穩定性。如果一個集群中配有多個路由反射器,請使用reflector cluster-id命令為所有的路由反射器配置同樣的集群ID,以避免路由循環。
聯盟(Confederation)是處理AS內部的IBGP網絡連接激增的另一種方法,它將一個自治係統劃分為若幹個子自治係統,每個子自治係統內部的IBGP對等體建立全連接關係,子自治係統之間建立EBGP連接關係。
網絡管理員將一個自治係統劃分為若幹個子自治係統後,如果路由器位於聯盟中的某個子自治係統中,需要在路由器上做如下配置:
(1) 首先,啟動BGP,並指定該路由器所屬的子自治係統號;
(2) 其次,配置聯盟ID。在不屬於聯盟的BGP發言者看來,屬於同一個聯盟的多個子自治係統是一個整體,聯盟ID就是標識聯盟這一整體的自治係統號;
(3) 如果該路由器與該聯盟的其它子自治係統建立EBGP鄰居關係,需要在該路由器上指定該聯盟體中除了自己還包含哪些子自治係統。
一個聯盟最多可包括32個子自治係統,配置屬於聯盟的子自治係統時使用的as-number僅在聯盟內部有效。
表1-49 配置BGP聯盟
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置聯盟ID |
confederation id as-number |
必選 缺省情況下,未配置聯盟的ID |
|
指定一個聯盟體中包含了哪些子自治係統 |
confederation peer-as as-number-list |
必選 缺省情況下,未指定一個聯盟體中包含了哪些子自治係統 |
如果其他路由器的聯盟實現機製不同於RFC 3065標準,可以通過如下配置與未采用RFC 3065配置的AS聯盟兼容。
表1-50 配置聯盟兼容性
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
配置與未采用RFC 3065配置的AS聯盟兼容 |
confederation nonstandard |
可選 缺省情況下,配置的聯盟與RFC 3065一致 |
分別在作為GR Restarter和GR Helper的設備上進行以下配置。
![]()
一台設備可以同時具備GR Restarter和GR Helper能力。
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
使能BGP協議的GR能力 |
graceful-restart |
必選 缺省情況下,BGP協議的GR能力處於關閉狀態 |
|
配置對端重建BGP會話連接的最大時間 |
graceful-restart timer restart timer |
可選 缺省情況下,對端重建BGP會話連接的最大時間為150秒 |
|
配置等待End-Of-RIB標記的時間 |
graceful-restart timer wait-for-rib timer |
可選 缺省情況下,等待End-Of-RIB標記的時間為180秒 |
![]()
l 通常情況下,對端重建會話連接的最大時間應小於OPEN消息中的Holdtime時間。接收側(Receiving Speaker)檢測到會話中斷後,將等待指定時間以便重新建立會話連接。
l End-Of-RIB(End of Routing-Information-Base,路由信息庫結束)標記用來標定路由更新發送的結束。
開啟BGP模塊的Trap功能後,該模塊會生成級別為level4的警告Trap報文,用於報告該模塊的重要事件。生成的Trap報文將被發送到設備的信息中心,通過設置信息中心的參數,最終決定Trap報文的輸出規則(即是否允許輸出以及輸出方向)。(有關信息中心參數的配置請參見“網絡管理和監控配置指導”中的“信息中心”。)
表1-52 開啟Trap功能
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
開啟BGP模塊的Trap功能 |
snmp-agent trap enable bgp |
可選 缺省情況下,BGP模塊的Trap功能處於開啟狀態 |
表1-53 使能BGP日誌功能
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- 缺省情況下,係統沒有運行BGP |
|
全局使能BGP日誌功能 |
log-peer-change |
可選 缺省情況下,全局BGP日誌功能處於使能狀態 |
|
記錄指定對等體/對等體組的會話狀態和事件信息 |
peer { group-name | ip-address } log-change |
可選 記錄對等體/對等體組的會話狀態和事件信息 |
BGP協議通過存活時間(Keepalive)定時器和保持時間(Holdtime)定時器來維護鄰居關係。但這些定時器都是秒級的,而且根據協議規定,設置的保持時間應該至少為存活時間間隔的三倍。這樣使得BGP鄰居關係的檢測比較慢,對於報文收發速度快的接口會導致大量報文丟失。通過配置BGP與BFD聯動,使得BFD能夠為BGP鄰居之間的鏈路提供更快速的檢測。當鄰居之間的鏈路出現故障時,能夠加快BGP協議的收斂速度。
表1-54 配置BGP與BFD聯動
|
操作 |
命令 |
說明 |
|
進入係統視圖 |
system-view |
- |
|
進入BGP視圖 |
bgp as-number |
- |
|
在指定鄰居上使能BFD |
peer ip-address bfd |
必選 缺省情況下,BGP的所有對等體鄰居上都沒有使能BFD鏈路檢測功能 |
![]()
l 配置BFD之前,需要使能BGP功能。
l 在BGP使能GR能力後,請慎用BFD。因為當鏈路故障時,係統可能還沒來得及啟用GR處理流程,BFD已經檢測到鏈路故障了,從而導致GR失敗。如果設備上同時配置了BGP GR和BGP BFD,則在BGP GR期間請勿去使能BGP BFD,否則可能導致GR失敗。
l 有關BFD的介紹和基本功能配置,請參見“可靠性配置指導”中的“BFD”。
在完成上述配置後,在任意視圖下執行display命令可以顯示配置後BGP的運行情況,通過查看顯示信息驗證配置的效果。
表1-55 BGP配置顯示
當BGP路由策略或協議發生變化後,如果需要通過複位BGP連接使新的配置生效,請在用戶視圖下進行下列配置。
|
操作 |
命令 |
|
複位所有BGP連接 |
reset bgp all |
|
複位與指定AS之間的BGP連接 |
reset bgp as-number |
|
複位與指定對等體的BGP連接 |
reset bgp ip-address [ flap-info ] |
|
複位所有EBGP連接 |
reset bgp external |
|
複位與指定對等體組的BGP連接 |
reset bgp group group-name |
|
複位所有IBGP連接 |
reset bgp internal |
|
複位IPv4單播地址族下的所有BGP連接 |
reset bgp ipv4 all |
在用戶視圖下,執行reset命令可以清除BGP相關統計信息。
|
操作 |
命令 |
|
清除路由的衰減信息並釋放被抑製的路由 |
reset bgp dampening [ ip-address [ mask | mask-length ] ] |
|
清除路由的振蕩統計信息 |
reset bgp flap-info [ ip-address [ mask-length | mask ] | as-path-acl as-path-acl-number | regexp as-path-regular-expression ] |
如圖1-20所示,所有設備均運行BGP協議,Switch A和Switch B之間建立EBGP連接,Switch B和Switch C之間建立IBGP連接。要求Switch C能夠訪問Switch A直連的8.1.1.0/24網段。
圖1-20 BGP基本配置組網圖

(1) 配置各接口的IP地址(略)
(2) 配置IBGP連接
l 為了防止端口狀態不穩定引起路由震蕩,本舉例使用Loopback接口來創建IBGP對等體。
l 使用Loopback接口創建IBGP對等體時,因為Loopback接口不是兩對等體實際連接的接口,所以,必須使用peer connect-interface命令將Loopback接口配置為BGP連接的源接口。
l 在AS 65009內部,使用OSPF協議,保證Switch B到Switch C的Loopback接口路由可達, Switch C到Switch B的Loopback接口路由可達。
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.3.3.3 as-number 65009
[SwitchB-bgp] peer 3.3.3.3 connect-interface loopback 0
[SwitchB-bgp] quit
[SwitchB] ospf 1
[SwitchB-ospf-1] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 9.1.1.1 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 2.2.2.2 as-number 65009
[SwitchC-bgp] peer 2.2.2.2 connect-interface loopback 0
[SwitchC-bgp] quit
[SwitchC] ospf 1
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[SwitchC-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
[SwitchC] display bgp peer
BGP local router ID : 3.3.3.3
Local AS number : 65009
Total number of peers : 1 Peers in established state : 1
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.2.2.2 65009 2 2 0 0 00:00:13 Established
以上顯示信息表明Switch B和Switch C之間的IBGP連接已經建立。
(3) 配置EBGP連接
l EBGP鄰居關係的兩台路由器(通常屬於兩個不同運營商),處於不同的AS域,對端的Loopback接口一般路由不可達,所以一般使用直連地址建立BGP鄰居。
l 因為要求Switch C能夠訪問Switch A直連的8.1.1.0/24網段,所以,建立EBGP連接後,需要將8.1.1.0/24網段路由通告到BGP路由表中。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] network 8.1.1.1 24
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
[SwitchB-bgp] quit
# 查看Switch B的BGP對等體的連接狀態。
[SwitchB] display bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 65009
Total number of peers : 2 Peers in established state : 2
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
3.3.3.3 65009 4 4 0 0 00:02:49 Established
3.1.1.2 65008 2 2 0 0 00:00:05 Established
可以看出,Switch B與Switch C、Switch B與Switch A之間的BGP連接均已建立。
# 查看Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
# 顯示Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 2.2.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 3.1.1.2 0 0 65008i
# 顯示Switch C的BGP路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 8.1.1.0/24 3.1.1.2 0 100 0 65008i
![]()
從路由表可以看出,Switch A沒有學到AS 65009內部的任何路由,Switch C雖然學到了AS 65008中的8.1.1.0的路由,但因為下一跳3.1.1.2不可達,所以也不是有效路由。
(4) 配置BGP引入直連路由
在Switch B上配置BGP引入直連路由,以便Switch A能夠獲取到網段9.1.1.0/24的路由,Switch C能夠獲取到網段3.1.1.0/24的路由。
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] import-route direct
# 顯示Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 4
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 2.2.2.2/32 3.1.1.1 0 0 65009?
* 3.1.1.0/24 3.1.1.1 0 0 65009?
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009?
以上顯示信息表明,在Switch B上引入直連路由後,Switch A新增了到2.2.2.2/32和9.1.1.0/24兩條路由。
# 顯示Switch C的BGP路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 4
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 2.2.2.2/32 2.2.2.2 0 100 0 ?
*>i 3.1.1.0/24 2.2.2.2 0 100 0 ?
*>i 8.1.1.0/24 3.1.1.2 0 100 0 65008i
* i 9.1.1.0/24 2.2.2.2 0 100 0 ?
以上顯示信息表明,到8.1.1.0的路由變為有效路由,下一跳為Switch A的地址。
(5) 結果驗證
# 使用Ping進行驗證。
[SwitchC] ping 8.1.1.1
PING 8.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 8.1.1.1: bytes=56 Sequence=1 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=2 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=3 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=4 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=5 ttl=254 time=2 ms
--- 8.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 2/2/2 ms
公司A的所有設備在AS 65008內,公司B的所有設備在AS 65009內,AS 65008和AS 65009通過設備Switch A和Switch B相連。
現要求實現Switch A能夠訪問AS 65009內的網段9.1.2.0/24,Switch C能夠訪問AS 65008內的網段8.1.1.0/24。
圖1-21 BGP與IGP交互配置組網圖

(1) 配置各接口的IP地址(略)
(2) 配置OSPF
在AS 65009內配置OSPF,使得Switch B能獲取到到9.1.2.0/24網段的路由。
# 配置Switch B。
<SwitchB> system-view
[SwitchB] ospf 1
[SwitchB-ospf-1] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[SwitchB-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] ospf 1
[SwitchC-ospf-1] import-route direct
[SwitchC-ospf-1] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 9.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
(3) 配置EBGP連接
配置EBGP連接,並在Switch A上將8.1.1.0/24網段通告到BGP路由表中,以便Switch B獲取到網段8.1.1.0/24的路由。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] network 8.1.1.0 24
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
(4) 配置BGP與IGP交互
l 在Switch B上配置BGP引入OSPF路由,以便Switch A能夠獲取到到9.1.2.0/24網段的路由。
l 在Switch B上配置OSPF引入BGP路由,以便Switch C能夠獲取到到8.1.1.0/24網段的路由。
# 在Switch B上配置BGP引入OSPF路由。
[SwitchB-bgp] import-route ospf 1
[SwitchB-bgp] quit
[SwitchB] ospf 1
[SwitchB-ospf-1] import-route bgp
[SwitchB-ospf-1] quit
# 查看Switch A的BGP路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 3.3.3.3/32 3.1.1.1 1 0 65009?
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.2.0/24 3.1.1.1 1 0 65009?
# 查看SwitchC的路由表。
[SwitchC] display ip routing-table
Routing Tables: Public
Destinations : 9 Routes : 9
Destination/Mask Proto Pre Cost NextHop Interface
2.2.2.2/32 OSPF 10 1 9.1.1.1 Vlan300
3.3.3.3/32 Direct 0 0 127.0.0.1 InLoop0
8.1.1.0/24 O_ASE 150 1 9.1.1.1 Vlan300
9.1.1.0/24 Direct 0 0 9.1.1.2 Vlan300
9.1.1.2/32 Direct 0 0 127.0.0.1 InLoop0
9.1.2.0/24 Direct 0 0 9.1.2.1 Vlan400
9.1.2.1/32 Direct 0 0 127.0.0.1 InLoop0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
(5) 結果驗證
# 使用Ping進行驗證。
[SwitchA] ping -a 8.1.1.1 9.1.2.1
PING 9.1.2.1: 56 data bytes, press CTRL_C to break
Reply from 9.1.2.1: bytes=56 Sequence=1 ttl=254 time=15 ms
Reply from 9.1.2.1: bytes=56 Sequence=2 ttl=254 time=31 ms
Reply from 9.1.2.1: bytes=56 Sequence=3 ttl=254 time=47 ms
Reply from 9.1.2.1: bytes=56 Sequence=4 ttl=254 time=46 ms
Reply from 9.1.2.1: bytes=56 Sequence=5 ttl=254 time=47 ms
--- 9.1.2.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 15/37/47 ms
[SwitchC] ping -a 9.1.2.1 8.1.1.1
PING 8.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 8.1.1.1: bytes=56 Sequence=1 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=2 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=3 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=4 ttl=254 time=2 ms
Reply from 8.1.1.1: bytes=56 Sequence=5 ttl=254 time=2 ms
--- 8.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 2/2/2 ms
所有交換機都配置BGP,Switch A在AS 65008中,Switch B和Switch C在AS 65009中。
Switch A與Switch B、Switch C之間運行EBGP,Switch B和Switch C之間運行IBGP。
在Switch A上配置負載分擔的路由條數為2,以提高鏈路利用率。
圖1-22 BGP負載分擔配置組網圖

(1) 配置各接口的IP地址(略)
(2) 配置BGP連接
l 在Switch A上與Switch B、Switch C分別建立EBGP連接,並將8.1.1.0/24網段的路由通告給Switch B和Switch C,以便Switch B和Switch C能夠訪問Switch A的內部網絡。
l 在Switch B上與Switch A建立EBGP連接,與Switch C建立IBGP連接,並將9.1.1.0/24網段的路由通告給Switch A,以便Switch A能夠通過Switch B訪問內部網絡。同時,在Switch B上配置一條到Switch C Loopback0接口的靜態路由(也可以用OSPF等協議來實現),以便使用Loopback接口建立IBGP連接。
l 在Switch C上與Switch A建立EBGP連接,與Switch B建立IBGP連接,並將9.1.1.0/24網段的路由通告給Switch A,以便Switch A能夠通過Switch C訪問內部網絡。同時,在Switch C上配置一條到Switch B Loopback0接口的靜態路由(也可以用OSPF等協議來實現),以便使用Loopback接口建立IBGP連接。
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 3.1.1.1 as-number 65009
[SwitchA-bgp] peer 3.1.2.1 as-number 65009
[SwitchA-bgp] network 8.1.1.1 24
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 3.1.1.2 as-number 65008
[SwitchB-bgp] peer 3.3.3.3 as-number 65009
[SwitchB-bgp] peer 3.3.3.3 connect-interface loopback 0
[SwitchB-bgp] network 9.1.1.0 255.255.255.0
[SwitchB-bgp] quit
[SwitchB] ip route-static 3.3.3.3 32 9.1.1.2
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 3.1.2.2 as-number 65008
[SwitchC-bgp] peer 2.2.2.2 as-number 65009
[SwitchC-bgp] peer 2.2.2.2 connect-interface loopback 0
[SwitchC-bgp] network 9.1.1.0 255.255.255.0
[SwitchC-bgp] quit
[SwitchC] ip route-static 2.2.2.2 32 9.1.1.1
# 查看Switch A的路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? – incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009i
* 3.1.2.1 0 0 65009i
l 從BGP路由表中可以看出,到目的地址9.1.1.0/24有兩條有效路由,其中下一跳為3.1.1.1的路由前有標誌“*>”,表示它是當前有效的最優路由(因為Switch B的路由器ID要小一些);而下一跳為3.1.2.1的路由前隻有標誌“*”,表示它是當前有效的路由,但不是最優的。
l 使用display ip routing-table命令查看IP路由表項,可以看出到達目的地址9.1.1.0/24的路由隻有一條,下一跳地址為3.1.1.1,出接口為Vlan200。
(3) 配置負載分擔
因為Switch A有兩條路徑到達AS 65009的內部網絡,所以,在Switch A配置負載分擔的路由條數為2,以提高鏈路利用率。
# 配置Switch A。
[SwitchA] bgp 65008
[SwitchA-bgp] balance 2
[SwitchA-bgp] quit
(4) 結果驗證
# 查看Switch A的路由表。
[SwitchA] display bgp routing-table
Total Number of Routes: 3
BGP Local router ID is 1.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 8.1.1.0/24 0.0.0.0 0 0 i
*> 9.1.1.0/24 3.1.1.1 0 0 65009i
*> 3.1.2.1 0 0 65009i
l 從BGP路由表中可以看到,BGP路由9.1.1.0/24存在兩個下一跳,分別是3.1.1.1和3.1.2.1,兩條路由前都有標誌“*>”,表明它們都是當前有效的最優路由。
l 使用display ip routing-table命令查看IP路由表項,可以看出到達目的地址9.1.1.0/24的路由有兩條,其中一條的下一跳地址為3.1.1.1,出接口為Vlan200;另一條的下一跳地址為3.1.2.1,出接口為Vlan300。
Switch B分別與Switch A、Switch C之間建立EBGP連接。
通過在Switch A上配置NO_EXPORT團體屬性,使得AS 10發布到AS 20中的路由,不再被AS 20向其他AS發布。
圖1-23 BGP團體組網圖

(1) 配置各接口的IP地址(略)
(2) 配置EBGP
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 10
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 200.1.2.2 as-number 20
[SwitchA-bgp] network 9.1.1.0 255.255.255.0
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 20
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 200.1.2.1 as-number 10
[SwitchB-bgp] peer 200.1.3.2 as-number 30
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 30
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 200.1.3.1 as-number 20
[SwitchC-bgp] quit
# 查看Switch B的路由表。
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 20
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 200.1.2.1 (1.1.1.1)
Original nexthop: 200.1.2.1
AS-path : 10
Origin : igp
Attribute value : MED 0, pref-val 0, pre 255
State : valid, external, best,
Advertised to such 1 peers:
200.1.3.2
可以看出,Switch B把收到的路由發布給了位於AS 30內的Switch C。
# 查看Switch C的路由表。
[SwitchC] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 3.3.3.3
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 9.1.1.0/24 200.1.3.1 0 0 20 10i
從路由表可以確認,Switch C從Switch B那裏學到了目的地址為9.1.1.0/24的路由。
(3) 配置BGP團體屬性
# 配置路由策略。
[SwitchA] route-policy comm_policy permit node 0
[SwitchA-route-policy] apply community no-export
[SwitchA-route-policy] quit
# 應用路由策略。
[SwitchA] bgp 10
[SwitchA-bgp] peer 200.1.2.2 route-policy comm_policy export
[SwitchA-bgp] peer 200.1.2.2 advertise-community
# 查看Switch B的路由表。
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 20
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 200.1.2.1 (1.1.1.1)
Original nexthop: 200.1.2.1
Community : No-Export
AS-path : 10
Origin : igp
Attribute value : MED 0, pref-val 0, pre 255
State : valid, external, best,
Not advertised to any peers yet
在Switch B的BGP路由表中可以看到配置的團體屬性。此時在Switch C的BGP路由表中已經沒有到目的地址9.1.1.0/24的路由。
所有交換機運行BGP協議,Switch A與Switch B建立EBGP連接,Switch C與Switch B和Switch D之間建立IBGP連接。
Switch C作為路由反射器,Switch B和Switch D為Switch C的客戶機。
Switch D能夠通過Switch C學到路由1.0.0.0/8。
圖1-24 配置BGP路由反射器的組網圖

(1) 配置各接口的IP地址(略)
(2) 配置BGP連接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 192.1.1.2 as-number 200
# 通告1.0.0.0/8網段路由到BGP路由表中。
[SwitchA-bgp] network 1.0.0.0
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 200
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 192.1.1.1 as-number 100
[SwitchB-bgp] peer 193.1.1.1 as-number 200
[SwitchB-bgp] peer 193.1.1.1 next-hop-local
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 200
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 193.1.1.2 as-number 200
[SwitchC-bgp] peer 194.1.1.2 as-number 200
[SwitchC-bgp] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 200
[SwitchD-bgp] router-id 4.4.4.4
[SwitchD-bgp] peer 194.1.1.1 as-number 200
[SwitchD-bgp] quit
(3) 配置路由反射器
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.2 reflect-client
[SwitchC-bgp] peer 194.1.1.2 reflect-client
[SwitchC-bgp] quit
(4) 驗證配置效果
# 查看Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 200.1.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.0.0.0 192.1.1.1 0 0 100i
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 200.1.2.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
i 1.0.0.0 193.1.1.2 0 100 0 100i
可以看出,Switch D從Switch C已經學到了1.0.0.0/8路由。
AS 200中有多台BGP交換機,為了減少IBGP的連接數,現將他們劃分為3個子自治係統:AS 65001、AS 65002和AS 65003。其中AS 65001內的三台交換機建立IBGP全連接。
圖1-25 配置聯盟組網圖

|
設備 |
接口 |
IP地址 |
設備 |
接口 |
IP地址 |
|
Switch A |
Vlan-int100 |
200.1.1.1/24 |
Switch D |
Vlan-int200 |
10.1.5.1/24 |
|
|
Vlan-int200 |
10.1.1.1/24 |
|
Vlan-int400 |
10.1.3.2/24 |
|
|
Vlan-int300 |
10.1.2.1/24 |
Switch E |
Vlan-int200 |
10.1.5.2/24 |
|
|
Vlan-int400 |
10.1.3.1/24 |
|
Vlan-int500 |
10.1.4.2/24 |
|
|
Vlan-int500 |
10.1.4.1/24 |
Switch F |
Vlan-int100 |
200.1.1.2/24 |
|
Switch B |
Vlan-int200 |
10.1.1.2/24 |
|
Vlan-int600 |
9.1.1.1/24 |
|
Switch C |
Vlan-int300 |
10.1.2.2/24 |
|
||
(1) 配置各接口的IP地址(略)
(2) 配置BGP聯盟
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 65001
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] confederation id 200
[SwitchA-bgp] confederation peer-as 65002 65003
[SwitchA-bgp] peer 10.1.1.2 as-number 65002
[SwitchA-bgp] peer 10.1.1.2 next-hop-local
[SwitchA-bgp] peer 10.1.2.2 as-number 65003
[SwitchA-bgp] peer 10.1.2.2 next-hop-local
[SwitchA-bgp] quit
# 配置Switch B。
<SwitchB> system-view
[SwitchB] bgp 65002
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] confederation id 200
[SwitchB-bgp] confederation peer-as 65001 65003
[SwitchB-bgp] peer 10.1.1.1 as-number 65001
[SwitchB-bgp] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] bgp 65003
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] confederation id 200
[SwitchC-bgp] confederation peer-as 65001 65002
[SwitchC-bgp] peer 10.1.2.1 as-number 65001
[SwitchC-bgp] quit
(3) 配置AS 65001內的IBGP連接
# 配置Switch A。
[SwitchA] bgp 65001
[SwitchA-bgp] peer 10.1.3.2 as-number 65001
[SwitchA-bgp] peer 10.1.3.2 next-hop-local
[SwitchA-bgp] peer 10.1.4.2 as-number 65001
[SwitchA-bgp] peer 10.1.4.2 next-hop-local
[SwitchA-bgp] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] bgp 65001
[SwitchD-bgp] router-id 4.4.4.4
[SwitchD-bgp] confederation id 200
[SwitchD-bgp] peer 10.1.3.1 as-number 65001
[SwitchD-bgp] peer 10.1.5.2 as-number 65001
[SwitchD-bgp] quit
# 配置Switch E。
<SwitchE> system-view
[SwitchE] bgp 65001
[SwitchE-bgp] router-id 5.5.5.5
[SwitchE-bgp] confederation id 200
[SwitchE-bgp] peer 10.1.4.1 as-number 65001
[SwitchE-bgp] peer 10.1.5.1 as-number 65001
[SwitchE-bgp] quit
(4) 配置AS 100和AS 200之間的EBGP連接
# 配置Switch A。
[SwitchA] bgp 65001
[SwitchA-bgp] peer 200.1.1.2 as-number 100
[SwitchA-bgp] quit
# 配置Switch F。
<SwitchF> system-view
[SwitchF] bgp 100
[SwitchF-bgp] router-id 6.6.6.6
[SwitchF-bgp] peer 200.1.1.1 as-number 200
[SwitchF-bgp] network 9.1.1.0 255.255.255.0
[SwitchF-bgp] quit
(5) 驗證配置結果
# 查看Switch B的BGP路由表。
[SwitchB] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 2.2.2.2
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 9.1.1.0/24 10.1.1.1 0 100 0 (65001) 100i
[SwitchB] display bgp routing-table 9.1.1.0
BGP local router ID : 2.2.2.2
Local AS number : 65002
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 10.1.1.1 (1.1.1.1)
Relay Nexthop : 0.0.0.0
Original nexthop: 10.1.1.1
AS-path : (65001) 100
Origin : igp
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, external-confed, best,
Not advertised to any peers yet
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 1
BGP Local router ID is 4.4.4.4
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 9.1.1.0/24 10.1.3.1 0 100 0 100i
[SwitchD] display bgp routing-table 9.1.1.0
BGP local router ID : 4.4.4.4
Local AS number : 65001
Paths: 1 available, 1 best
BGP routing table entry information of 9.1.1.0/24:
From : 10.1.3.1 (1.1.1.1)
Relay Nexthop : 0.0.0.0
Original nexthop: 10.1.3.1
AS-path : 100
Origin : igp
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Not advertised to any peers yet
通過以上顯示信息可以看出:
l Switch F隻需要和Switch A建立EBGP連接,而不需要和Switch B、Switch C建立連接,同樣可以通過聯盟將路由信息傳遞給Switch B和Switch C。
l Switch B和Switch D在同一個聯盟裏,但是屬於不同的子自治域,它們都是通過Switch A來獲取外部路由信息,生成的BGP路由表項也是一致的,等效於在同一個自治域內,但是又不需要物理上全連接。
所有交換機都運行BGP協議。Switch A與Switch B和Switch C之間運行EBGP;Switch D與Switch B和Switch C之間運行IBGP。
AS 200中運行OSPF協議。
配置不同的路由策略,使得Switch D優選Switch C學到的1.0.0.0/8路由。
圖1-26 配置BGP路徑選擇的組網圖

|
接口 |
IP地址 |
設備 |
接口 |
IP地址 |
|
|
Switch A |
Vlan-int101 |
1.0.0.0/8 |
Switch D |
Vlan-int400 |
195.1.1.1/24 |
|
|
Vlan-int100 |
192.1.1.1/24 |
|
Vlan-int300 |
194.1.1.1/24 |
|
|
Vlan-int200 |
193.1.1.1/24 |
Switch C |
Vlan-int400 |
195.1.1.2/24 |
|
Switch B |
Vlan-int100 |
192.1.1.2/24 |
|
Vlan-int200 |
193.1.1.2/24 |
|
|
Vlan-int300 |
194.1.1.2/24 |
|
||
(1) 配置各接口的IP地址(略)
(2) 配置Switch B、Switch C和Switch D之間運行OSPF協議
# 配置Switch B。
<SwitchB> system-view
[SwitchB] ospf
[SwitchB-ospf] area 0
[SwitchB-ospf-1-area-0.0.0.0] network 192.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] network 194.1.1.0 0.0.0.255
[SwitchB-ospf-1-area-0.0.0.0] quit
[SwitchB-ospf-1] quit
# 配置Switch C。
<SwitchC> system-view
[SwitchC] ospf
[SwitchC-ospf] area 0
[SwitchC-ospf-1-area-0.0.0.0] network 193.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] network 195.1.1.0 0.0.0.255
[SwitchC-ospf-1-area-0.0.0.0] quit
[SwitchC-ospf-1] quit
# 配置Switch D。
<SwitchD> system-view
[SwitchD] ospf
[SwitchD-ospf] area 0
[SwitchD-ospf-1-area-0.0.0.0] network 194.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] network 195.1.1.0 0.0.0.255
[SwitchD-ospf-1-area-0.0.0.0] quit
[SwitchD-ospf-1] quit
(3) 配置BGP連接
# 配置Switch A。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] peer 192.1.1.2 as-number 200
[SwitchA-bgp] peer 193.1.1.2 as-number 200
# 將1.0.0.0/8網段通告到Switch A的BGP路由表中。
[SwitchA-bgp] network 1.0.0.0 8
[SwitchA-bgp] quit
# 配置Switch B。
[SwitchB] bgp 200
[SwitchB-bgp] peer 192.1.1.1 as-number 100
[SwitchB-bgp] peer 194.1.1.1 as-number 200
[SwitchB-bgp] quit
# 配置Switch C。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.1 as-number 100
[SwitchC-bgp] peer 195.1.1.1 as-number 200
[SwitchC-bgp] quit
# 配置Switch D。
[SwitchD] bgp 200
[SwitchD-bgp] peer 194.1.1.2 as-number 200
[SwitchD-bgp] peer 195.1.1.2 as-number 200
[SwitchD-bgp] quit
(4) 通過配置1.0.0.0/8路由的不同屬性值,使得Switch D優選Switch C學到的路由。
l 方法一:在Switch A上對發布給對等體192.1.1.2的1.0.0.0/8路由配置較高的MED屬性值,使得Switch D優選Switch C學到的路由。
# 定義編號為2000的ACL,允許路由1.0.0.0/8通過。
[SwitchA] acl number 2000
[SwitchA-acl-basic-2000] rule permit source 1.0.0.0 0.255.255.255
[SwitchA-acl-basic-2000] quit
# 定義兩個Route-policy,一個名為apply_med_50,為路由1.0.0.0/8設置MED屬性值為50;另一個名為apply_med_100,為路由1.0.0.0/8設置MED屬性值為100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 50
[SwitchA-route-policy] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 100
[SwitchA-route-policy] quit
# 對發布給對等體193.1.1.2(SwitchC)的路由應用名為apply_med_50的Route-policy,對發布給對等體192.1.1.2(SwitchB)的路由應用名為apply_med_100的Route-policy。
[SwitchA] bgp 100
[SwitchA-bgp] peer 193.1.1.2 route-policy apply_med_50 export
[SwitchA-bgp] peer 192.1.1.2 route-policy apply_med_100 export
[SwitchA-bgp] quit
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 2
BGP Local router ID is 194.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.0.0.0 193.1.1.1 50 100 0 100i
* i 192.1.1.1 100 100 0 100i
可以看到,Switch D從Switch C學到1.0.0.0/8的路由是最優的。
l 方法二:在Switch B和Switch C上分別對1.0.0.0/8路由配置不同的本地優先級,使得Switch D優選Switch C學到的路由。
# 在Switch C上定義編號為2000的ACL,允許1.0.0.0/8路由通過。
[SwitchC] acl number 2000
[SwitchC-acl-basic-2000] rule permit source 1.0.0.0 0.255.255.255
[SwitchC-acl-basic-2000] quit
# 在Switch C上定義名為localpref的Route-policy,設置路由1.0.0.0/8的本地優先級為200(缺省的本地優先級為100)。
[SwitchC] route-policy localpref permit node 10
[SwitchC-route-policy] if-match acl 2000
[SwitchC-route-policy] apply local-preference 200
[SwitchC-route-policy] quit
# 為從BGP對等體193.1.1.1的路由應用名為localpref的Router-policy。
[SwitchC] bgp 200
[SwitchC-bgp] peer 193.1.1.1 route-policy localpref import
[SwitchC-bgp] quit
# 查看Switch D的BGP路由表。
[SwitchD] display bgp routing-table
Total Number of Routes: 2
BGP Local router ID is 194.1.1.1
Status codes: * - valid, ^ - VPNv4 best, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 1.0.0.0 193.1.1.1 0 200 0 100i
* i 192.1.1.1 0 100 0 100i
可以看到,Switch D從Switch C學到1.0.0.0/8的路由是最優的。
如圖1-27所示,所有路由器均運行BGP協議,Switch A和Switch B之間建立EBGP連接,Switch B和Switch C之間建立IBGP全連接。現要求實現即便Switch B發生主備倒換,也不會影響Switch A和Switch C之間正在進行的數據傳輸。
圖1-27 BGP GR配置組網圖

(1) Switch A的配置
# 配置各接口的IP地址(略)。
# 配置Switch A與Switch B的EBGP連接。
<SwitchA> system-view
[SwitchA] bgp 65008
[SwitchA-bgp] router-id 1.1.1.1
[SwitchA-bgp] peer 200.1.1.1 as-number 65009
# 將8.0.0.0/8網段路由通告到BGP路由表中。
[SwitchA-bgp] network 8.0.0.0
# 使能BGP GR功能。
[SwitchA-bgp] graceful-restart
(2) Switch B的配置
# 配置各接口的IP地址(略)。
# 配置Switch B與Switch A的EBGP連接。
<SwitchB> system-view
[SwitchB] bgp 65009
[SwitchB-bgp] router-id 2.2.2.2
[SwitchB-bgp] peer 200.1.1.2 as-number 65008
# 配置Switch B與Switch C的IBGP連接。
[SwitchB-bgp] peer 9.1.1.2 as-number 65009
# 將200.1.1.0/24和9.1.1.0/24網段路由通告到BGP路由表中。
[SwitchB-bgp] network 200.1.1.0 24
[SwitchB-bgp] network 9.1.1.0 24
# 使能BGP GR功能。
[SwitchB-bgp] graceful-restart
(3) Switch C的配置
# 配置各接口的IP地址(略)。
# 配置Switch C與Switch B的IBGP連接。
<SwitchC> system-view
[SwitchC] bgp 65009
[SwitchC-bgp] router-id 3.3.3.3
[SwitchC-bgp] peer 9.1.1.1 as-number 65009
# 使能BGP GR功能。
[SwitchC-bgp] graceful-restart
在Switch A上ping Switch C,同時在Switch B上觸發主備倒換,可以發現在整個倒換過程中Switch A都可以ping通Switch C。
l 在AS 200內使用OSPF作為IGP協議;
l Switch A與Switch C建立兩條IBGP連接。當Switch A與Switch C之間的兩條鏈路均連通時,Switch C與1.1.1.0/24之間的報文使用Switch A<->Switch B<->Switch C這條路徑;當Switch A<->Switch B<->Switch C鏈路故障時,BFD能夠快速檢測並通告BGP協議,使得Switch A<->Switch D<->Switch C這條路徑能夠迅速生效。
圖1-28 配置BGP與BFD聯動組網圖

|
設備 |
接口 |
IP地址 |
設備 |
接口 |
IP地址 |
|
Switch A |
Vlan-int100 |
3.0.1.1/24 |
Switch C |
Vlan-int101 |
3.0.2.2/24 |
|
|
Vlan-int200 |
2.0.1.1/24 |
|
Vlan-int201 |
2.0.2.2/24 |
|
Switch B |
Vlan-int100 |
3.0.1.2/24 |
Switch D |
Vlan-int200 |
2.0.1.2/24 |
|
|
Vlan-int101 |
3.0.2.1/24 |
|
Vlan-int201 |
2.0.2.1/24 |
(1) 配置各接口的IP地址(略)
(2) 配置OSPF(略),保證Switch A和Switch C之間路由可達
(3) Switch A上的BGP配置
# 配置Switch A和Switch C建立兩條IBGP連接。
<SwitchA> system-view
[SwitchA] bgp 100
[SwitchA-bgp] peer 3.0.2.2 as-number 200
[SwitchA-bgp] peer 2.0.2.2 as-number 200
[SwitchA-bgp] quit
# 配置當Switch A與Switch C之間的兩條鏈路均連通時,Switch C與1.1.1.0/24之間的報文使用Switch A<->Switch B<->Switch C這條路徑。(在Switch A上對發布給對等體2.0.2.2的1.1.1.0/24路由配置較高的MED屬性值)
l 定義編號為2000的ACL,允許路由1.1.1.0/24通過。
[SwitchA] acl number 2000
[SwitchA-acl-basic-2000] rule permit source 1.1.1.0 24
[SwitchA-acl-basic-2000] quit
l 定義兩個Route-policy,一個名為apply_med_50,為路由1.1.1.0/24設置MED屬性值為50;另一個名為apply_med_100,為路由1.1.1.0/24設置MED屬性值為100。
[SwitchA] route-policy apply_med_50 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 50
[SwitchA-route-policy] quit
[SwitchA] route-policy apply_med_100 permit node 10
[SwitchA-route-policy] if-match acl 2000
[SwitchA-route-policy] apply cost 100
[SwitchA-route-policy] quit
l 對發布給對等體3.0.2.2的路由應用名為apply_med_50的Route-policy,對發布給對等體2.0.2.2的路由應用名為apply_med_100的Route-policy。
[SwitchA] bgp 100
[SwitchA-bgp] peer 3.0.2.2 route-policy apply_med_50 export
[SwitchA-bgp] peer 2.0.2.2 route-policy apply_med_100 export
# 配置當Switch A<->Switch B<->Switch C鏈路故障時,BFD能夠快速檢測並通告BGP協議,使得Switch A<->Switch D<->Switch C這條路徑能夠迅速生效。
[SwitchA-bgp] peer 3.0.2.2 bfd
[SwitchA-bgp] quit
(4) Switch C上的BGP配置。
<SwitchC> system-view
[SwitchC] bgp 100
[SwitchC-bgp] peer 3.0.1.1 as-number 200
[SwitchC-bgp] peer 3.0.1.1 bfd
[SwitchC-bgp] peer 2.0.1.1 as-number 200
[SwitchC-bgp] quit
(5) 配置各路由器接口及BFD參數(該步驟可省略,使用BFD參數的缺省值即可)
# 配置Switch A。
[SwitchA] bfd session init-mode active
[SwitchA] interface vlan-interface 100
l 配置發送BFD控製報文的最小時間間隔為500毫秒。
[SwitchA-Vlan-interface100] bfd min-transmit-interval 500
l 配置接收BFD控製報文的最小時間間隔為500毫秒。
[SwitchA-Vlan-interface100] bfd min-receive-interval 500
l 配置BFD報文最大失效的個數為7。
[SwitchA-Vlan-interface100] bfd detect-multiplier 7
l 配置接口建立BFD會話時需要認證,采用明文認證方式方式,密碼為ibgpbfd。
[SwitchA-Vlan-interface100] bfd authentication-mode simple 1 ibgpbfd
[SwitchA-Vlan-interface100] quit
# 配置Switch C。
[SwitchC] bfd session init-mode active
[SwitchC] interface vlan-interface 101
[SwitchC-Vlan-interface101] bfd min-transmit-interval 500
[SwitchC-Vlan-interface101] bfd min-receive-interval 500
[SwitchC-Vlan-interface101] bfd detect-multiplier 7
[SwitchC-Vlan-interface101] bfd authentication-mode simple 1 ibgpbfd
[SwitchC-Vlan-interface101] return
(6) 結果驗證
下麵以Switch C為例,Switch A和Switch C類似,不再贅述。
# 顯示Switch C的BFD信息。
<SwitchC> display bfd session verbose
Total Session Num: 1 Init Mode: Active
IP Session Working Under Ctrl Mode:
Local Discr: 17 Remote Discr: 13
Source IP: 3.0.2.2 Destination IP: 3.0.1.1
Session State: Up Interface: Vlan-interface101
Min Trans Inter: 500ms Act Trans Inter: 500ms
Min Recv Inter: 500ms Act Detect Inter: 3000ms
Recv Pkt Num: 57 Send Pkt Num: 53
Hold Time: 2200ms Connect Type: Indirect
Running Up for: 00:00:06 Auth mode: Simple
Protocol: BGP6
Diag Info: No Diagnostic
以上顯示信息表明:Switch A的VLAN接口100和Switch C的VLAN接口101之間已經建立了BFD連接,而且BFD協議運行正常。
# 在Switch C上查看BGP鄰居信息,可以看出Switch A和Switch C之間BGP鄰居處於Established狀態。
<SwitchC> display bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 200
Total number of peers : 2 Peers in established state : 2
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
2.0.1.1 200 7 10 0 0 00:01:05 Established
3.0.1.1 200 7 10 0 0 00:01:34 Established
# 在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch A和Switch C是通過Switch B進行通信的。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Routing Table : Public
Summary Count : 2
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 50
NextHop: 3.0.1.1 Interface: Vlan-interface101
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 3.0.2.1 Neighbor : 3.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Active Adv Age: 00h08m54s
Tag: 0
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 100
NextHop: 2.0.1.1 Interface: Vlan-interface201
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 2.0.2.1 Neighbor : 2.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Invalid Adv Age: 00h08m54s
Tag: 0
以上顯示信息表明:Switch C到達1.1.1.0/24網段有兩條路徑:當前生效的是Switch A<->Switch B<->Switch C,Switch A<->Switch D<->Switch C這條路徑沒有生效。
# 打開Switch C的調試開關。
<SwitchC> debugging bfd scm
<SwitchC> debugging bfd event
<SwitchC> debugging bgp bfd
<SwitchC> terminal monitor
<SwitchC> terminal debugging
# Switch A和Switch B之間的鏈路發生故障後。可以看到Switch C能夠快速檢測到鏈路的變化。
%Nov 5 11:42:24:172 2009 SwitchC BFD/5/BFD_CHANGE_FSM: Sess[3.0.2.2/3.0.1.1, 13/17,VLAN101,Ctrl], Sta: UP->DOWN, Diag: 1
%Nov 5 11:42:24:172 2009 SwitchC BGP/5/BGP_STATE_CHANGED: 3.0.1.1 state is changed from ESTABLISHED to IDLE.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Recv BFD DOWN msg, Src IP 3.0.2.2, Dst IP 3.0.1.1, Instance ID 0.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Reset BGP session 3.0.1.1 for BFD session down.
*Nov 5 11:42:24:187 2009 SwitchC RM/6/RMDEBUG: BGP_BFD: Send DELETE msg to BFD, Connection type DIRECT, Src IP 3.0.2.2, Dst IP 3.0.1.1, Instance ID 0.
# 在Switch C上查看1.1.1.0/24的路由信息,可以看出Switch A和Switch C是通過Switch D進行通信的。
<SwitchC> display ip routing-table 1.1.1.0 24 verbose
Routing Table : Public
Summary Count : 1
Destination: 1.1.1.0/24
Protocol: BGP Process ID: 0
Preference: 0 Cost: 100
NextHop: 2.0.1.1 Interface: Vlan-interface201
BkNextHop: 0.0.0.0 BkInterface:
RelyNextHop: 2.0.2.1 Neighbor : 2.0.1.1
Tunnel ID: 0x0 Label: NULL
State: Active Adv Age: 00h09m54s
Tag: 0
以上顯示信息表明:Switch C到達1.1.1.0/24網段有一條路徑:Switch A<->Switch D<->Switch C。
使用display bgp peer命令查看BGP對等體的信息,發現與對端的連接無法進入Established狀態。
BGP鄰居的建立需要能夠使用179端口建立TCP會話,以及能夠正確交換Open消息。
(1) 用display current-configuration命令檢查鄰居的AS號配置是否正確。
(2) 用display bgp peer命令檢查鄰居的IP地址是否正確。
(3) 如果使用Loopback接口,檢查是否配置了peer connect-interface命令。
(4) 如果是物理上非直連的EBGP鄰居,檢查是否配置了peer ebgp-max-hop命令。
(5) 檢查路由表中是否存在到鄰居的可用路由。
(6) 使用ping命令檢查鏈路是否暢通。
(7) 使用display tcp status命令檢查TCP連接是否正常。
(8) 檢查是否配置了禁止TCP端口179的ACL。
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!
