實驗拓撲
實驗需求
R1、R2、R3屬于AS123,R4屬于AS 400;
AS123內(nèi)的R1、R2、R3運行OSPF,通告各自直連接口,注意OSPF域的工作范圍;
R3-R4之間建立eBGP鄰居關系,R2暫時不運行BGP,R1-R3之間建立iBGP鄰居關系,所有的BGP鄰居關系基于直連接口建立;在R4上創(chuàng)建Loopback0接口并將接口IP地址設置為4.4.4.4/32,同時將該條直連路由通告到BGP,要求R1的路由表中能看到4.4.4.4/32;
修改BGP配置,使得R1、R3基于Loopback接口建立iBGP鄰居關系,R1、R3的Loopback接口地址分別為1.1.1.1/32及3.3.3.3/32;
要求R1能夠ping通4.4.4.4。
實驗步驟及配置
所有設備完成接口IP地址的配置(這部分配置不再貼出)
R1、R2、R3運行OSPF;R1、R3建立IBGP鄰居關系,R3、R4建立EBGP鄰居關系
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#進入BGP進程,AS號為123 [R1-bgp]router-id1.1.1.1#配置BGProuterID [R1-bgp]peer10.1.23.3as-number123#配置BGP鄰居,由于鄰居的AS號與本地一致,因此兩者之間為iBGP鄰居關系
R2的配置如下(R2先不運行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進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)學習到了R4傳遞過來的BGP路由4.4.4.4/32。并且該條BGP路由的NextHop屬性值為10.1.34.4,這個下一跳是可達的,因此該條路由在R3的BGP表里有標記“* >”,其中“*”號表示這條路由是可用(Valid)的,而“>”則表示這條路由是去往該目的地最優(yōu)(Best)的路由。再到在R3上查看路由表:
[R3]displayiprouting-tableprotocolbgp Destination/MaskProtoPreCostFlagsNextHopInterface 4.4.4.4/32EBGP2550D10.1.34.4GigabitEthernet0/0/1
該條BGP路由由于是best,因此被裝載進了路由表。那么,既然在R3上,這條BGP路由是best的,它就會傳遞給自己的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在本地路由表中沒有到達10.1.34.0/24的路由,因此此時BGP路由4.4.4.4/32的下一跳不可達,該BGP條目則不可用(在BGP表中沒有“ * ”星號標記),既然不可用,自然就不能裝載進路由表中使用。那么怎么解決這個問題呢?一個最簡單的方法是,為R1配置一條靜態(tài)路由,ip route-static 10.1.34.0 24 10.1.23.3,這樣一來R1的路由表里就有了到達10.1.34.0/24網(wǎng)段的路由,那么BGP路由4.4.4.4/32的下一跳就可達了,路由自然也就可用了。但是這種方法有點鉆空子、取巧。另一種方法是,在R3上OSPF進程中將10.1.34.0/24網(wǎng)段也注入到OSPF,使得R1能夠通過OSPF學習到10.1.34.0/24網(wǎng)段的路由,但是由于R3-R4之間的互聯(lián)鏈路被視為AS外部鏈路,因此10.1.34.0/24作為外部網(wǎng)段往往不會被宣告進AS內(nèi)的IGP。那么還有什么其他辦法能解決這個問題?
修改下一跳為自身
BGP是AS-by-AS的路由協(xié)議,而不是router-by-router的路由協(xié)議。在BGP中,next-hop并不意味著是下一臺路由器,而是到達下一個AS的IP地址。當一臺BGP路由器將路由傳遞給自己的eBGP鄰居時,該路由的NextHop屬性值為其BGP更新源地址。如下圖,R4將4.4.4.4/24傳遞給R3時,下一跳為10.1.34.4,也就是R4的GE0/0/0口地址。
當一臺BGP路由器將eBGP路由傳遞給自己的iBGP鄰居時,默認情況下這些eBGP路由的NextHop屬性值保持不變。因此R3收到R4傳遞過來的eBGP路由,下一跳屬性值為10.1.34.4,那么它將該條路由傳遞給iBGP鄰居R1的時候,路由的下一跳屬性值不會發(fā)生改變,仍然為10.1.34.4。
這就造成了我們上面所述的問題,R1由于沒有到達10.1.34.0/24的路由,因此下一跳地址10.1.34.4不可達,從而導致BGP路由4.4.4.4/32不可用。
有一個方法可以解決這個問題:在R3上使用next-hop-local命令,可修改BGP路由的下一跳屬性值為自身。在下圖中,我們在R3上增加了peer 10.1.12.1 next-hop-local命令,這樣一來當R3再更新eBGP路由給R1的時候,這些路由的下一跳屬性值就會被修改為R3自己的更新源地址,而這個地址,R1能夠通過OSPF學習到,因此是可達的。
完成配置后,我們在R1上查看BGP表:
[R1]displaybgprouting-table NetworkNextHopMEDLocPrfPrefValPath/Ogn *>i4.4.4.4/3210.1.23.301000400i
R3將EBGP路由4.4.4.4/32傳遞給R1時,將路由的下一跳屬性值改成了自身的IP(10.1.23.3),而這個IP對于R1來說是路由可達的,因此路由優(yōu)化了,并被裝載進了路由表。
指定更新源IP
內(nèi)部網(wǎng)關協(xié)議例如RIP、OSPF等,能夠自動在接口上發(fā)現(xiàn)直連鄰居,但是BGP在這點上卻大不相同,BGP無法自動發(fā)現(xiàn)鄰居,必須手工使用peer命令指定鄰居。BGP路由器之間交互BGP報文時,報文的目的地址就是peer命令所配置的地址,而源地址默認則是數(shù)據(jù)包出接口的地址。iBGP鄰居在一個AS內(nèi)部被部署,一般而言,AS內(nèi)部的網(wǎng)絡是具有一定冗余性的,例如下圖所示,我們在本實驗拓撲的基礎上做了一點小小的修改,在AS123中增加了一臺路由器:R5。R1、R2、R3、R5運行了OSPF。現(xiàn)在設想一下,如果R1與R3之間的iBGP鄰居關系使用物理接口來建,例如R1使用GE0/0/0接口,R3使用GE0/0/0接口的話,則一旦R2發(fā)生故障,R1、R3的GE0/0/0接口都會DOWN掉,于此同時R1、R3的BGP鄰居也就DOWN掉了。但是仔細觀察我們就會發(fā)現(xiàn),其實R1、R3之間的IP連通性其實還是存在的,經(jīng)過R5的這條冗余路徑完全可以在R2發(fā)生故障時實現(xiàn)R1、R3之間的數(shù)據(jù)互通。因此為了保障iBGP鄰居關系的穩(wěn)定性,我們提倡在建立iBGP鄰居關系時,使用Loopback來建立,而不是物理接口。
思路很簡單,就是在R1及R3上各開設一個Loopback接口并為這個接口配置IP地址,然后在各自的Loopback接口上激活OSPF,使得OSPF域能夠獲知這兩條Loopback路由。接下來R1、R3之間部署iBGP鄰居時,使用Loopback地址來建,如此一來,即使R2發(fā)生故障,由于R1、R3雙方依然可以通過OSPF學習到對端的Loopback路由,所以故障發(fā)生時,R1、R3的BGP鄰居關系不會DOWN。
回到本實驗,在上文的配置中,我們在R1-R3之間建立iBGP鄰居關系時,使用的就是物理接口,現(xiàn)在我們將配置做些修改:
在R1及R3上創(chuàng)建loopback0,地址分別為1.1.1.1/32及3.3.3.3/32,然后各自將loopback0宣告進OSPF,使得彼此都能通過OSPF學習到對方的Loopback0路由,再修改BGP的配置,使得R1-R3之間的iBGP鄰居關系基于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接口來建立鄰居關系,因此在R1上使用peer命令指定鄰居的時候,必須使用R3的Loopback地址作為鄰居IP。同時使用connect-interface關鍵字指定本設備用于和對端建立鄰居關系的接口,這個接口的地址將作為更新源。
R3的關鍵性配置如下:
[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即會基于Loopback0接口建立鄰居關系。
完成這個實驗
經(jīng)過前面的講解,我們的環(huán)境現(xiàn)在是這樣的:R1-R3之間建立基于Loopback的iBGP鄰居關系;R3對R1配置了next-hop-local;R3與R4之間仍然是建立基于直連的eBGP鄰居關系;R4在BGP中network本地的4.4.4.4/32路由。
現(xiàn)在R1是能夠學習到BGP路由4.4.4.4/32的,并且該路由在BGP表中也是優(yōu)化的,這條路由就會被裝載進R1的路由表。那么是不是意味著R1就能夠ping通4.4.4.4了呢?經(jīng)過測試你可能會發(fā)現(xiàn),R1雖然有了4.4.4.4/32網(wǎng)段的路由,但是無法ping通,為什么?因為數(shù)據(jù)包在R2這里就被丟棄了,還記得么,R2并沒有運行BGP,因此它無法學習到BGP路由4.4.4.4/32,現(xiàn)在問題來了,怎么讓R1 ping通R4呢?方法之一是在R3上將BGP路由重發(fā)布進OSPF,使得R2能夠通過OSPF學習到BGP路由,但是這種方法存在一定的風險,因為我們知道BGP承載的前綴數(shù)量往往是非常龐大的;另一種方法是,讓R2也運行BGP,并與R3建立iBGP鄰居關系,這樣一來問題就解決了。那么BGP鄰居關系就變成了這樣:
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就都學習到了4.4.4.4/32的BGP路由。最后要實現(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學習到這條哦路由,那么當R1去ping 4.4.4.4時,報文能夠順利到達4.4.4.4,并且回程的報文能順利地回來。
學會看三張表
查看BGP鄰居表:
查看BGP表:
查看BGP路由條目的詳細信息:
審核編輯:湯梓紅
-
接口
+關注
關注
33文章
8575瀏覽量
151019 -
BGP
+關注
關注
0文章
83瀏覽量
15327
原文標題:BGP進階:BGP 基礎實驗配置
文章出處:【微信號:網(wǎng)絡技術干貨圈,微信公眾號:網(wǎng)絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論