劉炎火
摘要:在網(wǎng)絡(luò)配置中,路由黑洞是比較常見的故障,特別是在邊界配置BGP路由時,經(jīng)常出現(xiàn)路由黑洞,為了更好解決由于BGP配置而產(chǎn)生的路由黑洞,在本文中列舉了多種解決策略。
關(guān)鍵詞:路由黑洞;BGP;EBGP;IBGP;鄰居關(guān)系
中圖分類號:TP393 ? ? ? ?文獻(xiàn)標(biāo)識碼: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的時候,最容易遇到的問題就是路由黑洞,那么什么是路由黑洞?簡單地說,它會默默地將數(shù)據(jù)包丟棄,使數(shù)據(jù)包有去無回。我們知道傳統(tǒng)的IP路由,它是通過逐跳查找路由信息,根據(jù)路由信息轉(zhuǎn)發(fā)數(shù)據(jù)包,通俗地說就是當(dāng)數(shù)據(jù)包到達(dá)路由設(shè)備的時候,路由設(shè)備首先查找路由表,然后根據(jù)路由信息轉(zhuǎn)發(fā)數(shù)據(jù)包,當(dāng)然,路由設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)包的前提是存在下一跳路由。對BGP來說,由于存在IBGP水平分割規(guī)則,這是一種防止環(huán)路機(jī)制,所以在BGP的設(shè)計上有些設(shè)備就不會運行BGP。BGP是一種TCP的連接或者說是一種host-to-host的連接,可以跨越設(shè)備進(jìn)行連接,所以路由傳遞是沒有問題的,但是數(shù)據(jù)包的路由卻是有問題的。通常我們會出現(xiàn)是IBGP鄰居關(guān)系可以正常建立,也就是說控制平面看起來是正常的,但是數(shù)據(jù)平面確不可達(dá),從而形成路由黑洞。接下來,我將解決BGP路由黑洞的幾種常見方法進(jìn)行逐一介紹。
1 采用鄰居全互聯(lián)(Full-mesh)方式解決由IBGP水平分割導(dǎo)致的BGP路由黑洞問題
圖1所示,為了實現(xiàn)1.1.1.1<->5.5.5.5可以互相訪問,計劃在R1、R2、R4、R5跑BGP協(xié)議,R2、R3、R4跑OSPF協(xié)議。并且在R1<->R2、R4<->R5之間創(chuàng)建默認(rèn)路由保證BGP鄰居關(guān)系的建立。配置完成之后,發(fā)現(xiàn)無法實現(xiàn)1.1.1.1<->5.5.5.5互相訪問,通過對設(shè)備路由信息的查詢,發(fā)現(xiàn)R3沒有1.1.1.1和5.5.5.5的路由條目。經(jīng)過仔細(xì)分析配置策略,發(fā)現(xiàn)由于R3沒有啟用BGP配置,因此R2和R4均不會將路由條目傳給R3,導(dǎo)致R3沒有1.1.1.1和5.5.5.5的路由信息,最終出現(xiàn)路由黑洞。
經(jīng)過對配置信息的分析和查閱相關(guān)資料,決定利用Full-mesh方式解決路由黑洞問題。解決方法就是在R3上配置BGP,與R2和R4建立完全BGP鄰居關(guān)系,通過IBGP學(xué)習(xí)到1.1.1.1和5.5.5.5的路由條目。配置完成之后,經(jīng)測試完全實現(xiàn)1.1.1.1<->5.5.5.5互相訪問。利用Full-mesh方式解決路由黑洞配置拓?fù)鋱D如圖1所示。
具體實現(xiàn)過程:使用Peer Group簡化配置,節(jié)約內(nèi)存,配置R2、R3、R4之間的IBGP,通過鄰居全互聯(lián)解決路由黑洞。R2、R3和R4相互建立鄰居關(guān)系,具體配置如下:
//R2與R3、R4建立鄰居關(guān)系
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建立鄰居關(guān)系
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建立鄰居關(guān)系
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方式解決路由黑洞,對于結(jié)構(gòu)簡單的網(wǎng)絡(luò)沒有問題,但是要是網(wǎng)絡(luò)拓?fù)鋸?fù)雜,則存在全互聯(lián)要求建立n*(n-1)/2個鄰居關(guān)系,這顯然是很麻煩,也不現(xiàn)實。因此,只能說是解決BGP路由黑洞的方法之一。
2 采用路由反射器(Router Reflector)解決由IBGP水平分割導(dǎo)致的BGP路由黑洞問題
導(dǎo)致路由黑洞的原因與“一”一樣,解決路由黑洞方法則采用Router Reflector方式進(jìn)行解決。Router Reflector基本原理是利用路由反射器,將R3作為反射器(RR),其余IBGP路由器作為客戶端?,路由反射器和客戶端共同組成路由反射簇,客戶端只需要與路由反射器建立鄰居即可,不需要與每臺IBGP路由器建立鄰居。
配置路由反射器配置,需要保證三個原則,一是RR從EBGP收到的路由,能夠反射給客戶端和非客戶端;二是從客戶端收到的路由,能夠反射給客戶端、非客戶端及EBGP鄰居;三是從非客戶端收到的路由,只能反射給客戶端和EBGP鄰居,不能反射給其他非客戶端。滿足了這三個原則,就可以有效解決BGP的路由黑洞問題。網(wǎng)絡(luò)拓?fù)鋱D參照“圖1”,其中R3為反射器,R2和R4為客戶端,R2、R3和R4的配置如下:
2.1 使用回環(huán)接口配置R2、R3、R4之間的IBGP關(guān)系
//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比較,優(yōu)勢是顯而易見的,其建立鄰居關(guān)系只需要(n-1)條。因此,是解決BGP路由黑洞比較好的方法。
3 采用聯(lián)邦(BGP Confederation)解決由IBGP水平分割導(dǎo)致的BGP路由黑洞問題
導(dǎo)致路由黑洞的原因也和“一”一樣,解決路由黑洞方法則采用Confederation方式進(jìn)行解決。Confederation基本原理是將AS 200內(nèi)部劃分為2個子AS,使用私有BGP AS 65001和65002,同時,R3與R4之間的關(guān)系改為EBGP,從而打破IBGP的水平分割法則,進(jìn)而解決路由黑洞問題。這些私有AS就叫作聯(lián)邦(Confederation),私有AS對于AS 100和AS 300來說,即聯(lián)邦是透明的,在他們看來,AS 200依舊是AS 200。實現(xiàn)BGP Confederation配置拓?fù)浣Y(jié)構(gòu)如圖2所示。
配置Confederation需要按照三個步驟完成,第一步將路由器進(jìn)行分組,劃分為不同的小AS;第二步在大AS的邊界路由器上,聲明所處的大AS號;第三步在小AS邊界路由器之間建立聯(lián)邦EBGP關(guān)系,并互指Peer。參照圖2,配置內(nèi)容如下:
3.1 在R2和R3上創(chuàng)建聯(lián)邦A(yù)S 65011,建立IBGP關(guān)系
//R2上創(chuàng)建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上創(chuàng)建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上創(chuàng)建聯(lián)邦A(yù)S 65002
//R4上創(chuàng)建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創(chuàng)建EBGP關(guān)系
//R2上配置聯(lián)邦聲明
router bgp 65001
bgp confederation identifier 200
neighbor 10.0.12.1 remote-as 100
//R4上配置聯(lián)邦聲明
router bgp 65002
bgp confederation identifier 200
neighbor 10.0.45.2 remote-as 300
//R3上配置聯(lián)邦聲明
router bgp 65001
bgp confederation identifier 200
3.4 在R3和R4的聯(lián)邦A(yù)S之間通過環(huán)回口創(chuàng)建EBGP關(guān)系,并互指聯(lián)邦Peer
//R3上配置EBGP鄰居并指定聯(lián)邦Peer
router bgp 65001
bgp confederation peers 65002
neighbor 4.4.4.4 remote-as 65002
//由于使用回環(huán)接口建立聯(lián)邦EBGP關(guān)系,因此需要將默認(rèn)TTL值改大(在此TTL默認(rèn)值為1)
neighbor 4.4.4.4 ebgp-multihop 2
neighbor 4.4.4.4 update-source Loopback0
//R4上配置EBGP鄰居并指定聯(lián)邦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
所謂聯(lián)邦A(yù)S是由一組子自治系統(tǒng)組成,它們共享一個聯(lián)邦A(yù)S號,該聯(lián)邦A(yù)S號被聯(lián)邦之外的對等體視為整個聯(lián)邦的名字(AS號),外部的對等體是無法看見聯(lián)邦的內(nèi)部結(jié)構(gòu)的。因此采用聯(lián)邦A(yù)S解決IBGP鄰居關(guān)系,從而解決其路由黑洞問題是比較可取的方法。
4 采用多協(xié)議標(biāo)簽交換 (MPLS)解決BGP路由黑洞問題
導(dǎo)致路由黑洞的原因與“一”一樣,R2與R4建立IBGP,可以互相學(xué)習(xí)各自的BGP 路由,因是BGP鄰居的建立是通過TCP建立的,BGP鄰居互傳路由是通告封裝到TCP,再封裝到IP里面的。配置完成時候,還是無法實現(xiàn)1.1.1.1<->5.5.5.5互相訪問。解決辦法除了前面三種以外,也可以使用MPLS來解決BGP路由黑洞問題。MPLS 是一種使用標(biāo)簽來制定數(shù)據(jù)轉(zhuǎn)發(fā)決策的數(shù)據(jù)包轉(zhuǎn)發(fā)技術(shù)。案例網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)參照“圖1”,具體配置內(nèi)容如下所示。
//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路由黑洞容易實現(xiàn),配置也比較簡單,但是其中為什么能在沒有路由的情況下(R3,R4)能通,很多人并不是特別清楚。在MPLS網(wǎng)絡(luò)中,MPLS會給IGP路由分配label,cef會采用MPLS分配好的label,并且給下一跳是IGP內(nèi)的相應(yīng)BGP路由分配對應(yīng)IGP的label,數(shù)據(jù)在轉(zhuǎn)發(fā)的時候是按照cef表進(jìn)行的,這樣那些沒有在MPLS中分配標(biāo)簽的BGP路由也可以按照標(biāo)簽進(jìn)行轉(zhuǎn)發(fā),最終解決路由黑洞問題。
由于BGP規(guī)定無論路由器是否啟動BGP都要無條件地轉(zhuǎn)發(fā)BGP消息和更新包,違背了"非IGP路由器阻斷IGP域"的原則,因而輾轉(zhuǎn)造成了BGP路由器"居然ping不通路由表中的條目"的現(xiàn)象,也就是所謂的路由黑洞。在邊界路由器產(chǎn)生的路由黑洞,一般不宜采用重分布實現(xiàn)同步策略。上述四種策略是實際應(yīng)用中常用策略。
參考文獻(xiàn):
[1] Amir Ranjbar[美].CCNP TSHOOT學(xué)習(xí)指南[M].北京:人民郵電出版社,2013.
[2] 周亞軍.思科CCIE路由交換v5實驗指南[M].北京:電子工業(yè)出版社,2016.
[3] 張國清.路由技術(shù):IPv6版[M].北京:電子工業(yè)出版社,2014.
[4] 梁廣民,王隆杰.思科網(wǎng)絡(luò)實驗室CCNA實驗指南[M].北京:電子工業(yè)出版社,2012.
【通聯(lián)編輯:唐一東】