冉崇書(shū)
(中國(guó)電信股份有限公司廣東公司,廣東 廣州 510080)
BGP(Border Gateway Protocol,邊界網(wǎng)關(guān)協(xié)議)是一種用于自治系統(tǒng)AS(Autonomous System)之間的動(dòng)態(tài)路由協(xié)議。BGP主要用于控制路由的傳播和選擇最佳路由。用TCP作為其傳輸層協(xié)議交換整個(gè)BGP路由表。當(dāng)路由表發(fā)生變化時(shí),發(fā)送更新信號(hào)。
BGP是一個(gè)距離向量協(xié)議,提供在管理域之間管理路由的方法。BGP經(jīng)歷了不同的發(fā)展階段,1989年、1990年和1993年分別公布了BGP協(xié)議的版本一(BGP-1)、版本二(BGP-2)和版本三(BGP-3),從1993年開(kāi)始研發(fā)當(dāng)前版本BGP-4,協(xié)議標(biāo)準(zhǔn)為RFC1771。如今BGP-4已經(jīng)廣泛應(yīng)用于網(wǎng)絡(luò)中,它提供了一套新的機(jī)制以支持無(wú)類(lèi)域間路由。這些機(jī)制包括支持網(wǎng)絡(luò)前綴的通告、取消BGP網(wǎng)絡(luò)中“類(lèi)”的概念,BGP-4也包括AS路徑的集合,為提議的超網(wǎng)方案提供了支持。
(1)Open:你好,跟我交個(gè)朋友吧!
(2)KeepAlive:我還活著呢,別不理我
(3)Update:有新聞……
(4)Notification:我不跟你玩了!因?yàn)槟鉆#$%#$^%%##$#$^
(5)RouteRefresh:再給我發(fā)一遍所有信息吧
(1)當(dāng)TCP連接建立成功后,發(fā)送OPEN消息進(jìn)行協(xié)商。
(2)連接建立后,如有路由需要發(fā)送或路由變化時(shí),發(fā)送Update消息通告對(duì)端路。
(3)連后要定時(shí)發(fā)送KeepAlive消息以保持BGP連接有效性。
(4)如果因用戶(hù)配置變化等原因,希望重新得到對(duì)端曾經(jīng)發(fā)送的所有路由,并且TCP連接關(guān)系不中斷,則發(fā)送RouteRefresh請(qǐng)求對(duì)端發(fā)送所有路由。
(5)發(fā)現(xiàn)錯(cuò)誤或用戶(hù)干預(yù)時(shí),要發(fā)送Notification消息通告BGP對(duì)端,并中斷。
(1)配置錯(cuò)誤:導(dǎo)致配置錯(cuò)誤的原因有對(duì)技術(shù)細(xì)節(jié)不了解或者溝通不暢而導(dǎo)致配置錯(cuò)誤。
(2)人為錯(cuò)誤:打字錯(cuò)誤,使用了錯(cuò)誤的命令,割接方案設(shè)計(jì)的問(wèn)題。
(3)“故障是否是因?yàn)檐浖姹静煌鴮?dǎo)致的?這個(gè)功能是不是在軟件版本A是正常的,而目前配置的設(shè)備正在運(yùn)行軟件版本B”。
(4)由不同廠家的兼容性問(wèn)題而導(dǎo)致的故障,如不同廠家設(shè)備是否都遵循RFC1771。
(5)由對(duì)端導(dǎo)致的故障:因?yàn)槠渌\(yùn)營(yíng)商或大客戶(hù)宣告了錯(cuò)誤的路由導(dǎo)致的網(wǎng)絡(luò)故障。
請(qǐng)記住:一個(gè)看起來(lái)很復(fù)雜的故障,從最簡(jiǎn)單的測(cè)試或者最基礎(chǔ)的錯(cuò)誤開(kāi)始排查。這個(gè)方法似乎一點(diǎn)都不“高大上”,但往往很復(fù)雜的故障,其實(shí)都是由一些很低級(jí)的錯(cuò)誤而導(dǎo)致的[1]。
圖1 BGP鄰居無(wú)法建立故障診斷流程圖
碰到BGP無(wú)法建立的問(wèn)題,我們第一步需要檢查的是鄰居地址是否可達(dá)。我們可以先使用ping命令進(jìn)行檢查,但注意進(jìn)行ping操作的時(shí)候一定要帶上源地址并且設(shè)置包長(zhǎng)為1 500。
如果建立鄰居的地址無(wú)法ping通,可能原因有:①鏈路問(wèn)題,檢查鏈路互聯(lián)地址能否ping通;②路由問(wèn)題,檢查建立鄰居地址路由表是否正確;③鏈路MTU限制,不允許大包通過(guò)。
如果ping測(cè)沒(méi)有問(wèn)題,檢查一下TCP端口會(huì)不會(huì)被過(guò)濾。此時(shí)可以在兩端查看是否禁止TCP的179端口。如果設(shè)備過(guò)濾了179端口,也會(huì)導(dǎo)致BGP鄰居無(wú)法建立。檢查配置如下:
再檢查T(mén)CP的狀態(tài)。正常BGP建立的前提是兩臺(tái)設(shè)備的TCP需要處于esatblished的狀態(tài)。
如果有禁止TCP的179端口的ACL,需要?jiǎng)h除ACL相關(guān)配置,或者放通TCP 179端口。
鄰居兩端的router-id一樣時(shí),BGP在協(xié)商時(shí)會(huì)檢測(cè)到?jīng)_突,導(dǎo)致鄰居無(wú)法建立。配置檢查如下:
通過(guò)debug BGP鄰居協(xié)議1.1.1.1的BGP報(bào)文,可以看到BGP ID無(wú)效導(dǎo)致BGP鄰居無(wú)法建立的日志。
<R2> debugging bgp all peer 1.1.1.1
Jul 15 2021 03:27:01.504 R2 %%01BGP/3/DEBUG_INFO(d):CID=0x8013046c; BGP(VPN 0): Bgp Id field in the OPEN message received from 1.1.1.1(SourceIfIndex:29)is invalid or not negotiable.
小結(jié):
(1)如果沒(méi)有顯式的配置BGP的router-id,BGP的router-id會(huì)繼承系統(tǒng)的router-id。
(2)debug BGP協(xié)議報(bào)文,看到兩端BGP鄰居無(wú)法建立的原因。
一定要和對(duì)端確認(rèn)BGP AS號(hào),避免配置錯(cuò)誤導(dǎo)致鄰居無(wú)法建立。檢查配置如下:
AS號(hào)配置錯(cuò)誤,也會(huì)導(dǎo)致TCP的狀態(tài)無(wú)法建立的。
如果經(jīng)過(guò)以上4步,BGP鄰居還沒(méi)有正常建立,繼續(xù)分析其他配置,如果使用connection-interface指定用于建立BGP鄰居的源地址時(shí)出現(xiàn)指定錯(cuò)誤,或在使用loopback口建立鄰居時(shí)沒(méi)有使用此命令指定相應(yīng)的loopback口,也會(huì)導(dǎo)致鄰居無(wú)法建立。檢查配置如下:
在不使用connection-interface顯示指定源地址時(shí)BGP不設(shè)置源地址,而是交給TCP來(lái)選,TCP通過(guò)查路由表來(lái)確定出接口,然后用出接口上的接口地址作為建立鄰居的源地址。
在用loopback口建立直連eBGP鄰居時(shí)一定要配置ebgp-max-hop,否則鄰居無(wú)法建立。ebgp-max-hop兩端必須都配置,建議兩端配置的跳數(shù)配置成一樣的。檢查配置如下:
如果未配置ebgp-max-hop,查看TCP鏈接,發(fā)現(xiàn)沒(méi)有和R1(1.1.1.1)成功建立TCP連接,BGP鄰居無(wú)法建立。
小結(jié):除了ebgp-max-hop,valid-ttl-hops也能達(dá)到類(lèi)似目的。
上述的各種排查步驟都使用后,鄰居仍然無(wú)法建立。還有一種經(jīng)常碰到的場(chǎng)景是兩邊密碼配置不一致。如果MD5密碼不一致,會(huì)產(chǎn)生MD5認(rèn)證密碼信息錯(cuò)誤的日志。檢查配置如下:
查看日志,BGP MD5認(rèn)證失敗,鄰居無(wú)法建立。
小結(jié):我們必須在在兩端的路由器上輸入相同的密碼,兩端的密碼要一致;檢查系統(tǒng)的日志,看看是否有密碼錯(cuò)誤的提示;在設(shè)備的兩端重新輸入密碼,eBGP的鄰居建立起來(lái)了。
如果BGP的鄰居建立后馬上中斷,檢查BGP鄰居會(huì)不會(huì)配置了route-limit限制,對(duì)端發(fā)送的路由數(shù)量超過(guò)limit的條數(shù),導(dǎo)致鄰居建立后很快又down(中斷)。檢查配置如下:
查看BGP鄰居狀態(tài),處于IDLE(Ovlmt)狀態(tài),表示接收路由超限導(dǎo)致鄰居無(wú)法建立。
再看看是不是有人人為關(guān)閉了BGP鄰居。
檢查方法:查看鄰居狀態(tài),配置了peer ignore一端的鄰居會(huì)在displaylay bgp peer會(huì)顯示Idle(admin)
小結(jié):在BGP視圖下配置shutdown,也會(huì)有相同的結(jié)果,只是peer ignore只是針對(duì)一個(gè)鄰居,shutdown則是針對(duì)所有鄰居。
本文總結(jié)了BGP鄰居無(wú)法建立經(jīng)常碰到的一些原因及處理辦法,按上述步驟去排查后,絕大部分的BGP鄰居無(wú)法建立的問(wèn)題都可以解決。除了上述原因,還有可能不同廠商之間對(duì)協(xié)議的理解存在差異、網(wǎng)絡(luò)路由震蕩等其他復(fù)雜問(wèn)題導(dǎo)致BGP鄰居無(wú)法建立,此時(shí)就需要更深層次的分析了。只要熟練掌握BGP的原理、協(xié)議和狀態(tài)機(jī),遇到問(wèn)題不慌不亂,有思路,按步驟進(jìn)行排查,問(wèn)題是一定可以解決的。