天天看點

03-2 BGP專有指令--BGP指令與配置手冊

該文檔涉及的指令有:

bgp fast-external-fallover

bgp cluster-ID x.x.x.x/xxxx

<b>3-4 bgp fast-external-fallover</b>

<b>BGP</b><b>的</b><b>fast external fallover</b><b>特性為預設啟用的。當用來建立</b><b>BGP</b><b>連接配接的接口失效的時候</b><b>,</b><b>該特性會促使</b><b>BGP</b><b>路由器即刻中斷</b><b>bgp</b><b>對話</b><b>.</b><b>如果接口頻繁震蕩</b><b>,</b><b>該特性會引發網絡的不穩定</b><b>,</b><b>這是因為</b><b>bgp</b><b>狀态将會在</b><b>IDLE</b><b>和</b><b>established</b><b>狀态之間來回切換</b><b>,</b><b>進而導緻</b><b>BGP update</b><b>和</b><b>withdraswn</b><b>消息泛濫。如果路由器的接口頻繁震蕩的話,可以率使用該指令的</b><b>no</b><b>形式,關閉該特性</b><b>.</b>

<b>說了那麼多。我個人的了解就是</b><b>,</b><b>bgp fast-external-fallover</b><b>這個特性是系統預設啟動的</b><b>,</b><b>當鄰居頻繁的震蕩的時候</b><b>,</b><b>可以關閉這個特性</b><b>,</b><b>當關閉之後</b><b>,</b><b>不管對端的接口鄰居是什麼狀态</b><b>,</b><b>本地的</b><b>bgp</b><b>鄰居始終會師</b><b>established</b><b>狀态</b><b>,</b><b>直到</b><b>bgp holdtime</b><b>逾時以後鄰居才會</b><b>down</b><b>掉。</b>

<b>減少網絡震蕩對于大型或者超大型網絡是相當重要的,稍微的失誤就會導緻路由器的資源耗盡進而産生嚴重事故</b><b>.</b>

對于這個特性,首先我們來看結果,然後我驗證一下我心中所想的工作原理:

在該拓撲中,R1和R2的配置為:

<b>R1</b><b>路由器</b><b>:</b>

R1#sh run | be router bgp

router bgp 100

no synchronization

bgp log-neighbor-changes

network 1.1.1.1 mask 255.255.255.255

neighbor 172.17.1.2 remote-as 200

no auto-summary

<b>R2</b><b>路由器</b><b>:</b>

R2#sh run | be router bgp

router bgp 200

network 2.2.2.2 mask 255.255.255.255

neighbor 172.17.1.1 remote-as 100

在正常情況下,當兩邊都建立好了EBGP鄰居以後,如果在R1上面shutdown interface f0/0,那麼兩邊的鄰居都會從established狀态回到IDLE狀态。

下面來看一下R1的情況:

現在在R1上面将bgp fast-external-fallover no掉看看情況:

然後再來做同樣的實驗:

<b>這就是指令</b><b>bgp fast-external-fallover</b><b>的功能</b><b>.</b>

<b>當遇到網絡頻繁的震蕩以後,進行故障排查是需要時間的,那麼這個時候希望對于網絡造成最小的影響,首先應該把這個指令</b><b>no</b><b>掉,然後這樣來争取最多的時間找到問題的原因。</b>

<b>不過,這裡有一個問題</b><b>.</b><b>就是當接口</b><b>down</b><b>下去了以後,本端是否會發</b><b>nitification </b><b>給對端,最後造成的結果是本端的鄰居不受影響,而對端的鄰居卻</b><b>down</b><b>了呢?</b>

<b>答案顯示不是這樣的。我已經做了實驗進行驗證了</b><b>,</b><b>打開</b><b>debug ip bgp events</b><b>以後</b><b>,</b><b>在本端打開</b><b>no bgp fast-external-fallover</b><b>以後</b><b>,</b><b>當</b><b>shutdown</b><b>接口</b><b>,</b><b>這個時候本端</b><b>bgp</b><b>不會發送任何</b><b>notification</b><b>消息給對端</b><b>,</b><b>這樣也就造成了本端的</b><b>bgp</b><b>鄰居不會</b><b>down</b><b>掉</b><b>,</b><b>對端的</b><b>bgp</b><b>鄰居也不會</b><b>down</b><b>掉。</b>

<b>當把本端的接口</b><b>up</b><b>起來以後,也不戶發送任何</b><b>update</b><b>消息給對端。這樣兩邊的鄰居就會在老化時間之内持續的</b><b>up</b><b>起來,并且由</b><b>bgp</b><b>學到的路由也會存在在</b><b>bgp</b><b>資料庫中,但是接口已經</b><b>down</b><b>了,</b><b>show ip route</b><b>的時候</b><b>[B]</b><b>的路由肯定是不會有的了。因為接口都已經</b><b>down</b><b>了。</b>

<b>這個感覺,就好像隻要使能</b><b>no bgp fast-external-fallover</b><b>以後,在</b><b>holdtime</b><b>内,沒有任何的</b><b>update/Notification...</b><b>讓鄰居慢慢的老化去吧</b><b>....</b>

<b>3-2 bgp client-to-client reflection</b>

路由反射器(Route Reflector:

路由反射器讓被配置為路由反射器的路由器向其他IBGP對等體傳輸由IBGP所學到的路由來修改BGP的橫向隔離規則,如果沒有路由反射器,那麼需要在AS内部每一個IBGP鄰居形成full-mesh的結構。對于運維成本來說相當不科學.

<b>路由反射器的優點:</b>

配置了BGP路由反射器,就不再需要全互連的IBGP對等體。路由反射器被允許向其它IBGP對等體傳輸IBGP路由。當内部鄰居指令語句數量過多時,I SP就會采用路由反射器技術。路由反射器通過讓主要路由器給它們的路由反射器客戶複制路由更新來減少AS内BGP鄰居關系的數量(這樣可以減少TCP連接配接)。

路由反射器不影響IP資料包所要經過的路徑;隻有釋出路由資訊的那條路徑受影響。如果路由反射器沒有被正确配置,那麼将可能産生路由環路。

路由反射器的術語:

路由反射器:是被配置為允許它把通過IBGP所學到的路由通告(或反射)到其他IBGP對等體的路由器。

叢集:路由反射器出其它客戶的組合;

客戶:路由反射器和其他路由有部分IBGP對等關系的這些路由器

非客戶:不是路由反射器的客戶的其他IBGP的對等體;

在BGP-4配置手冊中,第58頁,感覺沒有說清楚,和同僚讨論也不知道書上想說個啥意思,唯一看明白了就是當2個RR配置為互為備援的時候,cluster-ID需要一緻。

================================================================================

在網絡上找到了強人的筆記,是這樣描述的:

<b>關于</b><b>BGP originator-id </b><b>與</b><b> cluster-list id </b><b>屬性</b>

<b>這兩個屬性是用于</b><b>BGP</b><b>路由反射器</b><b>RR</b><b>,</b><b>防止環路用的。</b><b></b>

<b>originator-id</b><b>是當</b><b>RR</b><b>收到客戶或是非客戶的路由資訊放射給他的其它客戶時加上</b><b>originator-id</b><b>屬性</b><b>,</b><b>一般是對端的</b><b>BGP router-id. </b><b>當路由器收到是</b><b>originator-id</b><b>是自己的話就把路由資訊給丢棄來達到防止環路的目的。</b>

<b>originator_id</b><b>屬性隻有當</b><b>RR</b><b>從用戶端學到路由資訊向其它用戶端反射路由時才會加上</b><b>,</b><b>來防止環路。</b>

<b>cluster-list</b><b>屬性有點類似于</b><b>AS-PATH</b><b>屬性</b><b>,</b><b>它在存在路由放射組的時候用。當兩台</b><b>RR</b><b>互為客戶時</b><b>,</b><b>當一台</b><b>RR</b><b>向另外一台</b><b>RR</b><b>放射路由時會加上</b><b>cluster-list</b><b>屬性</b><b>,</b><b>一般是自己的</b><b>cluster id</b><b>号來填充。如果</b><b>RR</b><b>收到路由資訊的</b><b>cluster-list</b><b>屬性與自己的</b><b>cluster id</b><b>一緻的話,就把此路由資訊丢棄,來達到防止環路的目的。</b>

<b>■雙</b><b>RR</b><b>做備援備份案例:</b>

在這裡圖中,R2和R3為兩台互相備份互相備援的RR--路由反射器.(配置會随後附上)

R4和R2/R3建IBGP鄰居.

R5和R2/R3建IBGP鄰居.

R2和R1/R4/R3/R5建IBGP鄰居,cluster-ID為1.

R3和R1/R4/R2/R5建IBGP鄰居,cluster-ID為1.

R1和R2/R3建IBGP鄰居。

那麼這個時候,可以看到在R2上面,關于100.100.100.0的bgp資料庫中隻有一條資訊:

對于R2來說,按理來說,RR-2-R3應該也有一個100.100.100.的路由要傳遞過來,但是因為兩個RR的cluster ID配置的是一樣的,根據bgp的路由反射器的這個原則,收到了相同的cluster ID的路由需要丢掉以免成環。

對于R3來說也是一樣,R3上面這個RR,到100.100.100.0的網絡,也隻有下一跳是2.1.1.1的路由在bgp資料庫中。

在R4和R5上面,2條路由都有:

這個就是同AS内雙RR互為備份的例子。我們可以看到,在R4上面(R5也一樣),最優的路由是下一跳為1.1.1.1(因為這裡沒有在兩個路由反射器上用next-hop-self的指令),實際走的是R2,也就是說在這個執行個體中,R2作為主用RR,R3作為備用的。

為什麼呢?就是前面所提到的bgp的選路原則,已經逼到最後一步了,比兩個RR哪個router-ID小,上面是7.1.1.1,下面是5.1.1.1,自然就走5.1.1.1。

各個路由器主要配置如下:(可以參考拓撲圖核查配置)-----BGP部分的關鍵配置,基本IGP和接口配置這裡忽略.

<b>R1</b><b>配置</b><b>:</b>

router ospf 1

log-adjacency-changes

network 0.0.0.0 255.255.255.255 area 0

!

network 100.100.100.0 mask 255.255.255.0

neighbor 1.1.1.2 remote-as 100

neighbor 2.1.1.2 remote-as 100

<b>R2</b><b>配置</b>:

bgp cluster-id 1

neighbor 1.1.1.1 remote-as 100

neighbor 1.1.1.1 route-reflector-client

neighbor 3.1.1.2 remote-as 100

neighbor 4.1.1.2 remote-as 100

neighbor 4.1.1.2 route-reflector-client

neighbor 5.1.1.2 remote-as 100

neighbor 5.1.1.2 route-reflector-client

<b>R3</b><b>的配置</b><b>:</b>

neighbor 2.1.1.1 remote-as 100

neighbor 2.1.1.1 route-reflector-client

neighbor 3.1.1.1 remote-as 100

neighbor 6.1.1.2 remote-as 100

neighbor 6.1.1.2 route-reflector-client

neighbor 7.1.1.2 remote-as 100

neighbor 7.1.1.2 route-reflector-client

<b>R4</b><b>的配置</b><b>:</b>

neighbor 5.1.1.1 remote-as 100

neighbor 6.1.1.1 remote-as 100

<b>R5</b><b>的配置</b>:

neighbor 4.1.1.1 remote-as 100

neighbor 7.1.1.1 remote-as 100

上面是說的同一個AS雙RR做備援的情況,下面就是雙RR做負載分擔的情況:

<b>■當</b><b>R2</b><b>與</b><b>R3</b><b>的</b><b>cluster-ID</b><b>不同的時候</b>

上面我們已經提到過,bgp的原則就是,當本端的路由反射器收到了從對端發送過來的bgp路由攜帶了相同的cluster-id的時候,那麼這條路由會被丢棄掉。

因為怕環路的産生.

上面我們也說過,當R2上面去看bgp資料庫的時候就一條 達到100.100.100.100。

如果把R2和R3的cluster-id修改得不一樣,實際上每個路由反射器都會把自己認為最優的路由發送給對端。

R2和R3現在設定不同的cluster-id,再到R2上面看看:

在R3上面也有2條路由在BGP資料庫中:

對于R2和R3,配置隻是修改了cluster ID是不同的而已....

<b>這就是</b><b>BGP</b><b>的</b><b>cluster-ID</b><b>的特性。拿來做備援的。一個很實用的備份功能,當</b><b>clusterID</b><b>相同的時候,本地收到對端</b><b>bgp</b><b>鄰居發送過來的路由如果攜帶了相同的</b><b>cluster-id</b><b>,直接丢棄</b><b>.</b><b>避免環路。</b>

<b></b>

<b>本文轉自 hny2000 51CTO部落格,原文連結:http://blog.51cto.com/361531/708582</b>