當前位置:
首頁 > 最新 > BGP Confederation原理實踐

BGP Confederation原理實踐

過對路由反射器相關知識的學習,我們知道:路由反射是通過放鬆RR的iBGP通告規則來解決大型AS內的IBGP擴展性問題。這些IBGP路由器(RRs)們可以在它們所「服務」的RR-CLIENT以及NON-CLIENTs之間反射路由,於是,RR-CLIENTs只需跟RRs建立對等關係(最大程度地精簡了IBGP鄰居構建的會話網)。

那麼筆者告訴你,使用聯盟也同樣可以解決上述講的「解決大型AS內的IBGP擴展性」問題,只不過聯盟是從另外一個角度用另外一種思路去解決而己。

通過對路由反射器解決方案的了解,我們己然見識了「她」在處理解決大型AS內的IBGP擴展性一系列相關問題的強大之處,上句話筆者又告訴你們聯盟技術在解決此問題可以與路由反射器技術媲美,那各位一定會好奇這個聯盟到底何方神聖?她在處理「大型AS內的IBGP擴展性」到底又如何工作的呢?能跟我們講講這個「聯盟」嗎?

好,既然關於「聯盟」的話題己打開,那筆者就以本文來跟各位聊聊.......

聯盟通過把大的AS分成多個更小的AS來解決IBGP全互連的問題,那麼這些被「分解」出來的AS在聯盟中給了它們一個專業的術語,叫做「成員自治系統(member autonomous system)」或者「子自治系統(subautonomous system)」。因為成員ASs之間使用eBGP會話,因此它們不需要全互連。但是呢,「在每一個成員AS中IBGP全互連的要求仍然需要」這一點我們依然要心中有數。

聯盟中的eBGP會話和常規的eBGP會話有點不同。為了區分它們,這種類型的eBGP會話叫做聯盟內eBGP會話(intraconfederation eBGP session)。當這種會話剛建立起來的時候,它還真表現得簡直就像eBGP會話一樣(換句話說,兩個BGP PEER都沒有做驗證以確定這個會話是否是真的eBGP會話還是聯盟eBGP會話,區別就發生在當通過會話傳播前綴的時候)。聯盟內eBGP會話在一方面遵循前綴通告的iBGP規則,在另一方面又遵循前綴通告的eBGP規則。例如,在發送更新的時候,NEXT_HOP、MED和LOCAL_PREF被保留,而AS_PATH被修改。

對於外部鄰居來說(聯盟外的PEER),子AS的拓撲是不可見的。也就是說,在發向eBGP鄰居的更新消息中,己經剝去了聯盟內己被修改的AS_PATH,從其它的AS來看,聯盟就像單個AS一樣。

每個成員AS中,IBGP全互連是需要的,路由反射也可以被部署。部署聯盟的一個明顯優勢就是其成員AS不需要使用相同的IGP協議。每個成員AS不需要向其它成員AS揭示自己的內部拓撲。不過,當使用不同的IGP時,每一個成員AS內必須保證BGP下一跳的可達性。

如上圖所示,一個聯盟由3種類型的對等體關係組成:

(1)外部對等體關係,比如R10和R12

(2)聯盟外部對等關係,比如R4與R8

(3)內部對等關係,比如R5與R6,R5與R7

上述文字能夠讓我們對聯盟有個基礎上的認知,那接下來筆者跟各位繼續來聊聊聯盟更深入一點的工作原理,主要體現在它對以下2個方面的處理事件上:

(1)AS_PATH的處理

(2)COMMUNITIES的處理

先聊聊聯盟(Confederation)對AS_PATH的處理機制吧,看下圖:

我們知道,AS_PATH是BGP針對AS間的防環機制。聯盟技術作為大型AS內的IBGP擴展性解決方案,那麼聯盟內的防環機制又是怎樣解決的呢?實際上,聯盟內的環路預防機制還是基於AS_PATH屬性的。那它是怎麼做到的呢?AS_PATH有4種Segment類型,BGP針對AS間的預防機制用的是AS_SEQUENCE和AS_SET這2種Segment;而另外2種「AS_CONFED_)SEQUENCE」和「AS_CONFED_SET」Segment就是用在聯盟內的環路預防了。筆者解釋一下吧:

AS_CONFED_SEQUENCE:本地聯盟中,路由穿過的成員AS號的有序ASN的集合;

AS_CONFED_SET:本地聯盟中,路由穿過的成員AS號的無序ASN的集合。

AS_PATH在聯盟內如何被更新取決於會話的類型。要理解決這句話,我們需要藉助於下圖,這樣可能更直觀:

筆者附上上述拓撲中關於聯盟的關鍵配置供參考:

看完配置,我們來分析一下相關原理:

上圖顯示了3種PEERINGS下AS_PATH的變化(為了簡化示意圖,上圖中僅顯示了單向通告)

聯盟內eBGP會話(Intraconfederation eBGP session):成員ASN被添加到AS_PATH中的AS_CONFED_SEQUENCE前面,比如更新從R2通告到R2的時候。

內部BGP會話(Internal BGP session):不修改AS_PATH,比如在R2到R1的路徑上就是這樣。

外部BGP會話(External BGP session):成員ASN從AS_PATH中被清除掉,而聯盟ID被添加到AS_PATH前面,如上圖中所顯示的從R3到R6的路徑一樣。

再接著看下圖:

聯盟中,AS_PATH中的AS_CONFED欄位用來防止成員AS間的路由選擇信息環路。比如上圖中,當R3向R4發回關於100.1.1.0/24更新消息時,由於65004己經出現在AS_PATH列表中,因此更新消息從R3發往R4,R4收到之後檢查AS_PATH後會拒絕(丟棄)此更新消息。

我們可以通過查看R3和R4上的BGP表項以及相關的調試信息加以理解:

講完這些,回頭我們再來看一下拓撲,聯盟(聯盟ID:123)將ASN 123分解成3個sub-AS(ASN分別為65003、65012、65004),一般情況下我們會給這些Sub-AS分配一個私有的ASN(範圍64512~65535),這是因為,聯盟內所使用的成員ASN不會被聯盟外部看到,不需要與官方的AS代表機構所分配的ASN協調。所以,所有的成員ASN在聯盟邊界上會被自動抹掉。可以在R6上查看100.1.1.0/24這條BGP路由的AS_PATH屬性:

聊完AS_PATH相關話題,我們繼續聊關於聯盟的另外一個技術話題:BGP聯盟對COMMUNITIES的處理。

組網基礎環境依然沿用上述拓撲不變:

現,筆者在R3的BGP路由表引入幾條路由並為其添加相應的COMMUNITY值,參考配置命令如下:

看完配置,現在問題來了:請問R3上新引入的5條BGP路由在此組網環境中分別能傳多遠?

【思路分析】通過查看R3上的配置,我們清楚,192.168.1.0~5.0/24這5條路由分別帶有「internet」、「no-advertise」、「no-export」、「no-export-subconfed」以及自定義COMMUNITY值「50:50」,因此,要得出這5條路由能在此組網環境中傳多遠,只需搞清楚如上的5個COMMUNITY屬性值所賦予這些BGP路由的含義即可,對吧!

關於BGP的COMMUNITY屬性,分為標準Community和Extended Community。這5個Community當中,是筆者給192.168.5.0/24這條前綴自定義的一個Community值,在此拓撲中,只要BGP路由器同時滿足以下2個條件即會通告給它的PEERs:

(1)攜帶Community值的這條5.0前綴被選為最best路由;

(2)BGP路由器進程中開啟了advertise-community功能選項。

而自定義Community屬性與本文講述的聯盟沒有太直接的關係(本文並非專門講BGP COMMUNITY),因此跳過這個Community。

那麼就還剩下4個:internet、no-advertise、no-export和no-export-subconfed。internet、no-advertise和no-export這3個標準的Community通過前面的BGP課程學習相信各位並不陌生,筆者在此再重複一下:

internet:可以向任何對等體發送匹配的路由。預設情況下,所有的路由都屬於Internet團體。

no-advertise:不向任何對等體發送匹配的路由。即收到具有此屬性的路由後,不能發布給任何其他的BGP對等體。

no-export:不向AS外發送匹配的路由,但發布給其它子自治系統。即收到具有此屬性的路由後,不能發布到本地AS之外。

那麼,很顯然,最後剩下的「no-export-subconfed」就與聯盟有關了(從subconfed字面上也能看出個幾分來吧),如果一條路由攜帶此community屬性值,那它會表示什麼意思呢?其含義如下:

no-export-subconfed:表示不向AS外發送匹配的路由,也不發布給其它子自治系統。即收到具有此屬性的路由後,不能發布給任何其他的子自治系統。

怎麼理解這句話?「不向AS外發送匹配的路由」,意思就是BGP路由器在收到攜帶此community屬性值的路由是不會向它的外部(EBGP)鄰居通告此路由的,這句話很好理解,再看,「也不發布給其它子自治系統」BGP路由器在收到具有此屬性的路由後不能發布給任何其他的子自治系統,此處的「子自治系統」即為聯盟中的Sub-ASs,說得更白話一點就是只傳一跳聯盟eBGP鄰居,與no-export值在BGP AS間的傳遞特性一樣,明白?!

有了這些基礎之後,那我們再來看這個問題就很清晰明了咯:在聯盟123中,R1將4.0路由通告給它的2個聯盟eBGP鄰居R1和R4,R1和R4收到帶有"no-export-subconfed"Community值的該路由,就不會再繼續往下通告給它們各自的聯盟eBGP鄰居了(如果有的話),聯盟的eBGP鄰居都不會通告了,那eBGP鄰居就更不會通告了。當然R1會將此路由通告給它的聯盟iBGP鄰居R2,這個不受此約束,還是遵循正常的iBGP路由通告規則,僅限一跳。

好了,現在我們借著組網環境,直接看除R3之外的其它各路由器的BGP路由表信息,看懂(理解)下面的表項應該不難了:

說明:各位請不要奇怪R1上不帶「>」的路由,因為還有其它路由比它更優。那,既然不是最優路由,根本BGP路由器的只向PEERs通告最優路由的通告原則,那麼2.0和5.0這二條分別帶有「no-advertise」和「50:50」COMMUNITY值的路由就不會被R1通告給它的PEER(R1)了,既然R1上都沒有,那R1自然也就不會通告給它的PEER(R4)了>

到此,關於BGP聯盟技術的基礎原理部分就可以收官了,關於聯盟技術的其它部分,咱們後續文章見。

最後,筆者象徵性地留個小思考題目吧:關於192.168.x.0/24這5條BGP前綴由R3引入,那麼請問在其它BGP設備上的BGP-RIB中會是什麼情況呢,比如R2這台BGP路由器?

筆者提醒:注意此組網環境中聯盟123中的冗餘路徑......

就聊到這吧,希望各位快樂!

在碼字的過程中,難免會有一些小的筆誤,如有,歡迎小夥伴們及時地提出來,便於筆者重新校對,糾正,感謝!

如果有什麼學習上的疑問,可以在筆者的公眾號中留言

ONE NETWORKS

開放 | 創新 | 協作 | 分享

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 羅軍 的精彩文章:

TAG:羅軍 |