1. 程式人生 > 實用技巧 >BGP路由彙總

BGP路由彙總

BGP路由彙總

BGP彙總,支援CIDR,這麼牛B的協議肯定是支援的

Auto summary,在cisco的IOS中,預設是關閉的,

如果想要進行自動彙總的話,就要先手動開啟功能,

自動彙總

開啟自動彙總後

並不意味著什麼樣的條目都能夠進行自動彙總,

對此BGP是這樣規定的 開啟auto-summary以後

通過network+mask精確宣告的,不會被自動彙總

通過network+mask彙總宣告的,會被彙總 //廢話

通過重分佈進BGP的,會自動被彙總成主類 ,這一點很重要

所以綜上所述,可以總結出一句話,那就是BGP只會針對重分佈的型別條目進行自動彙總

測試一下重分佈後的條目能否被自動彙總

所有裝置上開啟自動彙總,然後在R1和R2上重分佈進直連網段,為了不要它們自已的更新源地址,我們要建立route-map,進行有條件的重分佈,此處不再贅述,

直接看結果吧

咱們先來分析一下,彙總是彙總了,但是有問題的

1 明細條目被彙總也是顯示的兩條,分別來自於AS100和AS200,這沒問題,本來就是來自於兩個AS的,但是,你會發現,2.2.2.2的條目沒有被視為最優,

不最優的結果就是不能被寫入路由表,同時也無法傳遞給我的鄰居

R4上,肯定就不可能ping通AS200的條目嘍~,

咱們試一下,

通過結果,我們不難看出,的確是存在這樣的問題,

我的AS200去哪裡了,連PATH列表中都沒有,(因為在R3上面 2.2.2.2的條止不是最優的,所以不會傳遞給BGP鄰居)肯定是不可能通的.

所以,自動彙總是多麼的,多麼的不靠譜,

我們之前在學習IGP路由協議的時候也一再強調這個事兒,

自動彙總,會產生路由黑洞,現在倒好,連黑洞還沒出來呢,直接就給你拋棄了

我們主要講述的是BGP 的手動彙總,

手動彙總

還是上圖的環境,我們將條目的形式改變一下,全都變成network

配置完成

R3上檢視BGP表

來自於兩個下一跳,兩個AS,而且條目全都有效,

並且沒有被自動彙總,因為我們把au sum給關了

現在R4和R5上看到的都是一樣的條目

由於是EBGP的peer,在離開自己的AS時,會將AS加上去,所以在這裡看到的就是300 200/ 300 100,現在的狀態是正常的,完全沒有問題

現在開始彙總

1 首先要明白,在哪裡彙總,

2 彙總後的IP地址是多少,~要不要精確的計算

對於BGP的彙總而言,肯定是在傳送端這邊來做彙總,如上圖所示,R3是R4-R5的傳送端

R1,R2是R3的傳送端 ,

為了省事兒,我們直接 在R3上做,

第二個, 172.16.1.0 /2.0/10.0/11.0/24條目,彙總後應該是多少呢?

2的4次方=-16,那就用這個吧

172.16.0.0 /20 255.255.240.0

BGP的彙總命令

Aggregate-address172.16.0.0 255.255.240.0

實驗來試一下

R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0

來看一下最終的效果,在R4上檢視BGP表

~,有了,有了,

但是為啥明細條目還有啊~

這不科學啊,按理來說,明細 條目應該不在才對啊~

是的,沒錯,但是在BGP中,如果想要清除明細條目,只保留彙總條目的話,就要再加單獨的命令

手動彙總summary-only

我們把剛才的彙總條命令NO掉,重新寫一下

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only

,再來檢視一下,是不是奏效呢~

OK,沒問題,看來summary-only 還是很有效果的,

彙總告警訊息

Aggregated 聚合,由誰聚合的

Atomic-aggregate 原子聚合

針對於這兩個屬性,我們可以直接在明細中看到,

這個條目是由AS300的RID為3.3.3.3的裝置進行彙總的,

另外,這是一條告警訊息,原子聚合。當出現這個訊息的時候你要注意了,

是有問題的。因為彙總條目中並不包含明細條目的AS-path資訊。

這會造成環路。

手動彙總 as-set

這個時候你要不要考慮一個問題

R1和R2上有沒有這個彙總條目???

想一想

我們看一下在R4上的結果是什麼樣的啊~

首先,在R4看來,這是一個嶄新的條目,我可以收,

PATH上寫的是300

但是,注意啊.........但是來了,

對於R1和R2而言,這不是新的嗎?

假設R2和R4之間存在著EBGP的鄰居關係,怎麼辦?

R2收到這個更新以後,會不會接收,??? 肯定會接收,因為在as-path中根本就沒有他的AS標識,可現在即使是沒有這個EBGP的關係,我們也不防到R1和R2上看一下

我們在R1上看,

同樣可以看到這個條目,且下一跳裝置為3.3.3.3, 為什麼他會接收呢?你往後面看,看到了什麼>?

Path 300,根本就沒有100,我為什麼不收呢~ 這就是問題的所在

那這個時候我要怎麼樣才可以將明細的AS編號加到PATH中呢?

是否還記得之前講AS-PATH路徑屬性的時候,講過AS-PATH的4種類型

我們最常見的就是這種AS-senquence 是EBGP 都會標記的,而且是有序的,

還有一種是無序的,前面只是提了一句,說是在這裡要講

As-set型別的path ,主要用於標記彙總條目的明細 AS的,

它們的表現形式是{xx,xx}裡面並沒有順序可言,只要有就可以了

回到實驗中

我們重寫一下彙總命令

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set

好了,再來看一下R4上的BGP表吧

看看這個條目發生了哪些變化

嘿嘿,不一樣了吧

這時變成了300{100,200}300是彙總的AS,100和200是明細的所在AS

檢視彙總條目的詳細資訊,也可以看到 這個彙總條目產生在AS 300 RID是3.3.3.3

那這個時候請問R1和R2能否收到呢?

猜一下?

還用說嗎?肯定是收不到的,因為有了as-set的關鍵字以後,就會在{ }裡面加上明細條目所在的AS號,這和EBGP 的防環機制也是有關係的.看到更新資訊中有自己的AS號,則直接丟棄這個包.不進行更新。這一關鍵字,解決了EBGP的環路問題


彙總繼承origin

彙總條目會繼承明細條目上最差的origin,我們來測試一下是否奏效

我們把R2上的條目改成e,把R1上的條目改成?

來看一下會怎麼樣,

那麼問題又來了,修改origin,In/out?哪個生效呢?

答:哪個都生效,因為起源屬性,是公認必遵屬性,每個update包中都是包含的

所以我們現在直接就在明細的源頭進行修改就好了

R1(config)#access-list 1 per 172.16.1.0
R1(config)#route-map ori per 10
R1(config-route-map)#ma ip add 1
R1(config-route-map)#set origin egp 500
R1(config-route-map)#exit
R1(config)#route-map ori per 20
R1(config)#router bgp 100
R1(config-router)#nei 3.3.3.3 route-map ori out
R1(config-router)#exit   
在R1上效條目的origin 改成了e
在R2上將條止的origin改成了incomplete?
R2(config)#access-list 1 per 172.16.10.0
R2(config)#route-map ori per 10
R2(config-route-map)#ma ip add 1
R2(config-route-map)#set ori incomplete
R2(config-route-map)#exit
R2(config)#route-map ori per 20
R2(config-route-map)#exit   
R2(config)#router bgp 200
R2(config-router)#nei 3.3.3.3 route-map ori out
 

此時我們到R3上先來檢視一下

可以看到,明細條目都已經改了,

我們說過,彙總條目會繼承明細條目中origin最差的那個

順序還記得嗎?i>e>?

那麼此圖中,最差的就是?了,

我們到R4上來驗證一下中否繼承了

沒錯,真的是繼承了,並且是繼承的最差的。

BGP路由彙總的額外特性


Suppress-map 抑制條目

在前面的實驗中,我們可以看到,使用了summary-only以後,所有的明細條目都被幹掉了,一個不留,

但有沒有一些特殊的情況,我需要一些明細的條目呢?肯定是有的

那麼如何來操作呢?

就要用到suppress-map了

配置思路

ACL抓取條目

定義route-map

在彙總時呼叫關鍵字

這裡要額外的提一下,這個是有點兒繞的地主

route-map和suppress相結合時, route-map的permit,就等於是抑制

Deny 就等於不是抑制

說白了,就是你permit哪個條目,哪個條目就不能顯示出來

因為在route-map的最後還隱藏著deny ,所以想放行的可以不寫Permit就預設被放行了。

還是結合我們上面的例項來看一下

我想要彙總條目到達R4的時候,還要攜帶著明細條目 172.16.1.0 以及 172.16.10.0

那應該怎麼做呢?

配置

R3(config)#access-list 1 per 172.16.1.0
R3(config)#access-list 1 per 172.16.10.0
R3(config)#route-map sup deny 10   //這時的deny等於是針對suppress放行,不彙總
R3(config-route-map)#ma ip add 1
R3(config-route-map)#exit
R3(config)#route-map sup per 20    //這裡的permit等於是被抑制了,其它全部被抑制了
R3(config-route-map)#exit
R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 suppress-map sup as-set 
這裡就不再是summary-only了,而是換成了suppress-map了

最終在彙總的時候進行呼叫suppress-map即可


Unsuppress-map

如果說我有多個EBGP鄰居,而其中有一個鄰居,不想在彙總的時候被抑制,那要如何操作呢?

如果結合使用了suppress-map的話,就要對單獨的peer,指定一個unsuppress-map

當然,這一操作要在彙總的裝置上進行

R3(config-router)#nei 5.5.5.5 unsuppress-map sup  //sup為之前定義的route-map名稱

此時再到R5上看一下,

哎呀,不對啊,怎麼都出來了?

那麼請問,怎麼就不能都出來,我前邊的命令是怎麼敲的?有summary-only嗎?

沒有吧,我只是應用了suppress-map,而針對於5.5.5.5而言,我還被配置了 unsuppress-map,不接受這個策略的限制,也就是不抑制,

那我為啥不能接收全部的訊息呢~你說呢?~


Advertist-map 單獨繼承屬性

前文提過,彙總條目會繼承明細條止的路徑屬性origin,其實不全然,

繼承的還是挺多的,

as-path,需要as-set的關鍵字

Local prefen本地優先順序,彙總條目會在AS內部為100

Origin

Community 這個在後面會有更加詳細的解釋

我們拿origin來做個例子吧

之前說過,彙總條目會繼承明細路徑中origin屬性最差的,

那麼,我想不繼承那個最差的行不行?

只繼承那個最好的,可不可以?

當然可以

我們來測試一下

我們將 172.16.1.0 設定為?

172.16.10.0 設定為 ?

172.16.2.0和172.16.11.0不變,就是i

如果是預設情況下,肯定會繼承最差的那個 ?,我們不讓它這麼選

我們最終讓彙總條目只繼承i的屬性,看看可不可以

配置思路

ACL抓取條止

Route-map permit條目

這裡要注意一下千萬不要在後面加上per 20

重新彙總條目

配置命令
R3(config)#access-list 1 per 172.16.2.0
R3(config)#access-list 1 per 172.16.10.0
R3(config)#route-map adv per 10
R3(config-route-map)#ma ip add 1
R3(config-route-map)#exit

///這裡千萬要注意,不要per 20了,如果再per20的話,所有的屬性又都過去了

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set advertise-map adv

R3上先看一下它們的origin

可以看到有? 有i的,就像我們之前所說的,我就讓這個彙總條目只繼承i的,

上面的命令已經輸入完成,

R4上來驗證一下

神奇不?

總結一下這個關鍵字吧,advertise-list,可以針對於某一個,某多個條目的屬性進行選擇性繼承,

設定好以後,比如說你選擇了兩條路由麼屬性做為彙總屬性的繼承,那麼當這兩條明細路由正常的時候,彙總路由也正常,

當兩條明細掛掉一個,彙總還正常,

可是,當兩條明細都掛掉了,不管你那邊兒有多少個明細,彙總都會隨之消失,因為你只選擇了這兩個路徑做為依據。

我們可以來測試一下

之前參考的是172.16.2.0 和 11.0這兩個條目的屬性,

現在我們一一的斷開,看一下效果會是什麼樣的,

1 down掉172.16.2.0 的loopback介面,看會發生什麼

關掉以後 我們看一下R3上的BGP表,有沒有什麼變化

彙總條目還在,沒問題

我們再斷開另外一個 172.16.11.0

此時再到R3上檢視一下

你會發現,選擇性繼承的那兩條明細都down掉以後,彙總路由立即也跟著down掉了,


Attribute-map路由策略

對待彙總路由就像是對待一個普通 的明細路由一樣,可以使用route-map來為其修改路徑屬性。

但前提是修改的路徑屬性在AS之間支援傳遞

可以修改的屬性,主要遵循BGP的路徑屬性一篇提到的

大概可以支援 weight 、 med 、as-path...

這裡我們來修改一下as-path的屬性,讓它在R4上看起來與眾不同。

配置思路

Acl 抓取條目。 prefix-list

1 route-map定義 針對於彙總條目不用再單獨的抓取了

2 set 具體屬性值

3重新彙總,並加上具體的策略

配置如下

現在要求彙總路由在出去的時候1111的med值 ,看看可不可以實現

R3(config)#route-map wfy per 10
R3(config-route-map)#set metric 11111
R3(config-route-map)#exit
R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set attribute-map wfy

此時到R4上再看一下

以上就是關於BGP路由彙總的內容,

-------------------------------------------

CCIE成長之路 ---梅利