再談BGP Confederation與Route Reflection
Confederation/聯盟是在AS內限制IBGP會話網激增的另外一種手段。與路由反射的用法相同,只有當AS內的每台路由器都需要建立大量IBGP對等會話時,才推薦使用聯盟。
BGP Confederation的概念來自於將一個AS劃分為多個Sub-AS的理念。在每個子AS內部,所有IBGP規則全部適用。例如,Sub-AS內部的所有路由器都必須建立全互連的IBGP會話。因為每個Sub-AS的ASN各不相同,所以Sub-AS之間必須建立eBGP會話。儘管在Sub-AS之間運行了eBGP,但Confederation內部路由選擇的運作方式類似於單個AS之內的IBGP路由選擇。換言之,在跨越Sub-AS邊界交換路由時,路由的MED、NEXT_HOP以及LOCAL_PREF等屬性都會原封不動。對外部網路來說,聯盟看起來就像是一個單獨的AS。
看一個聯盟組網示例,如下:
上圖中的ASN 1024被劃分為2個Sub-ASs:ASN 65123和ASN 65045。在整體上,ASN 1024就是一個大的聯盟,由單個聯盟號1024來標識。對外部網路來說,所有的Sub-ASs都不可見(比如ASN 65045等),也因此我們可以為Sub-ASs分配任意的ASN,但為了不佔用公有的ASN,還是建議Sub-ASN取自RFC1930中定義的私有ASN範圍(64512~65534)。
如前所述,Sub-ASs內的BGP路由器必須建立全互連的IBGP會話。各Sub-AS之間,聯盟自身與外部AS之間都必須建立eBGP會話。也正因為在各Sub-AS之間運行了eBGP,因此在聯盟內使用AS_PATH就可以輕而易舉地檢測到整個AS內的路由環路(Sub-AS會檢測其接收的路由更新中是否含有自己的子ASN)。
儘管聯盟的Sub-AS之間通過eBGP傳遞路由,但為了讓整個AS依然像單個路由進程域那樣運作,所有的iBGP規則仍然適用。與MED和LOCAL_PREF值一樣,路由的eBGP NEXT_HOP也仍然是不加改變地在AS內傳遞。但值得我們注意的一點是,一旦引入聯盟方案,隨之就在Sub-ASs之間引入了一種新型eBGP路由,我們稱之為聯盟外部路由。在BGP選路決策演算法上相應地就發生了些許規則變化,BGP路由器會按如下方式優選路由:
由此:
如若BGP設備學到2條通往同一目標地的路由:一條路由通向聯盟外部,另一條則穿越整個聯盟。在了解上述BGP聯盟選路規則之後,你就會很清楚設備為何會優選前者(leading outside the confederation)了。
如若BGP分別從Sub-AS之內和Sub-AS之外學到2條通往同一目的地的路由,BGP設備同樣會選擇通向Sub-AS之外的路由(在其它選路規則屬性相同的情況下)。
金無赤足,從筆者的前篇文章「BGP Confederation原理實踐」再加上本文開篇的一些「拾漏補遺」,各位應當能夠感受聯盟技術在「解決大型AS內的IBGP全互連」問題上所呈現出來的強大能力(劃分多Sub-ASs的理念)。
但是,僅了解上述知識點還有些不夠,我們還需足夠清楚聯盟技術的相關不足之處,這樣才能做到當我們在做一個大型BGP網路規劃設計時選擇技術時做出正確合理地決策方案。
首先,相較於同樣優秀的路由反射器技術,聯盟在對設備的配置量這方面,那絕對比路由反射器方案要大很多。當然,這點也僅僅是對於網路設備配置管理員而言,從技術角度著實看出不聯盟的劣勢。但是,接下來就是筆者要講的關於聯盟的一個主要缺點,當我們在對一個大型BGP網路做遷移方案時,從非聯盟向聯盟割接時,這時你會看到,部署聯盟方案會對路由器的配置及邏輯拓撲結構改動較大(相比於部署RR方案)。
其次,在不人為干預設置BGP策略的情況下,通過聯盟來執行路由選擇時,流量很有可能會選擇一條次優路徑,這也是部署聯盟方案的另外一個不足之處。
上述這2點,關於第1點很好理解,組網環境從全互連遷移至聯盟環境勢必需要改動組網的邏輯拓撲,各位可以自己用環境測試,筆者在此不做描述。需要展開細說的是第2點——部署聯盟環境有可能會帶來路徑次優問題如果不人為干預的話。
筆者就拿下面這個組網環境舉例說明:
如上圖所示,ASN 100是一個超大型的BGP自治系統,裡面有多台BGP設備,於是我們決定在ASN 100中部署聯盟技術,聯盟方案規劃完成後的組網拓撲如下:
聯盟100將ASN 100分解成3個Sub-AS:65010、65020和65030。
對於ASN 100來說,如果沒有部署聯盟技術,則路由選擇按照最短的AS_PATH來決定最優路徑。現在我們在ASN 100中部署了聯盟方案,那麼,對於ASN 100(聯盟100)來說,因為Sub-ASN不會影響路由總體的AS_PATH長度,所以這在ASN 100內很容易就出現次優路徑問題。不信的話,筆者挑一台路由器,比如聯盟子ASN 65030中的R7,它到達ASN 200中的目標網路100.1.1.0/24會有2條路徑,一條是它的聯盟IBGP鄰居R4通告給它的,另外一條是它的聯盟EBGP鄰居R1通告給它的。正常情況下它(R7)應該選擇走R1這條路徑,因為R4那條路徑經過了太多的其它路由器。但是因為「聯盟子AS號不會影響路由總體的AS_PATH長度(系統默認,當然我們可以通過命令人為修改這一規則)」,所以R7在比較R1與R4通告過來的這2條路由會直接跳過AS_PATH的比較,最終比較到Router_ID這個條件,那麼最後R7就看該路由上的R1和R4誰的RID大就優選誰咯。筆者給各位看下R7上關於100.1.1.0/24這條路由的BGP-RIB輸出情況:
從R7的輸出可以看到,R4和R1通告了100.1.1.0/24目標前綴給了R7,因為不比較聯盟子AS的AS_PATH,所以100.1.1.0/24這條路由對於R7來說,在它眼中AS_PATH長度為1,因此最終「not preferred for router ID」R4因RID大而惜敗。
好像並沒有出現次優路徑問題呀,R7是優選了R1這條路徑呢。你再仔細看一下,那是因為R1的RID要比R4的RID小所以R7優選了R1,那萬一R1的RID比R4的大呢,要不筆者改動一下試試看結果如何,如下:
是吧,R7上的輸出信息結果己經告訴了我們答案了——次優路徑就出來了呀。
對於聯盟子ASN 65030,AS_PATH{ 65010 }與{ 65020 65010 }長度一樣。要解決這個問題需要通過配置路由策略適當地干預ASN 65030中的BGP路由器(比如R7)的路由選擇行為,例如可以通過設置LOCAL_PREF值使得路由器優選AS_PATH為「65010」的路由,而棄用AS_PATH為「65020 65010」的路由。
還有另外一個「次優路徑」問題我們需要知道:我們知道聯盟對外顯現為一個單獨的AS,對一個要穿越聯盟來轉發流量的外部AS來說,這個外部AS對聯盟內部一無所知。對於根據AS_PATH長度進行路由選擇的外部AS,這必定會造成誤導。因此這也是關於部署聯盟方案所存在的另外一個「次優路徑」問題我們需要知道的,一如此組網方案中的ASN 300,它訪問目標網路100.1.1.0/24極有可能會選擇穿越聯盟100(ASN 100)這條路徑,我們可以到ASN 300上的R8去看一下其BGP-RIB的情況,如下:
果不其然,原因是該路徑似乎「看」起來要短於「繞道」ASN 400和ASN 500。然而聯盟100(ASN 100)這條路徑其實並不「短」,因為聯盟100是一條要穿越3個子AS「65030 65020 65010」的路徑,而另外一條實際上更優的路徑「ASN 400 ASN 500」只包含了2個AS。
對於上述這種情況,除非ASN 100聯盟自揭其「短」,否則ASN 300中的設備會被一直蒙在鼓裡。
當然,關於「次優路徑」的問題,我們是可以從問題的根源一開始就將其解決掉的——從聯盟拓撲規劃設計上。以人們過往的部署經驗表明,集中化的聯盟體系架構可以帶來最優的路由選擇行為。
如上的Hub-and-Spoke架構,在設計上我們讓聯盟中所有的Sub-ASs都只與另一個中心骨幹Sub-AS交換路由,這種設計會讓聯盟內各個Sub-AS的路由選擇行為更為統一。
看下面的這個組網拓撲設計示例:
如上,一個聯盟成員AS(ASN 65000)作為骨幹,它擔當Transit Sub-AS的作用,連接其它的聯盟成員AS。這種Hub-and-Spoke聯盟設計架構有如下優勢:
(a)其它的Sub-ASs不必相互直接連接,從而減少了聯盟內eBGP會話的數量;
(b)H-&-S架構有助於在聯盟內產生可預測的和一致的AS_PATH的結果。對於從一個非穿越聯盟成員AS到另一個非穿越聯盟成員AS的流量來說,它總是穿過了2跳AS。比如從ASN 65002來的流量經過2跳(65002 65000)到達ASN 65001。
筆者己經通過一系列的文章,匯總如下:
在此己經介紹完解決iBGP擴展性問題的2種解決方案:ConfederationandRoute Reflection。這2種方案都有它們各自的優缺點,那麼,我們在設計網路的時候,該如何確定使用哪一種方案呢?
一般而言:如果你需要擴展IGP協議,推薦使用聯盟技術;否則,只要條件允許還是建議使用路由反射以簡化網路的遷移和管理。
因為路由反射器的概念既簡單又兼具可擴展性,且實施起來也無需大量的開銷。在網路變更環境中從無路由反射器環境到路由反射器環境的割接遷移也極為方便,只需修改那些擔當路由反射器的路由器的配置,所以其它路由器可以照常運行無誤,此外,不擔當RR的BGP路由器(如RR-CLIENT或NON-CLIENT)仍是AS中的一員,不會丟失任何BGP路由信息。路由反射器己然被大型BGP網路所接受採納。
當然,萬事無絕對,在某些情況下,路由反射器也可以與聯盟技術搭配使用;或者聯盟與路由反射器技術二者結合使用,在AS劃分子AS的基礎上,再在有需求的相應子AS內部運行路由反射器,比如上述筆者用到的一個組網拓撲,如下:
上述組網拓撲中,筆者在聯盟子ASN 65030中就使用了路由反射器方案。
還是那句話:無論採用哪種技術/方案(路由反射器還是聯盟),我們都應該清楚理解兩者的約束和行為,這樣我們才能在網路部署實踐中「揚長避短」。
最後,筆者總結如下表供各位參考:
有關路由反射器和聯盟的內容筆者就跟各位暫時聊這些吧,
在碼字的過程中,難免會有一些小的筆誤,如有,歡迎小夥伴們及時地提出來,便於筆者重新校對,糾正,感謝!
如果有什麼學習上的疑問,可以在筆者的公眾號中留言
也可以加筆者的個人WX帳號( jacky_luojun)
ONE NETWORKS
開放 | 創新 | 協作 | 分享


TAG:羅軍 |