BGP ALL IN ONE 詳解

來源:本站原創 CISCO 超過2,327 views圍觀 0條評論

BGP

為什么使用BGP

BGP是可靠的,基于TCP(Port Numer 179)進行建立和維護連接,并且具有并使用TCP的滑動窗口的機制來更新路由表,可以支持一次性的大量路由條目的更新. BGP是增量更新,同時也是觸發更新;周期性的發送Keepalive 信息來驗證TCP連接是否正常,以確保對方的路由器狀態是正常的。

PS:EIGRP(使用IPV4協議號89)和OSPF-V2(使用IPV4協議號88)使用One-One 窗口機制,OSPF一次更新100條路由。

BGP的使用原則

1. 多條路徑時,BGP Speaker只選最優的給自己使用

2. BGP Speaker只把自己的路由通告給鄰居

3. 從EBGP獲得的路由會向它所有BGP 鄰居通告(EBGP/IBGP)

BGP Speaker從IBGP獲得的路由不會通告給它的IBGP鄰居(BGP 的水平分割)IGP是基于端口的水平分割;而IBGP是基于鄰居的水平分割。水平分割的作用是避免產生路由環路。

4. BGP Speaker從IBGP獲得的路由是否通告給它的EBGP鄰居要服從IGP和BGP是否同步來決定

5. 鄰居關系一建立,BGP Speaker就把自己所有的BGP最優路由通告給新的鄰居

BGP鄰居協商過程(4Message

1. Open (code 1):用于建立連接,包含版本號(如BGP3/BGP4)Hold Time=180s(是一個協商的過程,以較小的Hold Time為準),Router-ID(OSPF和BGP可以手動配置),AS號(范圍從1~65535,其中64512~65535 的AS編號范圍留作私有);

2. KeepAlives(code 4):周期發送用于維護連接檢查路徑(這個包是不可靠的),T=Hold Time/3, Hold Time=0 => No KeepAlive.,keepalive 是個19 字節周期發送的BGP 消息頭標,沒有數據域。

3. Update(code 2):消息包含了三個組件:網絡層可達性消息(NLRI)、路徑屬性和被撤銷的路由。包括到達目的網絡的路徑和屬性,更新路由信息用,一次更新只有一條路徑,但可以有多條網絡。Update可以刪除(宣告不可達)和增加(宣告可達)路由.其內容是前綴的長度。

4. Notification(code 3):網絡中出現錯誤(Error),檢測到后斷開連接并發送通知給對方。

5.Route-Reflesh message:一個可選的message (negotiated during capability advertisement) that is sent to request dynamic BGP route updates from the Adj-RIB-Out table of a remote BGP speaker

PS :BG Ptime

在BGP路由配置模式下可以配置全局的BGP timer :timers bgp 70 210

對于特定的neighbor可以使用特定的 BGP timer:neighbor 172.17.1.2 timers 80 240

過程:Idel,connect,open sent,open confirm,establish。

BGP鄰居建立會話的5種狀態:

1. Idle:查找路由表,該過程BGP對它的資源進行初始化,復位一個連接重試計時器,發起一條TCP 連接,并開始傾聽遠程對等體所發起的連接。

2. Connect:找到路由表后進行TCP三次握手,TCP 連接成功,則轉到OpenSent狀態,TCP連接失敗,則轉到active 狀態,將嘗試再次連接。

3. Open Sent:握上手后發送Open message消息,等待其對等體發送打開消息,如果出錯,則發送一條出錯消息并退回空閑狀態,如果無錯,則開始發送Keepalive 并復位keepalive 計時器。

4. Open Confirm:收到對方發來的Open消息,如果收到keepalive 消息,BGP 就進入established狀態,鄰居關系協商完成;如果系統收到一條更新或keepalive 消息,它將重新啟動保持計時器;如果收到Notification消息,BGP 就退回到空閑狀態。

5. Established:會話建立,鄰居關系協商過程最終狀態;這時BGP將開始與它的對等體交換路由更新數據包。

PS: Active狀態:當路由器發送出OPEN包給鄰居等待回應,如果長時間未接收到回應則超時,超時后狀態更改為Idle,試圖發起TCP連接獲得對等體,成功轉到Open Sent狀態,連接重試計時器超時,退回連接狀態。,這是由于TCP鏈路上出現了問題所致。??

產生問題的原因主要有:

1. Neighbor命令后面的ip-address配置有錯;

2. 沒有打上Neighbor命令(兩邊都要)

3. 更新源錯誤,或者更新源不可達。

Debug信息:

Aspen#

18:24:33: BGP: 192.168.1.221 went from Idle to Active

18:24:41: BGP: 192.168.1.221 went from Active to OpenSent

18:24:42: BGP: 192.168.1.221 went from OpenSent to OpenConfirm

18:24:42: BGP: 192.168.1.221 went from OpenConfirm to Established

18:24:43: BGP: 192.168.1.221 computing updates, neighbor version 0, table version

n 1, starting at 0.0.0.0

18:24:43: BGP: 192.168.1.221 update run completed, ran for 0ms, neighbor version

0, start version 1, throttled to 1, check point net 0.0.0.0

BGP Input Events

BGP的3個數據庫

鄰居表、BGP轉發表(也叫轉發庫)、IP路由表。

BGP同步和黑洞問題

BGP 路由器不應該將從其內部BGP 鄰居處學到的目的地網絡通告給其外部鄰居路由器,除非這些目的地網絡是通過IGP 可達的。不同步的時候,路由表里面顯示的是 非最優(①下一跳是否可達 ②同步原則是否滿足),同步默認是打開的,全互連時(用于IBGP)需要關閉同步,命令是:Router(config-router)#no synchronization

BGP 路由進程

從對等體處收到的路由->輸入策略引擎->路由判定過程(BGP 表)->路由器所用的路由(IP 路由表)->輸出策略引擎->通告給對等體的路由

BGP的下一跳跳屬性

1. 在多路廣播網絡中,其下一條屬性不變
clip_image001

如圖:B 通過EBGP通告網絡172.30.0.0 給A而不改變其下一跳屬性 10.10.10.2,這種行為防止了一個不必要的Hop,因為他們都同在一個多路廣播網絡里面。如果改變了其下一跳屬性為10.10.10.1,當AS 65000作為一個Transit AS的時候, AS 64520的EBGP Router就不是以最優的路徑通過AS 65000。

PS:BGP是一種AS-by-AS的路由協議,它的下一跳指的是下一個AS.而不是下一個Router

1. 從EBGP學習到的路由,其下一跳屬性不變,可以手動做next-hop-self

2. 在IBGP關系中,下一跳地址,就是通告該路由的IBGP 的 更新源。???還是Router-id???

jeans_young:

next_hop的三個規則是這樣的:
a.如果是由EBGP peer通告的BGP update報文,那么next_hop就是AS外這個EBGP peer的IP地址。(實際上,是與本AS直連的接口IP地址)
b. 假如BGP update報文是由IBGP peer通告的,那么next_hop就是這個IBGP peer發出更新報文的接口IP地址
c.如果update 報文最開始是由EBGP peer通告,但是是從本AS內的邊界路由器(也就是IBGP peer),那么next_hop是EBGP peer的通告出更新的接口IP地址,而不是本AS的這個IBGP peer。
ps:其實,前兩條規則,比較容易理解,我們可以這樣記憶前兩條:誰通告的,那么下一跳就是它。主要是第三條有點特殊。但是只要我們把BGP協議本身的起源想一想就容易理解了。BGP是對于大型互聯網的一個路由協議。它其實我們應該把它理解成路徑向量協議。也就是說它的視角是AS,而不是單個的router。BGP是宏觀視角,IGP則是微觀視角。所以,像第三種情況,我們要把視角上升到一個更高的高度——從AS來看。那么就容易理解了。既然是IBGP peer轉發通告EBGP peer發來的路由,那么得追根溯源。最終追到EBGP peer。所以它才是真正的下一跳。
這里,我們會發現一個問題,就是假如這個邊界路由器沒有告訴本AS的其它路由器到這個EBGP peer怎么走,那么這樣路由不可達就會導致數據包被丟棄。所以引入了next_hop_self機制,配置在邊界路由器上,使得IBGP peer要發路由更新給EBGP peer的時候,強制從自己這里走,因為對于邊界路由器來講,他是知道怎么到達EBGP peer的。這個其實有點類似于代理的概念。比如proxy ARP。就是把自己的MAC地址通告給ARP請求者,而不是把ARP請求的真正目的MAC回送回去。目的就是代理。

BGP屬性

①公認屬性(Must be recognized by all compliant BGP implementations Are propagated to other neighbors)

②Well-known mandatory attributes(Must be present in all update messages)

③Well-known discretionary attributes(May be present in update messages)

④可選(Recognized by some implementations (could be private), expected not to be recognized by everyone ,Recognized optional attributes are propagated to other neighbors based on their meaning )

⑤可選傳遞屬性(If not recognized, are marked as partial and
propagated to other neighbors )

⑥可選不可傳遞屬性(Discarded if not recognized)

公認必選:ORIGIN/AS_PATH/NEXT_HOP

公認自選:LOCAL_PREF/ATOMIC_AFFREGATE

任選可透明傳遞:AGGREGATOR/COMMUNITY

任選非可透明傳遞:MED/ORIGINATOR_ID/CLUSTER_LIST

AS-path (prepending):BGP中用于檢測環路,當一個AS-PATH中有兩個相同的AS號說明有環路產生,如果自己的AS出現在某接收到的路由AS-PATH中,?接收嗎?是一個有序列表。

Next-hop詳見上方。

MED又叫BGP的metrics值(沒有MED的路由->MED=0;缺少MED的路由,將成為最先優選的路由),作用是影響鄰居AS的路由選擇。在有多出口的本AS中,決定鄰居AS更優先從哪個出口進入本AS,默認值是0,值越小優先級越高。MED僅向EBGP鄰居發送。它是可選的、非傳遞屬性。bgp bestpath missing-as-worst命令修改cisco ios對med的行為,使得和最新的ietf標準(丟失MED->將MED設置成無窮大;缺少MED的路由,將成為最后優選的路由)一致

如果沒有啟用bgp deterministic-med,接收到的路由的順序可能影響基于med的最有路徑選擇,當從多個as收到同一條路由,而且具有完全一樣的路徑長度和不同的med,就會發生下面的情況:

A) ASPATH 1, MED 100, internal, igp metric to NEXT_HOP 10

B) ASPATH 2, MED 150, internal, igp metric to NEXT_HOP 5

C) ASPATH 1, MED 200, external

在沒有配置bgp deterministic-med的路由會優選B(較低的IGP metric),接著是C(EBGP>IBGP),而C的MED值高于A

在啟用bgp deterministic-med的Router,將清除對基于MED最優路徑選擇的臨時依賴,它可以確保滿足MED的原始要求,來控制進入本AS的流量的選擇,會對進入被AS的所有路由進行med比較,最后選擇有最小med值的A是最優路徑,但是如果Router配置了bgp always-compare-med,將總是采用BGP MED 判斷。

WeightCisco Only):權重,(范圍0 到 65,535)weight是CISCO私有的參數,路由器配置了權重后在本地有效,缺省情況下,從對等學習到的所有路由的Weight都是0,由本Router產生的路由的Weight都是32768。作用是影響路由選擇,值越大優先級越高。不向BGP鄰居發送,僅限本地路由器,

neighbor {ip-address | peer-group-name} weight default-weight,將鄰居發送來的路由的weight值改變

Local-preferenceLocal-preference是在一個多出口的as中控制流量更優先的從哪個出口出去, Local-preference的默認值是100,更改值的命令是:Router(config-router)# bgp default local-preference value 他的值越高,其優先級越大.本地優先值僅在AS內部中有效.(學習的路由影響出去的流量,公告出去的路由影響進來的流量.)

Origin起源(也叫起點)屬性。

注入BGP路由表有三種方式(來源/起源):

一種是用Network命令進行,在BGP路由表顯示為i(源屬性:0),另一種是再發布EGP獲得的,在路由表中顯示為E(源屬性:1),最后一種是從IGP或靜態路由再發布過來的,顯示為?(源屬性:2)。

Communities(團體)

擴展communities屬性(AS號:AS自己定義的號碼)

將他們化成10進制就是CISCO路由器對標準communities屬性的表示方法。

(1).INTERNET:INTERNET團體沒有一個確定的值,所有屬于這個團體的路由豆芽一個缺省值,可以自由的公布屬于這個團體的路由(Advertise to any peer)

(2)NO_EXPORT(4294967041或者0Xffffff01):接收到的攜帶該值的路由不能公布給EBGP對等體,或者如果配置了一個聯盟,該路由不能在聯盟范圍以外公布――鄰居
(3)NO_ADVERTISE(4294967042或者0Xffffff02):接收到的攜帶該值的路由不能公布給EBGP或者IBGP的對等體。――不廣播,只留給自己,自私(Do not advertise to any peer /will go to next-hop only

(5).LOCAL_AS(4294967043或者0Xffffff03):RFC1997稱這個屬性為NO_EXPORT_SUBCONFED.不能將接收到的攜帶該值的路由公布給EBGP對等體,以及在聯盟內的其他AS的對等。――本AS內

(6).None(Removes the community with: set community none)

Transit AS

Stub AS經過這個AS才能到達其它的AS。

BGP匯總(Route Aggregation)

1. BGP默認是自動匯總(主類網絡)的,可以用 no auto-summary來關閉

可以用network *.*.*.* mask *.*.*.* 來手動匯總(只有在路由表里面有這些條目的時候,才可以用這條命令來實現手動匯總,而且只能用這條命令公布200條前綴)Network命令不僅宣告匯總路由,并且也將具體路由宣告出去。如果不想將具體路由宣告出去,需進行過濾(前面提到的Outbound策略)。Network命令本身不能做匯總,需要IP route命令配合。這種匯總比較麻煩,我們并不推薦。只當需要將已由IGP匯總(OSPF、EIGRP等)后的路由原封不動地發布到BGP里的情況下才使用。(自動匯總只能匯總到主類網絡)

PS: Network命令是將已存在(和已由IGP匯總)的路由表宣告到BGP中。無Mask的宣告將是有類網絡(A、B、C),有Mask的則是無類網絡。

2. Router(config)# ip route prefix mask null0 Null 0是空端口,不是一個物理的端口,目的是告訴其它路由從我這個路由走,但具體怎么走,不是指定一個物理的端口。只是在路由表里面形成類似于已經匯總的路由,有點路由欺騙的味道,當到達本Router的數據包目的地可達的時候(有相關的路由),不會出現問題,但是,當路由不可到達的時候,所有的包將發送給NULL0口,這樣可以防止DDOS攻擊。

ip route 192.168.192.0 255.255.248.0 null0(在IGP表里面有的條目)

router bgp 100

network 192.168.192.0 mask 255.255.248.0(向所有建立的鄰居都發送聚合路由)

3.

Router(config-router)# aggregate-address ip-address mask [summary-only] [as-set]

對BGP表中的路由器條目進行匯總,在BGP路由進程配置模式下 Aggregate-address匯總命令它是創建一個匯總的路由并進行宣告。

Summary-only參數是只宣告匯總路由,抑制具體路由(不發布具體路由)。

AS-Set參數:不同路由經過的AS可能不一樣,這條命令的作用在于匯總路由知道具體路由所經過的AS的集合,不是有序的AS-PATH),以避免產生環路。

這樣匯總不須人工指定空端口,系統會自動產生。

Sun#show ip bgp 192.168.192.0 255.255.248.0

BGP routing table entry for 192.168.192.0/21, version 23

Paths: (1 available, best #1)

Advertised to non peer-group peers:

192.168.1.229

300, (aggregated by 300 192.168.1.250)

192.168.1.233 from 192.168.1.233 (192.168.1.250)

Origin IGP, localpref 100, valid, external, atomic-aggregate, best, ref 2

②用aggregate-addresssuppress-map過濾/抑制路由

router bgp 100

no sy

neighbor 192.168.1.253 remote-as 200

neighbor 192.168.1.246 remote-as 200

aggregate-address 192.168.192.0 255.255.248.0 suppress-map VERMONT

aggregate-address 192.168.192.0 255.255.248.0 suppress-map CALIFORNIA

aggregate-address 192.168.192.0 255.255.248.0 attribute-map ORIGIN suppress-map

VERMONT

aggregate-address 192.168.192.0 255.255.248.0 as-set summary-only advertise-map

ALLOW_ROUTE

!

ip prefix-list SUPPRESSEDROUTES seq 5 permit 192.168.192.0/22 le 24

ip prefix-list SUPPRESSEDROUTES seq 10 permit 192.168.199.0/24

access-list 1 permit 192.168.195.0 0.0.0.255(隱式拒絕all,表示對其他所有路由都不抑制)

access-list 2 deny 192.168.197.0

access-list 2 permit any

!

route-map VERMONT permit 10

match ip address 1

!

route-map CALIFORNIA permit 10

match ip address prefix-list SUPPRESSEDROUTES

route-map ORIGIN permit 10

set origin incomplete

!

route-map ALLOW_ROUTE permit 10

match ip address 2

在access-list中的permit表示運行被抑制的,而deny是不運行被抑制。

③用aggregate-addressattribute-map改變聚合路由的屬性

例子在上方,聚合路由有一個IGP的ORIGUN屬性。

④neighbor *.*.*.* distribute-list命令過濾路由

neighbor 192.168.1.249 distribute-list 1 out(阻止出站路由)(in-阻止入站路由)!

access-list 1 deny 192.168.192.0(拒絕)

access-list 1 permit any(其他的允許)

⑤用aggregate-addressadvertise-map去掉community屬性

例子在上方。

PS:EIGRP本地自動匯總,關掉自動匯總,show ip route后馬上看到效果。

BGP默認是打開自動匯總的,如果關掉自動匯總,在發給對方的時候才看到效果,也就是給對等體發送的是匯總路由,在本地看不出,

clip_image002

BGP選路原則

PS:在show ip bgp *.*.*.*后面不合法的BGP路由:

1. 如果啟用了BGP同步—當前IOS軟件的缺省配置,路由器會忽略那些在輸入show ip bgp *.*.*.*命令語句后系統輸出信息中被注明“not sychronized”的路徑—在IP路由表中一定會有一條內部路徑(IBGP)與一個地址前綴的匹配被看作是合法路徑。

2. 忽略那些下一跳不可達的路徑。這就是為什么運行IGP協議非常重要,因為IGP使得與路徑的相關下一跳地址可達。

3. 忽略那些從EBGP Peer得到的,本地AS號碼出現在AS-PATH中的路徑信息。這類路徑信息在路由器入口就被拒絕,甚至還來不及按照到BGP RIB庫中。同樣規則可以使用與ACLS,IP Prefixs,AS路徑或者團體屬性列表進行判斷,并拒絕,除非對等體配置了inbound soft reconfiguration命令語句

4. 如果Router啟用了 Bgp bestpath enforce-first-as ,當對等體送來的更新信息中在AS序列項對等體的AS號碼不在第一位,則發送一個NOTIFICATION報文并中止回話連接。

5. 忽略那些在輸入show ip bgp *.*.*.*命令語句后系統輸出信息中被注明“(received-only)”的路徑。這條路徑被路由器上實施的策略所拒絕,但仍就被保存在路由器內,因為發送這條路徑信息的對等體配置了“soft reconfiguration inbound”。

6. 忽略那些下一跳度量值被標記為不可達的路徑。

IOS軟件BGP最優路徑算法:

1.優選有最大Weight的路由

3.優選有最大LOCAL_PREF值的路由(范圍 0到 4,294,967,295).

4.優選從本路由器始發的路由(包括本地network配置的重分布,或者在IGP表中已經有一些需要被配置路由聚合的地址,在BGP中用Aggregate命令配置的路由聚合,)

5.優選有最短AS_PATH的路由

A.如果配置了Bgp bestpath as-path ignore,則這個步驟被忽略

B.B.一個AS路徑集被當作一個AS,無論在這個集合中有多少AS。AS路徑長度中沒有包括。AS_CONFED_SEQUENCE。

6.根據Origin屬性.優選具有最低起源類型的路由(IGP>EG>Incomplete)

7.優選最小MED 值的路由(范圍 0到4,294,967,295).

A.只有在通過兩條路徑得到第一個AS(對等體)是同一個AS時才進行MED比較;任何子自治域的聯盟系統都會被忽略。也就是說,只有在AS序列號中第一個AS號碼一致時,才進行MED比較;任何聯盟AS序列號(AS_CONFED_SEQUENCE)都會被忽略。

B.如果路由器上配置了 bgp always—compare—med ,在全部的路徑進行MED比較。但是這需要全體AS都同時啟用這個功能,否則有可能發生路由環路。

C.如果路由器上配置了 bgp bestpath med confed ,將對所有只包括AS_CONFED_SEQUENCE的路徑進行MED比較(即路徑是起源于本地聯盟)。

D.如果接收到的路徑沒有分配MED值,則將此路徑分配為0,除非路由器上配置了bestpath missing—is—worst,將被看作MED值為4,294,967,295的路由將在注入到BGP路由選擇表之前被改為4,294,967,294。

E.BGP明確的MED值9(詳見本章后面的“BGP明確的MED”段落)也可以影響此步驟。

8.外部路由EBGP優先于聯盟(confederation)外部路由優于內部路由IBGP(優選 E-BGP路由)

注意,路徑中包括AS_CONFEND_SEQUENCE屬性對聯盟只有在本地有效,因此被看作是內部路徑。無法區別外部聯盟和內部聯盟。

9. 優選能通過最近的IGP鄰居到達的路徑(優選對BGP下一跳具有最低IGP度量值的路徑);

10.如果在路由器上配置了maximum—pathsN,而且從同一個對等體自治域/子自治域接收到多條外部/外部聯盟的路徑,則最多可以將N條最近接收到的路徑加入到IP路由選擇表中。這可以使得eBGP在多條路徑上進行負載分擔。目前N所代表的最大數目是6;當沒有啟用此功能時,缺省數值是1。在輸入了show ip bgp x.x.x.x后系統輸出信息中可以看到最早接收到的路徑被標記為最優路徑,在將這條最優路徑轉發到內部對等體之前,需要執行與next_hop_self作用相同的功能。

11.如果是external的路由,優選最老的路由(最先被學習到的路由).

A.此步驟可以將路由擺動的影響減到最小,因為新接收到的路徑不會取代老的,即使這條新接收的路徑是通過下面提及到的額外路徑選擇標準來進行選擇的。這使得只在iBGP路徑下應用額外的選擇步驟更有意義。

B.此步驟可以被bgp bestpath compare_routerid命令語句所關閉。

C.如果路由器標志是一樣的,此步驟可以被屏蔽,因為這說明路由器正在從自己那里接收路由。

D.如果當前沒有最優路由器,此步驟可以被屏蔽。當提供某個路徑的對等體路由器宏機,就會發生丟失

當前最優路徑的情況。

12.如果在同一時間學習到多條到同一目的地的路由,優選最小BGP-router-ID的路由,注意,如果一個路徑包括路由反射器屬性,起始者標識將代替路由器標識在路徑選擇過程中起作用。

12.如果路由從路由反射器上學習到 ,優選最小Cluster-ID(BGP_ID of the route reflector)長度的路由,而且它運行客戶機和其他反射器族中的RR/Clients 之間做對等連接,在這種情況下,路由器必須知道BGP協議中的RR的具體配置。

13.優選具有最低對等體地址接收到的路徑。這個地址是在BGP對等體上配置并使用的地址,這個地址是本地對等體路由器在其上配置TCP鄰居并與遠端對等體建立連接時采用的地址。

step12的翻譯是這樣的:如果從相同的主機收到路徑,不論它是對等體還是路由反射器,選擇擁有最低對等體IP地址(直連接口的地址或者如果沒有直連的話,最近間接相連的接口的地址)的鄰居學來的路徑。
就像這個圖的情況:路由器ABCD處在同一個AS中,A到達D穿過了一個網云,路由器A從路由器D收到兩條到達它的路由。如何選擇呢。按step12的意思應該是選擇路徑A。這是我的理解。大家討論下。
clip_image004

AS-Path/Prefix-List/Outbound/Route-map過濾

限制從鄰居收到路由Prefix的數量

Neighbor *.*.*.* maximum-prefix threshold-value [warning-only]:限制從一個鄰居接收前綴的數量,[warning-only]參數表示當鄰居公布的前綴超過了最大值的90%,Router就生成一個日志消息。

限制從鄰居收到路由as路徑長度

(1) as路徑過濾(filter-list/ip as-path access-list 1 permit …)

(2) Router bgp 109

Neighbor 192.168.1.1 remote-as 65534

Neighbor 192.168.1.1 maxas-limit 10

所有接收到的地址前綴都在BGP 路由表里,但是只有那些as路徑長度低于或者等于10的地址前綴才可以進入BGP路由選擇處理進程。

路由反射器(Cluster-id)

#路由反射器不改變客戶傳來的路由的屬性

#RR和它的client 就形成一個Cluster,如果AS中有多個RP及其相應的Client,就可以通過不同的Cluster-ID 來區分,對于Cluster內部的Client來說,它不需要FULL-MESHed,并且Client 只與和它位于同一Cluster內部的RP向連接即可,它不會去Cluster外部的BGP Speaker 建立Peer關系。(RFC1966)

#RR防止環路的機制:兩個屬性originaor_id,包含了始發這條路由的路由器的route-id,因此RR不會將此路由又重新發回給源,如果發起者收到一個帶有自己的RID的更新消息,它會不理睬該消息;RR有一個單點故障問題,如果RR掛掉,則client就會丟失他們唯一的NLRI來源,這樣就可以做一個雙RR備份,此時cluster-list(是一個任選非傳遞屬性,當一個RR將一條路由從一個client反射到一個non-client,它將它的cluster-id加到cluster-list上,如果cluster-list是空的,rr就生成一個,其包含RR的cluster-id(在最新版本的IOS里面,cluster-id在配置RR的時候自動生成),當RR收到一個更新消息的時候,他檢查cluster-list,如果在cluster-list里面看到自己的cluster-id值,就不會接收這條路由。????)

可以避免環路,

clip_image005

(1)兩個RR配置相同的cluster-id

1.在client1上有一條1.1.1.0的路由,它將這條路由傳給它的兩個RR(RR1/RR2),RR1和RR2都接收這條路由,因為路由反射器的性質打破了IBGP的水平分割的原則,兩個RR互相把這條路由傳給對方和另外的客戶端,這時候,他們互相在cluster-list里面看到了自己的cluster-id,他們就不接收這條路由(不放進BGP database),所以在RR1/RR2看到的這條路由只有從client1傳來的。在client2/3上看到分別從RR1/RR2收到這條路由,但是優選從RR1收到的(我覺得這里面又包含先從誰那里先收到這條路由的問題)

2.在RR1上有一條2.2.2.0的路由,這時候RR1將這條路由傳給了RR2和它的3個client,RR2接收這條路由并且把他÷他們傳給他的client,這時候3個client同時從RR1和RR2收到這條路由,它在路由的cluster-list里面看到兩者有相同的cluster-id,他們優選從RR1收到的路由,由于RR的client就是普通的IBGP路由器,存在水平分割的原則,他們就不會把這條路由傳給其他的IBGP鄰居。

PS :在Rr的client上的路由里面才看到cluster-list.

在as內部,不改變BGP的下一條屬性,show ip b和show ip b *.*.*.*的內容不一樣,后者可以看到路由的詳細情況。

clip_image006

r1#sho ip b 22.22.22.0

BGP routing table entry for 22.22.22.0/24, version 2

Paths: (2 available, best #2, table Default-IP-Routing-Table)

Not advertised to any peer

Local

2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)

Origin IGP, metric 0, localpref 100, valid, internal

Originator: 22.22.22.22, Cluster list: 0.0.0.1

Local

2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)

Origin IGP, metric 0, localpref 100, valid, internal, best

r1#sh ip b 44.44.44.0

BGP routing table entry for 44.44.44.0/24, version 3

Paths: (2 available, best #2, table Default-IP-Routing-Table)

Not advertised to any peer

Local

4.4.4.4 (metric 129) from 3.3.3.3 (3.3.3.3)

Origin IGP, metric 0, localpref 100, valid, internal

Originator: 44.44.44.44, Cluster list: 0.0.0.1

Local

4.4.4.4 (metric 129) from 2.2.2.2 (22.22.22.22)

Origin IGP, metric 0, localpref 100, valid, internal, best

Originator: 44.44.44.44, Cluster list: 0.0.0.1

—————————————————————————————————————-

r2#sho ip b 22.22.22.0

本文隱藏內容 登陸 后才可以瀏覽

—————————————————————————————————————-

r3#sho ip b 22.22.22.0

BGP routing table entry for 22.22.22.0/24, version 2

Paths: (1 available, best #1, table Default-IP-Routing-Table)

Advertised to non peer-group peers:

1.1.1.1 4.4.4.4

Local

2.2.2.2 (metric 11) from 2.2.2.2 (22.22.22.22)

Origin IGP, metric 0, localpref 100, valid, internal, best

r3#sho ip b 44.44.44.0

BGP routing table entry for 44.44.44.0/24, version 3

Paths: (1 available, best #1, table Default-IP-Routing-Table)

Advertised to non peer-group peers:

1.1.1.1 2.2.2.2

Local, (Received from a RR-client)

4.4.4.4 (metric 75) from 4.4.4.4 (44.44.44.44)

Origin IGP, metric 0, localpref 100, valid, internal, best

—————————————————————————————————————-

r4#sho ip b 22.22.22.0

BGP routing table entry for 22.22.22.0/24, version 3

Paths: (2 available, best #2, table Default-IP-Routing-Table)

Not advertised to any peer

Local

2.2.2.2 (metric 65) from 3.3.3.3 (3.3.3.3)

Origin IGP, metric 0, localpref 100, valid, internal

Originator: 22.22.22.22, Cluster list: 0.0.0.1

Local

2.2.2.2 (metric 65) from 2.2.2.2 (22.22.22.22)

Origin IGP, metric 0, localpref 100, valid, internal, best

r4#sho ip b 44.44.44.0

BGP routing table entry for 44.44.44.0/24, version 2

Paths: (1 available, best #1, table Default-IP-Routing-Table)

Advertised to non peer-group peers:

2.2.2.2 3.3.3.3

Local

0.0.0.0 from 0.0.0.0 (44.44.44.44)

Origin IGP, metric 0, localpref 100, weight 32768, valid, sourced, local, best

(1)兩個RR配置不同的cluster-id

1.在client1上有一條1.1.1.0的路由,它將這條路由傳給它的兩個RR(RR1/RR2),RR1和RR2都接收這條路由,因為路由反射器的性質打破了IBGP的水平分割的原則,兩個RR互相把這條路由傳給對方和clients,根據bgp的選路原則,他們會優選有較小IGP metric的路由,這時候,就是選擇從client1接收的路由。

2.在RR1上有一條2.2.2.0的路由,這時候RR1將這條路由傳給了RR2和它的3個client,因為在這條路由的cluster-list里的cluster-id不一樣,他們就互相都接收了這條路由,因為路由反射器的性質打破了IBGP的水平分割的原則,他們又把這條路由再傳給clients,而3個client在接收這條路由的同時,由于RR的client就是普通的IBGP路由器,存在水平分割的原則,他們就不會把這條路由傳給其他的IBGP鄰居,但是他們收到了兩次這條路由信息的更新,根據bgp的選路原則,他們會優選有較小IGP metric的路由,這時候,就是選擇從RR1接收的路由。

clip_image007

(1)如果路由是從Non-client的IBGP學習到的,只將她反射給client。

(2)如果路由是從client學習到的,將它反射給除了發起該路由的client以外的所有non-clent及其client

(3)如果路由是從EBGP對等體學習到的,將它反射給所有的client和non-client。

Confederations(聯盟)

由子AS組成的AS,

clip_image008
聯盟AS9184是由AS65510/AS65520/AS65530組成的。

AS_path兩類屬性:as_sequence和as_set,聯盟為AS_path增加了兩個屬性類型。AS_CONFED_SEQUENCE和AS_CONFED_SET

AS_CONFED_SEQUENCE:由屬于本地聯盟中的自治系統的AS號組成的有序列表,在聯盟內部防止路由環路。

AS_CONFED_SET:由屬于本地聯盟中的自治系統的AS號組成的無序列表,在聯盟內部防止在做路由聚合的時候,由于丟失AS信息而引起路由環路。

在聯盟中,到聯盟外部的EBGP路由優先與到AS成員的EBGP路由,到AS成員的EBGP路由優于IBGP路由,聯盟和AS之間還有一個不同:例如NEXT_HOP/MED,可以不加修改地公布給聯盟的其他AS成員中的EBGP對端,而且也可以發送LOCAL_PREF.

在RR環境下,只要RR支持路由反射器功能就可以,在聯盟環境下,所有的Router都要支持這一特性,因為所有Router都必須識別AS_PATH中的AS_CONFED_SEQUENCE和AS_CONFED_SET類別,因為向聯盟外面公布路由的時候,要把這些AS_PATH類去掉,因此其他AS的路由器不要支持聯盟。

當向聯盟外部的EBGP對等體發送update消息的時候,會將AS_CONFED_SEQUENCE和AS_CONFED_SET

從AS_PATH屬性中去掉,將聯盟as號加到AS_PATH中,因為這一點,外部的對等體就把聯盟看作是一個AS而不是一個自治系統的集合。

PS: AS-Path/AS-Set的區別:AS-Path(有序列表)/AS-Set(無序集合)

Sugarbush#show ip bgp

BGP table version is 19, local router ID is 172.20.1.1

Status codes: s suppressed, d damped, h history, * valid, > best, i – internal

Origin codes: i – IGP, e – EGP, ? – incomplete

Network Next Hop Metric LocPrf Weight Path

Network Next Hop Metric LocPrf Weight Path

*> 192.168.192.0/21 192.168.1.230 0 400 300 i

*> 192.168.192.0/21 192.168.1.233 0 300 {200,100,500} ?

Peer Group(對等體組)

如果在某一Router的旁邊有一些路由器,它們都有一致的策略,就可以指定一個鄰居組(對等組)

創建組的命令:Router(config-router)# neighbor [peer-group-name] peer-group

添加成員的命令:Router(config-router)# neighbor [ip-address] peer-group [peer-group-name]

這樣的好處是簡化配置。

BGP Route Damping(BGP路由抑制)

bgp dampening [[route-map map-name] [half-life-time reuse-value suppress-value

maximum-suppress-time]]

Penalty:默認值是1000 per flap

Suppress-value:范圍1~20000;默認值是2000

Reuse-value:范圍1~2000;默認值是750

Half-life:范圍1~45min;默認值是15 minutes

Maximum-suppress-time:范圍1~255;默認值是60 minutes, or 4 times the half-life

例子:對172.16.220.0/20做抑制
clip_image009

ROUTER C

router ospf 10

redistribute bgp 1 subnets

network 192.68.0.0 0.0.255.255 area 0

router bgp 1

bgp dampening route-map SELECTIVE_DAMPENING

network 192.68.11.0

neighbor 172.16.20.2 remote-as 3

neighbor 192.68.6.1 remote-as 1

no auto-summary

access-list 1 permit 172.16.220.0 0.0.0.255

route-map SELECTIVE_DAMPENING permit 10

match ip address 1

set dampening 20 950 2500 80

route-map SELECTIVE_DAMPENING permit 20

改進BGP的聚合

BGP的鄰居認證

#bgp的認證僅僅限制于鄰居之間.

例如:\

nei 5.5.5.5 password cisco(默認就是md5認證)

調用認證功能需要CISCO ios軟件在TCP連接中每發送一個TCP字段就生成并校驗MD5摘要,如果調用了認證,但是其中一個字段沒有通過認證,會向console口發送一個message

如果只是在一邊配置了認證:

%TCP-6-BADAUTH: No MD5 digest from [peer’s IP address]:11003 to [local router’s IP address]:179

如果兩邊的認證密碼不匹配:

%TCP-6-BADAUTH: Invalid MD5 digest from [peer’s IP address]:11004 to [local router’s IP address]:179

正則表達式

. 任意單一字符,包括空格,句號  .標志匹配任意一個字符,包括空格,如:當我們使用permit .*的時候,表示匹配所有的路由。

[] 在方括弧中羅列的任何字符

[^] 除了在方括弧中羅列字符外任何字符

– 在由連字符所分隔的兩個字符之間的任意字符, 表示兩個AS之間的連接符,如:permit ^254_253_252$, 表示起源于252,經過253和254的路由條目

? 字符或模式出現0次或1次,標志匹配前面的一個字符,注意:只是匹配一個字符。?允許前面的字符出現一次或者是空。如:permit 254[0-9]?$,那么就是只匹配起源于AS 254/2540—2549的路由,注意?在CISCO路由器上用CTRL-V來替代。

* 字符或模式出現0次或多次,標志匹配前面的一個字符,注意,和?不同的是,*允許前面的字符出現許多次或者是空,而?只允許匹配出現一次或者是空。如:permit 254[0-9]*$,那么就是只匹配起源于AS 254/2540—25499999……..的路由 如果是permit 254[5-9],那么就是匹配起源自AS 254/2545-2549/25455-25459/254555-
254599…………

+ 字符或模式出現1次或多次,+和*的區別就是*可以匹配空,但是+必須匹配一個值才行如permit ^254+$,表示起源于254或者2544/25444……..而permit ^254*$則可以匹配起源于AS 25/254/25444。

^ 一行的開始,標志一個表達式的開始,如果不用這個字符,那么默認就沒有開始的限制了。如:當使用permit ^254,那么表示的意思就是和本地相連的AS是254傳過來的路由全部都允許了。如果使用簡單的permit 254,那么就是只要是經過了AS 254的路由,全部都被允許了,其實和permit _254_表達的意思相同。

$ 一行的結束,標志一個表達式的結束,如果不用這個字符,那么默認就沒有結束的限制了。如:當使用了permit 254$,那么表示的意思就是起源于AS 254的路由全部被接受,如果permit 254那么見上面的解釋。

| 由元字符特殊字符分隔的字之一

_ 一個逗號,行的開始,行的結束或空格

BGP的其他性質

1.BGP和ISIS一樣以鏈路為邊界。

2.BGP不支持負載均衡,因為通過它復雜的選路原則一定可以決定一條最優的路由。

3.BGP版本向后兼容,如果發現對方是更低的版本,將會降低自己的版本來與之兼容,當前的版本是BGP V4。

4.BGP Peer=BGP Speaker=BGP Neighbor

5. 在本AS內,BGP的AS-PATH屬性不變,在離開本AS的時候,會在AS-PATH前面附加上本AS的AS 號。

6.一個Router 只能運行一個BGP實例(不會把一個路由器放到多個BGP(AS)中)。但是可以采用local-as這來使Router可以同時有2個asn(但是實際上只用一個),這是對于Ebgp鄰居而言的,如果在A(as 109)—–EBGP—-B(as 159) 之間,A配置了

neighbor 145.2.2.2 local-as 210這時候,B就會以為它正在和Asn是210的EBGP Peer建立鄰居關系,A在向B通過路由更新的時候,會把路由里面的as號碼改成local-as中配置的asn,在A上顯示的從B上學習到的路由就是210_159,在B上顯示的從A上學習到的路由就是159_210就相當于as210和as159的EBGP在通信。這在兩個ISP何必的時候作為過渡策略使用,避免大面積的地址重新規劃和網絡環境的重新配置。

7. iBGP TTL = 255

eBGP TTL= 1

8.當重分布OSPF到BGP中的時候,或者如果存在RR ,Ospf的 router-id必須和BGP的router-id一樣。
#redistribute ospf 10 match internal external 1 external 2
  default-metric 2
redistribute ospf internal external 1 external 2: 必須顯式的匹配internals & externals OSPF路由
default-metric 2:  Assigns a metric of 2 hops in BGP to the OSPF routes

#router eigrp 100
redistribute bgp 100 route-map test
route-map test permit 10
set automatic-tag
set as-path tag

This will redistribute the BGP path and Origin code into EIGRP /… [Cisco conly]

BGP的幾種管理距離

Internal BGP :200

External Border Gateway Protocol (BGP):20
Local BGP:200

Exterior Gateway Protocol (EGP):140

router bgp 200

distance bgp 20 95 200

BGP -4 Command

1.Router(config-router)#neighbor {ip-address | peer-group-name} remote-as autonomous-system

可以用IP地址或對等組名來指定,這個ip-address是對方鄰居的路由更新源。EBGP(ip-address應該是與本Router直連的IP)IBGP(ip-address是對方路由器上任何一個IP地址,只要是路由可達,一般是用L0口做更新源,因為這樣做可以提高BGP網絡的健壯性),用Lo口做更新源一般用于IBGP中,在EBGP中使用,要滿足路由可達的原則。

PS:

①兩個BGP Neighbor的更新源必須匹配,不然數據包將會被丟棄。

②在EBGP中的TCP包的TTL值是1,所以有了Neighbor ip-address ebgp-multihop x(x是TTL的值) 命令。

2.Router(config-router)#neighbor {ip-address|peer-group-name} shutdown| soft-reconfiguration inbound

Shutdown:鄰居關系并沒有被刪除,而是暫時不可用,一般用于維護和更改策略,它防止路由擺動(Route Flapping),管理shut down。

Soft-reconfiguration inbound:告訴Router存儲所有從它的Neighbor更新的路由,才可以讓新的inbound policy 生效而不要重新Reset BGP(會話連接仍然維持),這是條內存密集型命令。

3.clear ip bgp {* | address | peer-group-name} [soft [in | out]]

*:所有的BGP會話都將被Reset,全部BGP路由表將被丟棄,BGP會話狀態更改為Idle。

Address:特定IP地址的鄰居將被Reset,其BGP會話狀態更改為Idle,清除從該BGP Peer 學習到的路由。鄰居關系將重新建立。

Peer-group-name:指定的 BGP peer-group 將被Reset

Soft out:Router 不會丟失從Neighbor那邊學習到的路由,Router重新發送所有BGP路由給Neighbor而不要Reset BGP會話(連接仍然維持),對inbound policy 無效,在做Onbound policy時,這條命令強烈建議使用。

Soft in:Routes advertised to this neighbor are not withdrawn,Router存儲所有從它的Neighbor更新的路由,才可以使用存儲的,未經改動的更新信息來執行新的inbound policy,而不要重新Reset BGP(會話連接仍然維持)。

下列情況下必須手動Reset 鄰居關系

1.補充或者改變與BGP相關的ACLS

2.改變與BGP有關的weight

3.改變與BGP有關的distribute-list

4.改變與BGP有關的Timer

5.改變與BGP有關的Admin distance

6.改變與BGP有關的Router-map

4.建立Neighbor關系的特例(配置練習)

A以對方的LO0(2.2.2.2)口來建立鄰居(在as 100中)

B以對方的直連接口(12.12.12.1)來建立鄰居(在as 200中)

clip_image011
A:Router bgp 100

Neighbor 2.2.2.2 remote-as 200

neighbor 2.2.2.2 ebgp-multihop 2

B: Router bgp 200

Neighbor 12.12.12.1 remote-as 100

Neighbor 12.12.12.1 update-source lo0

待續…

4.r2#show ip rou

Codes: C – connected, S – static, I – IGRP, R – RIP, M – mobile, B – BGP

D – EIGRP, EX – EIGRP external, O – OSPF, IA – OSPF inter area

N1 – OSPF NSSA external type 1, N2 – OSPF NSSA external type 2

E1 – OSPF external type 1, E2 – OSPF external type 2, E – EGP

i – IS-IS, L1 – IS-IS level-1, L2 – IS-IS level-2, ia – IS-IS inter area

* – candidate default, U – per-user static route, o – ODR

P – periodic downloaded static route

r2#show ip bgp

BGP table version is 13, local router ID is 2.2.2.2

Status codes: s suppressed, d damped, h history, * valid, > best, i – internal

Origin codes: i – IGP, e – EGP, ? – incomplete

Network Next Hop Metric LocPrf Weight Path

*>i11.11.11.0/24 1.1.1.1 0 100 0 i

*> 45.45.45.0/24 4.4.4.4 0 0 400 i

5. show ip bgp paths 顯示BGP 拓撲圖

和show ip bgp 顯示BGP 路由表的區別?

6. 私有AS號碼剝離:

RTA(config)#router bgp 1

RTA(config-router)#neighbor 172.16.20.2 2 remote-as 65001

RTA(config-router)#neighbor 192.168.6.3 remote-as 7

RTA(config-router)#neighbor 192.168.6.3 remove-private-as

1. Bgp配置缺省路由和路由聚合

① ip route 0.0.0.0 0.0.0.0 null0

router bgp 100

network 0.0.0.0(向所有建立的鄰居都發送缺省路由)

② router bgp 100

neighbor *.*.*.* default-originate(只是向特定的鄰居發送缺省路由,如果只想發送缺省路由,則需要做路由過濾,這條命令不需要)手動建立一條缺省路由。)

2. Neighbor *.*.*.* version :不同版本的BGP直接的手動協商。

3.

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文標題:BGP ALL IN ONE 詳解
本文鏈接:http://www.qdxgqk.live/?p=3441轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏