實(shí)驗(yàn)拓?fù)?/p>
實(shí)驗(yàn)需求
R1、R2、R3屬于AS123,R4屬于AS 400;
AS123內(nèi)的R1、R2、R3運(yùn)行OSPF,通告各自直連接口,注意OSPF域的工作范圍;
R3-R4之間建立eBGP鄰居關(guān)系,R2暫時(shí)不運(yùn)行BGP,R1-R3之間建立iBGP鄰居關(guān)系,所有的BGP鄰居關(guān)系基于直連接口建立;在R4上創(chuàng)建Loopback0接口并將接口IP地址設(shè)置為4.4.4.4/32,同時(shí)將該條直連路由通告到BGP,要求R1的路由表中能看到4.4.4.4/32;
修改BGP配置,使得R1、R3基于Loopback接口建立iBGP鄰居關(guān)系,R1、R3的Loopback接口地址分別為1.1.1.1/32及3.3.3.3/32;
要求R1能夠ping通4.4.4.4。
實(shí)驗(yàn)步驟及配置
所有設(shè)備完成接口IP地址的配置(這部分配置不再貼出)
R1、R2、R3運(yùn)行OSPF;R1、R3建立IBGP鄰居關(guān)系,R3、R4建立EBGP鄰居關(guān)系
R1的配置如下
[R1]ospf1router-id1.1.1.1 [R1-ospf-1]area0 [R1-ospf-1-area-0.0.0.0]network10.1.12.00.0.0.255 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit [R1]bgp123#進(jìn)入BGP進(jìn)程,AS號(hào)為123 [R1-bgp]router-id1.1.1.1#配置BGProuterID [R1-bgp]peer10.1.23.3as-number123#配置BGP鄰居,由于鄰居的AS號(hào)與本地一致,因此兩者之間為iBGP鄰居關(guān)系
R2的配置如下(R2先不運(yùn)行BGP)
[R2]ospf1router-id2.2.2.2 [R2-ospf-1]area0 [R2-ospf-1-area-0.0.0.0]network10.1.12.00.0.0.255 [R2-ospf-1-area-0.0.0.0]network10.1.23.00.0.0.255 [R2-ospf-1-area-0.0.0.0]quit [R2-ospf-1]quit
R3的配置如下:
[R3]ospf1router-id3.3.3.3 [R3-ospf-1]area0 [R3-ospf-1-area-0.0.0.0]network10.1.23.00.0.0.255 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit [R3]bgp123 [R3-bgp]router-id3.3.3.3 [R3-bgp]peer10.1.34.4as-number400#配置eBGP鄰居R4 [R3-bgp]peer10.1.12.1as-number123#配置iBGP鄰居R1
R4的配置如下:
[R4]interfaceloopback0 [R4-loopback0]ipaddress4.4.4.432 [R4]bgp400 [R4-bgp]router-id4.4.4.4 [R4-bgp]peer10.1.34.3as-number123 [R4-bgp]network4.4.4.432#把本地直連路由network進(jìn)BGP
[R3]displaybgprouting-table BGPLocalrouterIDis10.1.23.3 Statuscodes:*-valid,>-best,d-damped, h-history,i-internal,s-suppressed,S-Stale Origin:i-IGP,e-EGP,?-incomplete TotalNumberofRoutes:1 NetworkNextHopMEDLocPrfPrefValPath/Ogn *>4.4.4.4/3210.1.34.400400i
我們看到R3已經(jīng)學(xué)習(xí)到了R4傳遞過來的BGP路由4.4.4.4/32。并且該條BGP路由的NextHop屬性值為10.1.34.4,這個(gè)下一跳是可達(dá)的,因此該條路由在R3的BGP表里有標(biāo)記“* >”,其中“*”號(hào)表示這條路由是可用(Valid)的,而“>”則表示這條路由是去往該目的地最優(yōu)(Best)的路由。再到在R3上查看路由表:
[R3]displayiprouting-tableprotocolbgp Destination/MaskProtoPreCostFlagsNextHopInterface 4.4.4.4/32EBGP2550D10.1.34.4GigabitEthernet0/0/1
該條BGP路由由于是best,因此被裝載進(jìn)了路由表。那么,既然在R3上,這條BGP路由是best的,它就會(huì)傳遞給自己的iBGP鄰居R1,在R1上查看BGP表。
[R1]displaybgprouting-table NetworkNextHopMEDLocPrfPrefValPath/Ogn i4.4.4.4/3210.1.34.401000400i
我們看到,R1的BGP表里,已經(jīng)有4.4.4.4/32的路由,而這條路由NextHop屬性值是10.1.34.4,但是R1在本地路由表中沒有到達(dá)10.1.34.0/24的路由,因此此時(shí)BGP路由4.4.4.4/32的下一跳不可達(dá),該BGP條目則不可用(在BGP表中沒有“ * ”星號(hào)標(biāo)記),既然不可用,自然就不能裝載進(jìn)路由表中使用。那么怎么解決這個(gè)問題呢?一個(gè)最簡(jiǎn)單的方法是,為R1配置一條靜態(tài)路由,ip route-static 10.1.34.0 24 10.1.23.3,這樣一來R1的路由表里就有了到達(dá)10.1.34.0/24網(wǎng)段的路由,那么BGP路由4.4.4.4/32的下一跳就可達(dá)了,路由自然也就可用了。但是這種方法有點(diǎn)鉆空子、取巧。另一種方法是,在R3上OSPF進(jìn)程中將10.1.34.0/24網(wǎng)段也注入到OSPF,使得R1能夠通過OSPF學(xué)習(xí)到10.1.34.0/24網(wǎng)段的路由,但是由于R3-R4之間的互聯(lián)鏈路被視為AS外部鏈路,因此10.1.34.0/24作為外部網(wǎng)段往往不會(huì)被宣告進(jìn)AS內(nèi)的IGP。那么還有什么其他辦法能解決這個(gè)問題?
修改下一跳為自身
BGP是AS-by-AS的路由協(xié)議,而不是router-by-router的路由協(xié)議。在BGP中,next-hop并不意味著是下一臺(tái)路由器,而是到達(dá)下一個(gè)AS的IP地址。當(dāng)一臺(tái)BGP路由器將路由傳遞給自己的eBGP鄰居時(shí),該路由的NextHop屬性值為其BGP更新源地址。如下圖,R4將4.4.4.4/24傳遞給R3時(shí),下一跳為10.1.34.4,也就是R4的GE0/0/0口地址。
當(dāng)一臺(tái)BGP路由器將eBGP路由傳遞給自己的iBGP鄰居時(shí),默認(rèn)情況下這些eBGP路由的NextHop屬性值保持不變。因此R3收到R4傳遞過來的eBGP路由,下一跳屬性值為10.1.34.4,那么它將該條路由傳遞給iBGP鄰居R1的時(shí)候,路由的下一跳屬性值不會(huì)發(fā)生改變,仍然為10.1.34.4。
這就造成了我們上面所述的問題,R1由于沒有到達(dá)10.1.34.0/24的路由,因此下一跳地址10.1.34.4不可達(dá),從而導(dǎo)致BGP路由4.4.4.4/32不可用。
有一個(gè)方法可以解決這個(gè)問題:在R3上使用next-hop-local命令,可修改BGP路由的下一跳屬性值為自身。在下圖中,我們?cè)赗3上增加了peer 10.1.12.1 next-hop-local命令,這樣一來當(dāng)R3再更新eBGP路由給R1的時(shí)候,這些路由的下一跳屬性值就會(huì)被修改為R3自己的更新源地址,而這個(gè)地址,R1能夠通過OSPF學(xué)習(xí)到,因此是可達(dá)的。
完成配置后,我們?cè)赗1上查看BGP表:
[R1]displaybgprouting-table NetworkNextHopMEDLocPrfPrefValPath/Ogn *>i4.4.4.4/3210.1.23.301000400i
R3將EBGP路由4.4.4.4/32傳遞給R1時(shí),將路由的下一跳屬性值改成了自身的IP(10.1.23.3),而這個(gè)IP對(duì)于R1來說是路由可達(dá)的,因此路由優(yōu)化了,并被裝載進(jìn)了路由表。
指定更新源IP
內(nèi)部網(wǎng)關(guān)協(xié)議例如RIP、OSPF等,能夠自動(dòng)在接口上發(fā)現(xiàn)直連鄰居,但是BGP在這點(diǎn)上卻大不相同,BGP無法自動(dòng)發(fā)現(xiàn)鄰居,必須手工使用peer命令指定鄰居。BGP路由器之間交互BGP報(bào)文時(shí),報(bào)文的目的地址就是peer命令所配置的地址,而源地址默認(rèn)則是數(shù)據(jù)包出接口的地址。iBGP鄰居在一個(gè)AS內(nèi)部被部署,一般而言,AS內(nèi)部的網(wǎng)絡(luò)是具有一定冗余性的,例如下圖所示,我們?cè)诒緦?shí)驗(yàn)拓?fù)涞幕A(chǔ)上做了一點(diǎn)小小的修改,在AS123中增加了一臺(tái)路由器:R5。R1、R2、R3、R5運(yùn)行了OSPF?,F(xiàn)在設(shè)想一下,如果R1與R3之間的iBGP鄰居關(guān)系使用物理接口來建,例如R1使用GE0/0/0接口,R3使用GE0/0/0接口的話,則一旦R2發(fā)生故障,R1、R3的GE0/0/0接口都會(huì)DOWN掉,于此同時(shí)R1、R3的BGP鄰居也就DOWN掉了。但是仔細(xì)觀察我們就會(huì)發(fā)現(xiàn),其實(shí)R1、R3之間的IP連通性其實(shí)還是存在的,經(jīng)過R5的這條冗余路徑完全可以在R2發(fā)生故障時(shí)實(shí)現(xiàn)R1、R3之間的數(shù)據(jù)互通。因此為了保障iBGP鄰居關(guān)系的穩(wěn)定性,我們提倡在建立iBGP鄰居關(guān)系時(shí),使用Loopback來建立,而不是物理接口。
思路很簡(jiǎn)單,就是在R1及R3上各開設(shè)一個(gè)Loopback接口并為這個(gè)接口配置IP地址,然后在各自的Loopback接口上激活OSPF,使得OSPF域能夠獲知這兩條Loopback路由。接下來R1、R3之間部署iBGP鄰居時(shí),使用Loopback地址來建,如此一來,即使R2發(fā)生故障,由于R1、R3雙方依然可以通過OSPF學(xué)習(xí)到對(duì)端的Loopback路由,所以故障發(fā)生時(shí),R1、R3的BGP鄰居關(guān)系不會(huì)DOWN。
回到本實(shí)驗(yàn),在上文的配置中,我們?cè)赗1-R3之間建立iBGP鄰居關(guān)系時(shí),使用的就是物理接口,現(xiàn)在我們將配置做些修改:
在R1及R3上創(chuàng)建loopback0,地址分別為1.1.1.1/32及3.3.3.3/32,然后各自將loopback0宣告進(jìn)OSPF,使得彼此都能通過OSPF學(xué)習(xí)到對(duì)方的Loopback0路由,再修改BGP的配置,使得R1-R3之間的iBGP鄰居關(guān)系基于Loopback0來建立。
peerx.x.x.xconnect-interfaceintf[ipv4-src-address]
上面這條命令用于指定BGP的更新源地址或接口。
R1增加的配置如下:
[R1]interfaceloopback0 [R1-LoopBack0]ipaddress1.1.1.132 [R1-LoopBack0]quit [R1]ospf1 [R1-ospf-1]area0 [R1-ospf-1-area-0.0.0.0]network1.1.1.10.0.0.0 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit [R1]bgp123 [R1-bgp]undopeer10.1.23.3 [R1-bgp]peer3.3.3.3as-number123 [R1-bgp]peer3.3.3.3connect-interfaceLoopBack0
由于R1、R3現(xiàn)在是使用Loopback接口來建立鄰居關(guān)系,因此在R1上使用peer命令指定鄰居的時(shí)候,必須使用R3的Loopback地址作為鄰居IP。同時(shí)使用connect-interface關(guān)鍵字指定本設(shè)備用于和對(duì)端建立鄰居關(guān)系的接口,這個(gè)接口的地址將作為更新源。
R3的關(guān)鍵性配置如下:
[R3]interfaceloopback0 [R3-LoopBack0]ipaddress3.3.3.332 [R3-LoopBack0]quit [R3]ospf1 [R3-ospf-1]area0 [R3-ospf-1-area-0.0.0.0]network3.3.3.30.0.0.0 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit [R3]bgp123 [R3-bgp]undopeer10.1.12.1 [R3-bgp]peer1.1.1.1as-number123 [R3-bgp]peer1.1.1.1connect-interfaceLoopBack0 [R3-bgp]peer1.1.1.1next-hop-local
完成上述配置后,R1與R3即會(huì)基于Loopback0接口建立鄰居關(guān)系。
完成這個(gè)實(shí)驗(yàn)
經(jīng)過前面的講解,我們的環(huán)境現(xiàn)在是這樣的:R1-R3之間建立基于Loopback的iBGP鄰居關(guān)系;R3對(duì)R1配置了next-hop-local;R3與R4之間仍然是建立基于直連的eBGP鄰居關(guān)系;R4在BGP中network本地的4.4.4.4/32路由。
現(xiàn)在R1是能夠?qū)W習(xí)到BGP路由4.4.4.4/32的,并且該路由在BGP表中也是優(yōu)化的,這條路由就會(huì)被裝載進(jìn)R1的路由表。那么是不是意味著R1就能夠ping通4.4.4.4了呢?經(jīng)過測(cè)試你可能會(huì)發(fā)現(xiàn),R1雖然有了4.4.4.4/32網(wǎng)段的路由,但是無法ping通,為什么?因?yàn)閿?shù)據(jù)包在R2這里就被丟棄了,還記得么,R2并沒有運(yùn)行BGP,因此它無法學(xué)習(xí)到BGP路由4.4.4.4/32,現(xiàn)在問題來了,怎么讓R1 ping通R4呢?方法之一是在R3上將BGP路由重發(fā)布進(jìn)OSPF,使得R2能夠通過OSPF學(xué)習(xí)到BGP路由,但是這種方法存在一定的風(fēng)險(xiǎn),因?yàn)槲覀冎繠GP承載的前綴數(shù)量往往是非常龐大的;另一種方法是,讓R2也運(yùn)行BGP,并與R3建立iBGP鄰居關(guān)系,這樣一來問題就解決了。那么BGP鄰居關(guān)系就變成了這樣:
R3增加如下配置:
[R3]bgp123 [R3-bgp]peer2.2.2.2as-number123 [R3-bgp]peer2.2.2.2connect-interfaceLoopBack0
R2增加如下配置:
[R2]interfaceloopback0 [R2-LoopBack0]ipaddress2.2.2.232 [R2-LoopBack0]quit [R2]ospf1router-id2.2.2.2 [R2-ospf-1]area0 [R2-ospf-1-area-0.0.0.0]network2.2.2.20.0.0.0 [R2-ospf-1-area-0.0.0.0]quit [R2-ospf-1]quit [R2]bgp123 [R2-bgp]peer3.3.3.3as-number123 [R2-bgp]peer3.3.3.3connect-interfaceLoopBack0
完成上述配置后,R1、R2和R3就都學(xué)習(xí)到了4.4.4.4/32的BGP路由。最后要實(shí)現(xiàn)R1能夠ping通4.4.4.4,則要求R4的路由表中也有10.1.12.0/24的路由,以保證數(shù)據(jù)包的回程。因此在R1上增加如下配置:
[R1]bgp123 [R1-bgp]network10.1.12.024
也就是將10.1.12.0/24這條路由注入到BGP,如此一來R4就能通過BGP學(xué)習(xí)到這條哦路由,那么當(dāng)R1去ping 4.4.4.4時(shí),報(bào)文能夠順利到達(dá)4.4.4.4,并且回程的報(bào)文能順利地回來。
學(xué)會(huì)看三張表
查看BGP鄰居表:
查看BGP表:
查看BGP路由條目的詳細(xì)信息:
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8360瀏覽量
150527 -
BGP
+關(guān)注
關(guān)注
0文章
83瀏覽量
15296
原文標(biāo)題:BGP進(jìn)階:BGP 基礎(chǔ)實(shí)驗(yàn)配置
文章出處:【微信號(hào):網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號(hào):網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論