劉炎火


摘要:在網絡配置中,路由黑洞是比較常見的故障,特別是在邊界配置BGP路由時,經常出現路由黑洞,為了更好解決由于BGP配置而產生的路由黑洞,在本文中列舉了多種解決策略。
關鍵詞:路由黑洞;BGP;EBGP;IBGP;鄰居關系
中圖分類號:TP393 ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2020)17-0056-03
Abstract: In the network configuration, routing black hole is a common failure. A routing black hole often appears especially in BGP routing. In order to better solve the routing black hole caused by BGP configuration, this paper lists a variety of solutions.
Key words: routing black hole;BGP;ebgp; iBGP;neighbor relationship
在配置BGP的時候,最容易遇到的問題就是路由黑洞,那么什么是路由黑洞?簡單地說,它會默默地將數據包丟棄,使數據包有去無回。我們知道傳統的IP路由,它是通過逐跳查找路由信息,根據路由信息轉發數據包,通俗地說就是當數據包到達路由設備的時候,路由設備首先查找路由表,然后根據路由信息轉發數據包,當然,路由設備轉發數據包的前提是存在下一跳路由。對BGP來說,由于存在IBGP水平分割規則,這是一種防止環路機制,所以在BGP的設計上有些設備就不會運行BGP。BGP是一種TCP的連接或者說是一種host-to-host的連接,可以跨越設備進行連接,所以路由傳遞是沒有問題的,但是數據包的路由卻是有問題的。通常我們會出現是IBGP鄰居關系可以正常建立,也就是說控制平面看起來是正常的,但是數據平面確不可達,從而形成路由黑洞。接下來,我將解決BGP路由黑洞的幾種常見方法進行逐一介紹。
1 采用鄰居全互聯(Full-mesh)方式解決由IBGP水平分割導致的BGP路由黑洞問題
圖1所示,為了實現1.1.1.1<->5.5.5.5可以互相訪問,計劃在R1、R2、R4、R5跑BGP協議,R2、R3、R4跑OSPF協議。并且在R1<->R2、R4<->R5之間創建默認路由保證BGP鄰居關系的建立。配置完成之后,發現無法實現1.1.1.1<->5.5.5.5互相訪問,通過對設備路由信息的查詢,發現R3沒有1.1.1.1和5.5.5.5的路由條目。經過仔細分析配置策略,發現由于R3沒有啟用BGP配置,因此R2和R4均不會將路由條目傳給R3,導致R3沒有1.1.1.1和5.5.5.5的路由信息,最終出現路由黑洞。
經過對配置信息的分析和查閱相關資料,決定利用Full-mesh方式解決路由黑洞問題。解決方法就是在R3上配置BGP,與R2和R4建立完全BGP鄰居關系,通過IBGP學習到1.1.1.1和5.5.5.5的路由條目。配置完成之后,經測試完全實現1.1.1.1<->5.5.5.5互相訪問。利用Full-mesh方式解決路由黑洞配置拓撲圖如圖1所示。
具體實現過程:使用Peer Group簡化配置,節約內存,配置R2、R3、R4之間的IBGP,通過鄰居全互聯解決路由黑洞。R2、R3和R4相互建立鄰居關系,具體配置如下:
//R2與R3、R4建立鄰居關系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 3.3.3.3 peer-group slyar
neighbor 4.4.4.4 peer-group slyar
//R3與R2、R4建立鄰居關系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 2.2.2.2 peer-group slyar
neighbor 4.4.4.4 peer-group slyar
//R4與R2、R3建立鄰居關系
router bgp 200
neighbor slyar peer-group
neighbor slyar remote-as 200
neighbor slyar update-source Loopback0
neighbor slyar next-hop-self
neighbor 2.2.2.2 peer-group slyar
neighbor 3.3.3.3 peer-group slyar
利用Full-mesh方式解決路由黑洞,對于結構簡單的網絡沒有問題,但是要是網絡拓撲復雜,則存在全互聯要求建立n*(n-1)/2個鄰居關系,這顯然是很麻煩,也不現實。因此,只能說是解決BGP路由黑洞的方法之一。
2 采用路由反射器(Router Reflector)解決由IBGP水平分割導致的BGP路由黑洞問題
導致路由黑洞的原因與“一”一樣,解決路由黑洞方法則采用Router Reflector方式進行解決。Router Reflector基本原理是利用路由反射器,將R3作為反射器(RR),其余IBGP路由器作為客戶端?,路由反射器和客戶端共同組成路由反射簇,客戶端只需要與路由反射器建立鄰居即可,不需要與每臺IBGP路由器建立鄰居。
配置路由反射器配置,需要保證三個原則,一是RR從EBGP收到的路由,能夠反射給客戶端和非客戶端;二是從客戶端收到的路由,能夠反射給客戶端、非客戶端及EBGP鄰居;三是從非客戶端收到的路由,只能反射給客戶端和EBGP鄰居,不能反射給其他非客戶端。滿足了這三個原則,就可以有效解決BGP的路由黑洞問題。網絡拓撲圖參照“圖1”,其中R3為反射器,R2和R4為客戶端,R2、R3和R4的配置如下:
2.1 使用回環接口配置R2、R3、R4之間的IBGP關系
//R3配置
router bgp 200
no synchronization
bgp router-id 3.3.3.3
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
neighbor 4.4.4.4 remote-as 200
neighbor 4.4.4.4 update-source Loopback0
no auto-summary
//R2配置
router bgp 200
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
//R4配置
router bgp 3
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
2.2 在R3上開啟路由反射器,指定客戶端
router bgp 3
neighbor 2.2.2.2 route-reflector-client
neighbor 4.4.4.4 route-reflector-client
利用Router Reflector解決BGP的路由黑洞問題,與Full-mesh比較,優勢是顯而易見的,其建立鄰居關系只需要(n-1)條。因此,是解決BGP路由黑洞比較好的方法。
3 采用聯邦(BGP Confederation)解決由IBGP水平分割導致的BGP路由黑洞問題
導致路由黑洞的原因也和“一”一樣,解決路由黑洞方法則采用Confederation方式進行解決。Confederation基本原理是將AS 200內部劃分為2個子AS,使用私有BGP AS 65001和65002,同時,R3與R4之間的關系改為EBGP,從而打破IBGP的水平分割法則,進而解決路由黑洞問題。這些私有AS就叫作聯邦(Confederation),私有AS對于AS 100和AS 300來說,即聯邦是透明的,在他們看來,AS 200依舊是AS 200。實現BGP Confederation配置拓撲結構如圖2所示。
配置Confederation需要按照三個步驟完成,第一步將路由器進行分組,劃分為不同的小AS;第二步在大AS的邊界路由器上,聲明所處的大AS號;第三步在小AS邊界路由器之間建立聯邦EBGP關系,并互指Peer。參照圖2,配置內容如下:
3.1 在R2和R3上創建聯邦AS 65011,建立IBGP關系
//R2上創建AS 65001
router bgp 65001
no synchronization
bgp router-id 2.2.2.2
neighbor 3.3.3.3 remote-as 65001
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
no auto-summary
//R3上創建AS 65011
router bgp 65001
no synchronization
bgp router-id 3.3.3.3
neighbor 2.2.2.2 remote-as 65001
neighbor 2.2.2.2 update-source Loopback0
no auto-summary
3.2 在R4上創建聯邦AS 65002
//R4上創建AS 65002
router bgp 65002
no synchronization
bgp router-id 4.4.4.4
no auto-summary
3.3在R2、R3、R4上聲明自己的大AS,然后與R1和R5創建EBGP關系
//R2上配置聯邦聲明
router bgp 65001
bgp confederation identifier 200
neighbor 10.0.12.1 remote-as 100
//R4上配置聯邦聲明
router bgp 65002
bgp confederation identifier 200
neighbor 10.0.45.2 remote-as 300
//R3上配置聯邦聲明
router bgp 65001
bgp confederation identifier 200
3.4 在R3和R4的聯邦AS之間通過環回口創建EBGP關系,并互指聯邦Peer
//R3上配置EBGP鄰居并指定聯邦Peer
router bgp 65001
bgp confederation peers 65002
neighbor 4.4.4.4 remote-as 65002
//由于使用回環接口建立聯邦EBGP關系,因此需要將默認TTL值改大(在此TTL默認值為1)
neighbor 4.4.4.4 ebgp-multihop 2
neighbor 4.4.4.4 update-source Loopback0
//R4上配置EBGP鄰居并指定聯邦Peer
router bgp 65002
bgp confederation peers 65001
neighbor 3.3.3.3 remote-as 65001
neighbor 3.3.3.3 ebgp-multihop 2
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
所謂聯邦AS是由一組子自治系統組成,它們共享一個聯邦AS號,該聯邦AS號被聯邦之外的對等體視為整個聯邦的名字(AS號),外部的對等體是無法看見聯邦的內部結構的。因此采用聯邦AS解決IBGP鄰居關系,從而解決其路由黑洞問題是比較可取的方法。
4 采用多協議標簽交換 (MPLS)解決BGP路由黑洞問題
導致路由黑洞的原因與“一”一樣,R2與R4建立IBGP,可以互相學習各自的BGP 路由,因是BGP鄰居的建立是通過TCP建立的,BGP鄰居互傳路由是通告封裝到TCP,再封裝到IP里面的。配置完成時候,還是無法實現1.1.1.1<->5.5.5.5互相訪問。解決辦法除了前面三種以外,也可以使用MPLS來解決BGP路由黑洞問題。MPLS 是一種使用標簽來制定數據轉發決策的數據包轉發技術。案例網絡拓撲結構參照“圖1”,具體配置內容如下所示。
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 2.2.2.2
mpls
mpls ldp
int s1/1
mpls
mpls ldp
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 3.3.3.3
mpls
mpls ldp
int s1/1
mpls
mpls ldp
int s1/2
mpls
mpls ldp
//R2上配置MPLS
route recursive-lookup tunnel
mpls lsr-id 4.4.4.4
mpls
mpls ldp
int s1/2
mpls
mpls ldp
使用MPLS解決BGP路由黑洞容易實現,配置也比較簡單,但是其中為什么能在沒有路由的情況下(R3,R4)能通,很多人并不是特別清楚。在MPLS網絡中,MPLS會給IGP路由分配label,cef會采用MPLS分配好的label,并且給下一跳是IGP內的相應BGP路由分配對應IGP的label,數據在轉發的時候是按照cef表進行的,這樣那些沒有在MPLS中分配標簽的BGP路由也可以按照標簽進行轉發,最終解決路由黑洞問題。
由于BGP規定無論路由器是否啟動BGP都要無條件地轉發BGP消息和更新包,違背了"非IGP路由器阻斷IGP域"的原則,因而輾轉造成了BGP路由器"居然ping不通路由表中的條目"的現象,也就是所謂的路由黑洞。在邊界路由器產生的路由黑洞,一般不宜采用重分布實現同步策略。上述四種策略是實際應用中常用策略。
參考文獻:
[1] Amir Ranjbar[美].CCNP TSHOOT學習指南[M].北京:人民郵電出版社,2013.
[2] 周亞軍.思科CCIE路由交換v5實驗指南[M].北京:電子工業出版社,2016.
[3] 張國清.路由技術:IPv6版[M].北京:電子工業出版社,2014.
[4] 梁廣民,王隆杰.思科網絡實驗室CCNA實驗指南[M].北京:電子工業出版社,2012.
【通聯編輯:唐一東】