BGP - 3,BGP重要概念(EBGP,IBGP,防環/黑洞/全互連/同步)
阿新 • • 發佈:2018-02-15
bgp路由 5.0 情況下 outer cmp date 不變 後者 tcp連接 1,防環/黑洞/同步/全互連(為出現大於號,現在通常都是要下一跳可達+關同步)
a)EBGP鄰居傳來的路由可以通過AS_PATH防環,所以收到的不會有問題,因此直接是優化的(>),也就是直接裝表、再傳給EBGP鄰居或IBGP鄰居。
b)IBGP鄰居傳來的路由由於是在同一個AS,所以沒法通過AS_PATH防環,於是BGP規定IBGP只能傳一跳。
c)BGP還有2個問題。 問題一:BGP規定從EBGP學到的路由,傳給IBGP鄰居,不改變下一跳。這樣通常對AS內部路由器來說,這個下一跳地址是不可達的。 問題二:由於水平分割,IBGP鄰居只能傳一跳,所以設想就是把2個IBGP建立在網絡邊緣。但是中間的路由器成了黑洞。(簡而言之,即IBGP下一跳可達性問題,以及路由黑洞問題,只有解決這2個問題後IBGP傳來的路由才是優化的)
d)典型的組網變成下圖所示。假設圖中A宣告一條路由dest,傳給B,B直接是優化的,正常裝表並傳給E。問題一就是E收到這條dest路由時,下一跳是A的地址,這地址是AS外的地址通常是不可達的。問題二就是中間的C和D並不知道這條dest路由。(再強調下,EBGP傳來的直接就是優化的,能夠直接裝表並往下傳)
e)這時路由器E怎麽辦呢?BGP規定只有解決了這2個問題,E收到B(IBGP鄰居)傳來的dest路由才是優化的(>),才能正常裝表,並傳給F。(否則不是坑了F麽,不解決的話自己內部都還沒法訪問這條dest路由)
f)問題一的解決方法:B對E說next-hop-self,把下一跳改為自己;或者是,E寫一條關於下一跳地址的靜態路由,使得下一跳可達。問題二的解決方法:將BGP路由重發布到IGP中,使得AS65102內所有的路由器都知道dest這條路由。這個重發布只能在B上做,因為B關於這條dest是優化的,E上的這條dest是非優化的。
g)重發布讓IGP內部的路由器不堪重負,因為可能C和D後面還接著很多路由器,但實際上假如這條dest路由只是想借道65102去往65103,65102內部的很多路由器無需知道這條路由。於是問題二可以不去解決,直接在E上把同步關掉即可,這樣,E上的這條dest路由也能有>號,並且正常裝表並傳給F。(別忘了關同步只是解決問題二,要想出現大於號,問題一還是要照樣解決的)
h)下一跳可達,關掉同步後,2個問題解決了,路由層都優化了,可以正常在傳遞了,但有什麽問題呢?在傳遞數據時,C和D又變為黑洞了,怎麽解決呢?需要依靠所有路由器運行IBGP並fullmesh或者MPLS。
i)總結IBGP路由層面打通方法:下一跳可達+開同步+BGP重發布進IGP;下一跳可達 + 關同步。(即IBGP鄰居傳來的路由優化的條件)
j)總結IBGP數據層面打通方法:下一跳可達+開同步+BGP重發布進IGP;下一跳可達 + 關同步 + All run and fullmesh/MPLS。
詳見2-5。 1.1,防環 EBGP的水平分割:AS之間的防環,路由器不收帶有自己AS號的路由更新。(控制層面) IBGP的水平分割:從IBGP收到的路由不會通過給另一個IBGP。(控制層面) RR的防環:RR打破了IBGP只傳一跳的規則,所以需要通過cluster-id防環 1.2,黑洞 由於防環機制的存在,BGP中間途徑的路由器不會獲知外部的路由。 黑洞舉例:假設(A)-EBGP-(B-C-E)-EBGP-(F),B和E建立IBGP,此時A ping F不會通,因為A查去往F得仍給B,B查去往F需要扔給E(假設E開了nexthopself),遞歸查找經過C/D去E,但包到了C/D後就丟棄了,因為C/D沒有路由去往F。
1)AS65101中的路由條目傳到AS65103
EBGP:AB,EF。 IBGP:BE
控制層面:ABEF
數據層面:FE,到D和C會被丟棄 2)解決方法 物理線路full mesh(關同步):不會用,代價貴,都直連了有路由 邏輯線路full mesh(關同步):全連接,所有路由器運行BGP並運行BGP,即BCDE全部建立BGP鄰居關系(無需直連),可以用RR,聯盟 重發布(開同步):將BGP重發布到IGP,只能實驗環境做,實際中要想這麽做只能通過ACL導一部分 MPLS(關同步):BGP內部通過標簽走,不通過路由走,實際上就是利用了CEF解決遞歸查找的功能 3)BGP路由黑洞,C和D能傳BE之間的路由,但是不能傳數據,這是因為: 控制層面源目的在變,分為三段(源A到目的B,源B到目的E,源E到目的F,每一段都有路由),通過TCP傳路由。 數據層面源目的不變,源F目的A,中間C和D沒有路由 1.3,同步 BGP的同步:為了確保宣告出去的路由都不會有黑洞問題,開啟同步後,BGP只會將IGP和BGP同步後(通過重發布)的路由宣告出去,即宣告的路由不可能有黑洞。 現在,思科路由器默認禁止同步。 1.4,全互連 要所有路由器都能更新路由,所有經過路由器運行BGP並且full mesh,full mesh只需路由可達,無需直連。 不是全互聯,可能導致兩個問題:1,更新發不過去,例如防環中的那個例子。2,更新發過去了,但數據包過不去,例如黑洞例子。 2,BGP建鄰居配置命令
2.1,基本三步,鄰居三步
基本三步:router-id,no au,no sy (高版本後2步默認已經有)
鄰居三步:neighbor,update-source,multihop(EBGP)/next-hop-self(IBGP)
備註:
neighbor語句中,後面的地址是端口地址,不是路由器的Router-ID。
鄰居三步,如果EBGP用直連建立,則只有neighbor;
鄰居三步,如果EBGP鄰居一邊用環回口,一邊用物理口,則用物理口的那邊需配multihop,用環回口那邊即使不聲明updata-source l0也行,因為BGP的TCP連接只需要一邊發起能通即可。
鄰居三步,如果IBGP用連接骨幹網的物理口建立,則只有neighbor和next-hop-self(不用update-source是因為物理口已經被宣告進IGP),甚至如果IGP中有到EBGP直連口的路由,則只有neighbor。
鄰居三步,如果IBGP用環回口建鄰居,則要包含三步,其實update-source只要一端聲明也可建立連接。
2.2,命令說明
1)no auto-summary
把任何一種協議重分布的BGP中時,如果默認是auto-summary時會發生自動匯總
僅僅是發生在重分布的時候,其他情況與匯總無關
自動匯總:匯總成一個主類網絡,現在一般都關,都無類了
下一跳0.0.0.0代表是自己發出的
把協議重分布到BGP:
auto-summary:不攜帶原有的下一跳和metric,自動匯總成主類
no auto-summary:攜帶原有IGP的下一跳和metric,不會自動匯總
2)update-source
BGP無法像IGP那樣自動發現鄰居,需要由BGPneighbor手工指定,該命令默認源IP(更新源)是出接口IP。
IBGP建立鄰居用環回口時,需要更改update-source
EBGP建立鄰居用環回口時,需要調整update-source、multihop
實際上建鄰居連接只需要保證一方滿足。
兩邊都是默認路由無法建立鄰居(為了防環),一邊靜態一邊默認可以建立鄰居。
3)next-hop-self
當從EBGP對等體學到的路由,傳給IBGP對等體時,不會改變原來的下一跳,而這個下一跳對於內部網絡來說,很可能不可達。
解決方法:使外部EBGP更新源接口可達,或者用next-hop-self更改更新源。一般都用後者。
4)ebgp-multihop
用於EBGP,配合update-source命令,通過環回口建鄰居。
EBGP默認只能1跳,所以如果EBGP用環回口建立鄰居,需要更改為多條。(IBGP默認就是多跳,無需此命令)
3,MA網絡中,BGP下一跳的特列
另外,如果把R4(EBGP鄰居)學到路由重發布到IGP,只能在R1上做,R1是優化的,R2和R3都沒有大於號。
凡是IBGP鄰居傳來的路由,即使IBGP鄰居是相鄰的,該路由也是不優的,必須關閉同步才優。
5,BGP的auto-summary與aggregate
BGP開啟auto-summary時,可以network主類路由,路由表中一旦有該主類下的明細路由,主類路由就會被宣告給對方,否則BGP必須要路由表中有路由時才會被宣告給對方。
auto-summary命令作用的對象:(1)重分布進bgp的igp或(2)直連或(3)靜態路由,應該還有(4)通過IGP學到的路由。如果這些路由是子網路由,在進bgp表時將被自動匯總成有類路由條目。
auto-summary命令不作用的對象:(1) network通告的路由,(2)ibgp或ebgp鄰居通告的路由,如果是此類產生的路由,在show ip bgp表中將是子網路由,這些路由再通過ibgp或ebgp通告給鄰居時,根據此原則,無論鄰居是否啟用auto-summary,接收到的都將是子網路由條目。
總結:
只要在show ip bgp表中存在的路由,都會不變地傳給ibgp或ebgp的鄰居,而不管鄰居或自己是否啟用auto-summary命令。
將BGP重發布進入IGP時,自動匯總後network的路由,不會被灌回去,但是aggregate匯總宣告的路由,會被灌回去,要用route-map防止灌回。
匯總範圍:
auto-summary:只能主類,例如10.0.0.0/8
aggregate:隨意,例如10.0.0.0/16
匯總方法:
auto-summary:
方法1:開啟auto-summary,network 10.0.0.0,前提是需路由表有10.0.0.0/8下的任意一條明細路由。註意前提是路由表裏有,並且要到BGP下network主類。
方法2:開啟auto-summary,重發布IGP至BGP,所有IGP中的明細路由都會自動匯總變成主類路由。
aggregate:
手工匯總BGP表裏有的路由,無論是自己network的,還是BGP鄰居傳過來的,都行!aggregate 10.0.0.0 255.0.0.0。註意前提是必須要BGP表裏有,並且要到BGP下agg匯總!
抑制明細:
auto-summary:不會抑制明細
aggregate:不會抑制明細,想抑制需要aggregate後面加上no-summary
將BGP重發布回IGP時路由灌回:
auto-summary:不會灌回
aggregate:會灌回到IGP,本路由器sh ip route發現是一條指向null0的匯總路由,其他IGP域內的路由器也會收到該路由,如果不想收到需要做過濾
6,BGP的default-information originate
兩種方法產生默認路由:詳見BGP配置7
1)當本地有默認路由時並且重發布到BGP時,用default-information orignate可傳遞給所有鄰居默認路由,註意這條必要BGP表裏有默認才行,默認BGP不會將0.0.0.0傳給對方,一定要有這條命令才會傳,即想傳默認路由給對方,一定要重發布含默認路由的+這條命令
2)或者單獨的network 0.0.0.0 mask 0.0.0.0 也可產生,OSPF本地無默認路由時可以強行加上always指定,BGP沒有always
3)或者本地nei 對端PE default-orignate,可強制產生默認路由,無論本地有沒有默認路由,註意模擬器的版本中這條命令本地的BGP表中沒有0.0.0.0,對端有,但本端會有一段說明給對方下放了默認路由
f)問題一的解決方法:B對E說next-hop-self,把下一跳改為自己;或者是,E寫一條關於下一跳地址的靜態路由,使得下一跳可達。問題二的解決方法:將BGP路由重發布到IGP中,使得AS65102內所有的路由器都知道dest這條路由。這個重發布只能在B上做,因為B關於這條dest是優化的,E上的這條dest是非優化的。
g)重發布讓IGP內部的路由器不堪重負,因為可能C和D後面還接著很多路由器,但實際上假如這條dest路由只是想借道65102去往65103,65102內部的很多路由器無需知道這條路由。於是問題二可以不去解決,直接在E上把同步關掉即可,這樣,E上的這條dest路由也能有>號,並且正常裝表並傳給F。(別忘了關同步只是解決問題二,要想出現大於號,問題一還是要照樣解決的)
h)下一跳可達,關掉同步後,2個問題解決了,路由層都優化了,可以正常在傳遞了,但有什麽問題呢?在傳遞數據時,C和D又變為黑洞了,怎麽解決呢?需要依靠所有路由器運行IBGP並fullmesh或者MPLS。
i)總結IBGP路由層面打通方法:下一跳可達+開同步+BGP重發布進IGP;下一跳可達 + 關同步。(即IBGP鄰居傳來的路由優化的條件)
j)總結IBGP數據層面打通方法:下一跳可達+開同步+BGP重發布進IGP;下一跳可達 + 關同步 + All run and fullmesh/MPLS。
詳見2-5。 1.1,防環 EBGP的水平分割:AS之間的防環,路由器不收帶有自己AS號的路由更新。(控制層面) IBGP的水平分割:從IBGP收到的路由不會通過給另一個IBGP。(控制層面) RR的防環:RR打破了IBGP只傳一跳的規則,所以需要通過cluster-id防環 1.2,黑洞 由於防環機制的存在,BGP中間途徑的路由器不會獲知外部的路由。 黑洞舉例:假設(A)-EBGP-(B-C-E)-EBGP-(F),B和E建立IBGP,此時A ping F不會通,因為A查去往F得仍給B,B查去往F需要扔給E(假設E開了nexthopself),遞歸查找經過C/D去E,但包到了C/D後就丟棄了,因為C/D沒有路由去往F。
EBGP:AB,EF。 IBGP:BE
控制層面:ABEF
數據層面:FE,到D和C會被丟棄 2)解決方法 物理線路full mesh(關同步):不會用,代價貴,都直連了有路由 邏輯線路full mesh(關同步):全連接,所有路由器運行BGP並運行BGP,即BCDE全部建立BGP鄰居關系(無需直連),可以用RR,聯盟 重發布(開同步):將BGP重發布到IGP,只能實驗環境做,實際中要想這麽做只能通過ACL導一部分 MPLS(關同步):BGP內部通過標簽走,不通過路由走,實際上就是利用了CEF解決遞歸查找的功能 3)BGP路由黑洞,C和D能傳BE之間的路由,但是不能傳數據,這是因為: 控制層面源目的在變,分為三段(源A到目的B,源B到目的E,源E到目的F,每一段都有路由),通過TCP傳路由。 數據層面源目的不變,源F目的A,中間C和D沒有路由 1.3,同步 BGP的同步:為了確保宣告出去的路由都不會有黑洞問題,開啟同步後,BGP只會將IGP和BGP同步後(通過重發布)的路由宣告出去,即宣告的路由不可能有黑洞。 現在,思科路由器默認禁止同步。 1.4,全互連 要所有路由器都能更新路由,所有經過路由器運行BGP並且full mesh,full mesh只需路由可達,無需直連。 不是全互聯,可能導致兩個問題:1,更新發不過去,例如防環中的那個例子。2,更新發過去了,但數據包過不去,例如黑洞例子。 2,BGP建鄰居配置命令
34之間EBGP鄰居,4訪問2的下一跳會更改為1 ICMP的重定向:3發現接口收到的報文又從該接口發出去了,就會發起ICMP重定向 4,BGP路由通告 a)當存在多條路徑時,BGP路由器只選最優(沒有負載均衡情況下) b)BGP只把最優路由傳遞給BGP peer c)從EBGP鄰居學到的會向所有BGP鄰居通告(直接是優化的,包括EBGP鄰居和IBGP鄰居) d)從IBGP鄰居學到的不會向IBGP鄰居通告(為了防環,RR除外) e)從IBGP鄰居學到的只有優化了才能往EBGP鄰居傳(重發布,或者關同步,但關同步會產生的黑洞,解決方法見1) 假設R1從鄰居學到路由,傳遞情況如下:
從R2(IBGP鄰居)學到 | 從R4(EBGP鄰居)學到 | |
傳給R3(IBGP鄰居) | 不傳 開RR時能傳,(但GNS實驗發現傳的時候下一跳不變,nexthopself也沒用,只能依靠IGP到達R2了) | 1)傳,next-hop仍然R4。不優。 2)需靜態或nexthopself,並關同步或重發布後變優。 3)如果關同步還需fullmesh/RR解決黑洞問題。 |
傳給R5(EBGP鄰居) | 傳,next-hop變成R1。 直接是優化>,裝表往後傳。 | 傳,next-hop變成R1。 直接是優化>,裝表往後傳。 |
BGP - 3,BGP重要概念(EBGP,IBGP,防環/黑洞/全互連/同步)