趙建華,韓智慧,宋 嚴
(1.長春師范大學網絡中心,吉林 長春 130032;2.長春科技學院智能制造學院,吉林 長春 130600)
BGP,即邊界網關協議,是一種運行在自治系統(AS)之間的動態路由協議[1],具有強大的路徑選擇能力,這也使得BGP適用于大型的網絡環境,如運營商網絡、大型企業網等,然而對于運營商或大型企業級別的網絡,路由的穩定性及可達性尤為重要。
在運行BGP協議的兩臺路由器之間,無論是否直接相連,只要它們具備IP連通性且可建立TCP連接,則都可以建立對等體關系。BGP的這個特點使得路由的傳遞更加靈活,然而,如果在配置BGP路由協議過程中,稍有不慎,就會產生路由黑洞[2]。
圖1為運動BGP協議的網絡拓撲圖,R1、R2、R4、R5是BGP路由器,建立BGP對等體關系。

圖1 運行BGP協議的網絡拓撲圖
在圖1中,AS 30內已經部署了OSPF,使得AS內部的路由器能夠獲得到AS內各個網段的路由信息。R3、R6、R7屬于內部路由器,不運行BGP協議,只運行OSPF協議,在整個AS 30內部,R4和R5實現了IP的連通性(R4和R5之間沒有直連的物理鏈路),并且能夠建立起IBGP對等體關系。
路由器R1將AS 10內的10.0.0.0/8路由發布到BGP,然后將這條路由通告給R4,而R4則將這條BGP路由通過IBGP連接直接通告給R5,R7再將路由信息通告給R2,最終R2能夠通過BGP學習到10.0.0.0/8這條來自AS 10 的路由并將其加載到自己的路由表中。
路由器R2收到一個去往10.0.0.0/8的數據包,它查詢路由表后確定到達目的地的下一跳為R5,于是將數據包轉發給R5。R5收到這個數據包后進行路由表查詢,到達目的地的下一跳為R4,然而R4并不是它的直連路由器,它認為到下一跳路由器處于一個遠端網段,因此將繼續在自己的路由表中查詢到達R4的路由(既遞歸查詢)。由于AS 30內已經運行了OSPF,R5發現可以通過OSPF路由到達R4,而且下一跳是R3。如此一來,R5意識到要將數據包送達10.0.0.0/8,需先將數據包轉發給R3。
當路由器R3收到發往10.0.0.0/8的數據包時,它將在自己的路由表中查詢達到該目的地網段的路由,由于該路由是在BGP中被通告的,而R3又沒有運行BGP,R3將丟棄發往10.0.0.0/8這個網段的數據包。此種現象被稱為路由黑洞,同樣的黑洞問題也可能發生在路由器R7上[3]。
BGP同步規則是指當一臺路由器接收到一條IBGP對等體發送來的路由后,必須檢查自己的IGP路由表,只有在自己的IGP路由表中也存在關于這條路由的信息時,才會將該BGP路由發布給EBGP對等體,讓沒有運行BGP協議的路由器也能獲得BGP路由,從而實現IBGP和IGP路由同步,避免路由黑洞的產生。
路由引入就是將BGP路由引入到OSPF中,讓OSPF也能獲得相關路由。例如,在圖1拓撲結構中,R4將BGP路由引入到AS 30中的OSPF,使OSPF獲知到達10.0.0.0/8的路由,從而路由黑洞的問題就迎刃而解了。
MPLS技術,即多協議標簽交換技術,就是在一個報文的IP頭部之前、數據幀頭部之后插入一個標簽頭部,使IP頭部隱藏在標簽頭部之后,在數據從源被轉發到目的地的整個過程中,網絡設備只需根據標簽頭部中的標簽進行選路,這樣設備的路由表中沒有到達目的地的網段,也不會影響數據轉發,從而避免了路由黑洞的產生。
IBGP全互連,即在AS內IBGP的對等體鄰接關系的全互連,邏輯上形成Full Mesh,使網絡中的路由設備獲得全部網絡的路由信息,進而解決路由黑洞問題。
除了以上幾種方式之外,還有在AS內使用物理線路的全互連、在AS內部的邊緣路由器之間建立Tunnel通道、配置路由反射器RR、聯盟配置等解決路由黑洞問題的方法。
綜合以上論述,解決路由黑洞有很多方案,本文以IBGP全互連方式進行路由黑洞產生過程及解決方案模擬仿真。
假設在一個大型公司的網絡中,拓撲結構如圖2所示,設備IP地址分配如表1所示,自治系統AS 20為運營商網絡,自治系統AS 10和AS 30分別為企業的上海分公司和北京分公司,路由器R1的GE0/0/1和R5的GE0/0/0分別連接著上海分公司內部網絡和北京分公司內部網絡。路由器R1、R2、R4、R5運行BGP協議,自治系統AS 20內部使用OSPF協議作為IGP。整個網絡需要實現上海分公司內部網絡與北京分公司內部網絡之間的正常通信。

圖2 仿真網絡拓撲圖

表1 設備編址
3.2.1 基本配置
根據圖2和表1進行基本配置,并測試直連網段連通性,如R1與R2之間的連通性測試結果如下文所示,其他設備測試方法相同。
PING 10.0.12.2: 56 data bytes, press CTRL_C to break
Reply from 10.0.12.2: bytes=56 Sequence=1 ttl=255 time=30 ms
3.2.2 配置OSPF和BGP路由協議
在AS 20中配置OSPF協議作為IGP協議。如路由器R2的OSPF協議配置如下:
[R2]ospf router-id 10.0.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 10.0.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 10.0.23.0 0.0.0.255
路由器R3、R4的配置與R2類似,配置完后,在R3上使用display ospf peer查看OSPF鄰居信息,可以看到R3與R2、R3與R4的鄰居狀態均為Full,這表示OSPF鄰接關系已經成功建立[4]。
在路由器R1、R2、R4、R5上配置BGP協議,如R1配置如下:
[R1]bgp 10
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer 10.0.12.2 as-number 20
[R1-bgp]network 10.0.10.0 24
其他三個路由器配置類似,配置完成后,在R2上查看BGP鄰居信息如下:
Total number of peers:2 Peers in established state:2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.4.4 4 20 93 95 0 01∶30∶06 Established 1
10.0.12.1 4 10 95 95 0 01∶32∶06 Established 1
從上面結果看出,R2與R1、R2與R4的BGP鄰居關系已經建立,同樣的查看方式能夠看到R4與R5的BGP鄰居關系也已經建立。
在R1上查看BGP路由表,可以看到R1的BGP路由表中擁有關于10.0.10.0/24和10.0.50.0/24的路由信息如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.10.0/24 0.0.0.0 0 0 i
*> 10.0.50.0/24 10.0.12.2 0 20 30i
同理,在R5的BGP路由表中含有10.0.10.0/24和10.0.50.0/24的路由信息如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.10.0/24 10.0.45.4 0 20 10i
*> 10.0.50.0/24 0.0.0.0 0 0 i
3.2.3 BGP路由黑洞產生的原因
通過以上分析,R1和R5的BGP路由表中均存在去往對方的內部網絡的路由,則上海分公司內部網絡和北京分公司內部網絡應該可以正常通信[5],在PC1上測試與PC2的連通性如下所示:
Ping 10.0.50.2∶32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
結果發現,PC1無法與PC2進行通信。
在PC1上使用tracert命令驗證去往PC2的報文經過的路徑,結果如下:
Traceroute to 10.0.50.2,8 hops max
(ICMP), press Ctrl+C to stop
通過跟蹤發現,報文只能到達R2,不能到達R3。
在路由器R3上查看IP路由表,結果如下:
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.2.2/32 OSPF 10 1 D 10.0.23.2 G0/0/1
10.0.3.3/32 Direct 0 0 D 127.0.0.1 LoopBack0
10.0.4.4/32 OSPF 10 1 D 10.0.34.4 G0/0/0
10.0.23.0/24 Direct 0 0 D 10.0.23.3 G0/0/1
10.0.23.3/32 Direct 0 0 D 127.0.0.1 G0/0/1
10.0.23.255/32 Direct 0 0 D 127.0.0.1 G0/0/1
10.0.34.0/24 Direct 0 0 D 10.0.34.3 G0/0/0
10.0.34.3/32 Direct 0 0 D 127.0.0.1 G0/0/0
10.0.34.255/32 Direct 0 0 D 127.0.0.1 G0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
經觀察發現,路由器R3的IP路由表中沒有上海分公司和北京分公司內部網段的10.0.10.0和10.0.50.0的路由信息。這使得R3接收到從R2轉發過來的源地址網段為10.0.10.0、目的地址網段為10.0.50.0的報文時,R3由于在自己的路由表中無法查到目的地址網段10.0.50.0的路由信息,R3會直接將報文丟棄,然后向源地址段10.0.10.0發送ICMP Destionation Unreachable消息。但是此時R3的IP路由表中也沒有10.0.10.0網段的路由信息,導致ICMP Destionation Unreachable消息也無法被發送。這樣一來,從10.0.10.0去往10.0.50.0的報文就在R3上無聲無息地消失了,這就是所謂的BGP路由黑洞[6]。
3.2.4 采用IBGP全互連方式解決BGP路由黑洞問題
產生路由黑洞的原因主要是R3的IP路由表中沒有去往10.0.10.0/24和10.0.50.0/24的路由信息,為了解決此問題,可以讓R3也運行BGP協議,并讓R2、R3、R4建立全互連的IBGP鄰居關系,配置如下:
[R3]bgp 20
[R3-bgp]router-id 10.0.3.3
[R3-bgp]peer 10.0.2.2 as-number 20
[R3-bgp]peer 10.0.2.2 connect-interface LoopBack 0
[R3-bgp]peer 10.0.4.4 as-number 20
[R3-bgp]peer 10.0.4.4 connect-interface LoopBack 0
[R2]bgp 20
[R2-bgp]peer 10.0.3.3 as-number 20
[R2-bgp]peer 10.0.3.3 connect-interface LoopBack 0
[R2-bgp]peer 10.0.3.3 next-hop-local
[R4]bgp 20
[R4-bgp]peer 10.0.3.3 as-number 20
[R4-bgp]peer 10.0.3.3 connect-interface LoopBack 0
[R4-bgp]peer 10.0.3.3 next-hop-local
配置完成后,在R3上查看BGP鄰居信息,結果如下:
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.2.2 4 20 8 8 0 00∶05∶33 Established 1
10.0.4.4 4 20 8 8 0 00∶05∶43 Established 1
可以看到,路由器R3與R2、R4都已經建立IBGP鄰居關系[7]。
在路由器R3上查看BGP路由表,結果如下:
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.10.0/24 10.0.2.2 0 100 0 10i
*>i 10.0.50.0/24 10.0.4.4 0 100 0 30i
可以看到,路由器R3現在已經學習到了上海分公司和北京分公司的內部網段10.0.10.0/24和10.0.50.0/24的路由信息。
使用上海分公司內部計算機PC1測試與北京分公司內部計算機PC2的連通性,結果如下:
From 10.0.50.2: bytes=32 seq=4 ttl=123 time=31 ms
From 10.0.50.2: bytes=32 seq=5 ttl=123 time=63 ms
通過測試結果可知,PC1和PC2能夠正常通信,BGP路由黑洞問題得到了解決。
在網絡互聯中路由器是必不可少的網絡設備,路由協議設置正確與否直接影響整個網絡的可達性、穩定性以及收斂速度。在設置路由協議過程中,不僅要考慮路由黑洞問題,同時還要考慮路由環路、路由更新、路由過濾和路由策略等問題,才能使條目眾多的網絡很好地連接起來[8]。