華爲路由器之BGP路由技術總結及配置命令

1、BGP的概念:
BGP(Border Gateway Protocol,邊界網關協議)是一個距離矢量路由協議,和傳統的基於下一跳的IGP協議不一樣,它是基於AS(自治系統)的協議。BGP屬於外部網關路由協議,它解決的是AS之間的選路問題,也正是這樣,它更適合用於互聯網。BGP的關鍵在於理解BGP的報文,鄰居的創建、BGP路由屬性、選路原則等。
.
一、自治系統是什麼?
自治系統(autonomous system,簡稱「AS」),是由同一個技術管理機構管理,使用統一選路策略(運行同一動態路由協議)的一組路由器的集合。自治系統的編號取值範圍是1~65535。其中1~64511是互聯網上註冊的公有AS號類,相似於公有IP地址,是全球惟一且不可重複使用的;64512~65535是私有AS號,相似於私有IP地址,能夠重複使用可是互聯網上不可見。
.
二、動態路由分類
動態路由協議有不少分類方法,按自治系統分類、按協議類型分類是最經常使用的兩種。node

按自治系統分類:數據庫

IGP:內部網關路由協議,主要包含RIP、OSPF、ISIS、EIGRP(思科私有協議)。IGP路由協議運行在AS內部,解決的是AS內部的選路問題。主要做用是發現、計算路由。網絡

EGP:外部網關路由協議,一般就是指BGP,它運行在AS與AS之間,解決的是AS之間的選路問題。BGP的主要做用是控制路由條目的傳播和選擇最優路由。app

通常會先使用IGP協議在自治系統內部計算和發現路由條目,再經過BGP協議將IGP協議產生的路由傳遞至其餘的AS(自治系統)。ide

三、BGP的特徵
BGP解決的是AS之間的路由學習問題,當今互聯網是全球互聯,在中國,互聯網運營商有移動、電信和聯通。每一個公司都有本身的自治系統,而且內部運行IGP協議。可是互聯網又要求互聯,因此經過BGP就能夠在電信和聯通等之間學習對方的AS內部路由,使電信和聯通的用戶之間互相通訊。oop

BGP具備如下特徵:學習

傳輸協議:TCP,端口號179
BGP是外部路由協議,用來在AS之間傳遞路由信息
是一種加強的路徑矢量路由協議
擁有可靠的路由更新機制
具有豐富的Metric(一種度量標準)度量方法
無環路協議設計
爲路由條目附帶多種屬性信息
支持CIDR(就是支持子網劃分後地址域間選路)
豐富的路由過濾和路由策略
無需週期性更新
路由更新時只發送增量路由
週期性發送KeepAlive(保活)報文以保持 TCP連通性測試

2、BGP的工做原理
BGP是跨公網、跨AS(自治系統)的路由協議,能夠在AS之間學習路由。BGP的動態學習路由也是基於鄰居,只有鄰居關係正常,BGP才能夠正常工做。
.
一、BGP鄰居關係
運行BGP的路由器一般被稱爲BGPSpeaker(發言者),相互之間傳遞報文的speaker之間互稱爲對等體(peer)。BGP鄰居關係的創建、更新和刪除是經過對等體之間的5種報文、6種狀態機和5個表等信息來完成,最終造成BGP鄰居。ui

(1)BGP報文類型及做用:
BGP報文頭中的type定義了BGP的報文類型。BGP對等體之間經過5種報文進行路由信息的交互,5種報文分別有:Open、Update、Notification、KeepAlive和Route-Refresh。
.this

  • Open報文:是TCP鏈接創建後發送的第一個報文,用於創建BGP對等體之間的鏈接關係,主要包括BGP版本、本地AS編號、Holdtime(維持時間)等信息。
  • update報文:update報文用來在BGP對等體之間更新路由信息,update報文能夠通告多條屬性相同的可達路由信息,也可撤銷多條不可達路由信息。
  • Notification報文:當BGP檢測到錯誤狀態時,馬上向對等體發出Notification報文,以後BGP鏈接就會當即中斷。無論當前BGP狀態處於何種狀態,只要收到Notification報文就會返回idle狀態。
  • Route-Refresh報文:用來告知對等體本地所支持路由的刷新能力,在全部BGP路由器擁有Route-Refresh能力的狀況下,若是BGP入口路由策略發生了變化,本地BGP路由器會向對等體發送Route-Refresh報文,收到此消息的對等體會將其路由信息從新發給本地BGP路由器。
  • KeepAlive報文:該報文在對等體之間週期性發送,用以保持鏈接的有效性,相似於OSPF協議中的hello包。

(2)BGP狀態:
BGP狀態描述的是BGP鄰居的創建過程,BGP狀態共有六種,分別是Idle(空閒)、Connect(鏈接)、Active(活動)、OpenSent(打開發送)、OpenConfirm(打開確認)和Established(創建成功)。
.

  • Idle狀態:BGP拒絕任何進入的鏈接請求,Idle狀態是BGP的初始狀態。
  • Connect狀態:該狀態下,BGP等待TCP鏈接的創建完成後在決定後續操做。
  • Active狀態:該狀態下,BGP將嘗試進行TCP鏈接的創建,是BGP的中間狀態。
  • OpenSent狀態:該狀態下,BGP等待對等體的Open報文,並對收到的Open報文中的AS號、版本號、Holdtime等進行檢查。
  • OpenConfirm狀態:在該狀態下,BGP等待KeepAlive或Notification報文。
  • Established狀態:在該狀態下,BGP能夠在對等體之間交換全部報文,也是BGP正常工做的狀態。
    .
    在BGP對等體創建的過程當中,一般可見的三種狀態是Idle、Active、Established。BGP對等體雙方的狀態必須都爲Established,BGP鄰居關係才能成立,雙方經過Update報文交換路由信息。
    (3)BGP數據庫:

    BGP數據庫是BGP正常工做所須要的存儲空間,基於保存的內容不一樣,可分爲如下幾種:

    IP路由表(IP-RIB):全局路由信息庫,包括全部最優的IP路由信息。
    BGP路由表(Loc-RIB):BGP路由信息庫,包括本地BGP Speaker通告的路由信息,將其中最優路由添加到IP路由表中。注意:先要關注BGP路由表、若BGP路由表中不是最優路由,則沒法在IP路由表中可見。
    鄰居表:對等體鄰居清單列表,包括對等體兩端的鄰居信息即鄰居列表。
    Adi-RIB-In:對等體宣告給本地Speaker的未處理的路由信息庫。
    Adj-RIB-Out:本地Speaker宣告給指定對等體的路由信息庫。

(4)BGP鄰居關係類型:
在BGP中大體可分爲兩種鄰居關係:IBGP鄰居和EBGP鄰居。
.

  • IBGP:同一個AS內部的BGP鄰居關係,IBGP鄰居一般是指運行BGP協議的對等體兩端均在同一個AS域內,屬於同一個BGP AS內部。
  • EBGP:AS之間的BGP鄰居關係,EBGP鄰居一般是指運行BGP協議的對等體兩端分別在不一樣的AS內。

BGP鄰居的AS號和本端的AS號相同就爲IBGP(鄰居),不一樣就是EBGP鄰居。
.
IGP(內部網關協議,如OSPF)創建鄰居通常要求三層設備直連,而且經過廣播或組播創建鄰居關係。而BGP(外部網關協議)的鄰居關係是基於TCP的,也就是說只要讓TCP/IP可達,不管是否直連,BGP對等體彼此之間就能夠創建鄰居關係。因此BGP創建鄰居以前首先要考慮的就是對等體之間的路徑可達(是否存在路由,能夠ping通)。務必要經過IGP或者靜態路由使對等體兩端互通。
二、通告BGP路由的方法

BGP路由是經過BGP命令通告而成的,而通告BGP路由的方法有兩種:network和Import。

(1)network方式:
.
使用network命令能夠將當前設備路由表中的路由(非BGP)發佈到BGP路由表中並通告給鄰居,和OSPF中使用network命令的方式大同小異,只不過在BGP宣告時,只須要宣告網段+掩碼數便可,如:network 12.12.0.0 16。

(2)Import方式:
.
使用Import命令能夠將該路由器學到的路由信息重分發到BGP路由表中,是BGP宣告路由的一種方式,能夠引入BGP的路由包括:直連路由、靜態路由及動態路由協議學到的路由。其命令格式與在RIP中重分發OSPF差很少。

三、BGP對等體的交互原則

BGP設備會將最優路由加入BGP路由表,造成BGP路由。BGP設備與對等體創建鄰居關係後,採用如下交互原則:

從IBGP對等體得到的BGP路由,BGP設備只傳遞給它的EBGP對等體。
從EBGP對等體得到的BGP路由,BGP設備傳遞給它全部EBGP和IBGP對等體(對等體是IBGP只能傳遞一跳,對等體是EBGP則不限制)
當存在多條到達同一目的地址的有效路由時,BGP設備只將最優路由發佈給對等體
路由更新時,BGP設備只發送更新的BGP路由
全部對等體發送的路由,BGP設備都會接收
全部EBGP對等體在傳遞過程當中下一跳改變
全部IBGP對等體在傳遞過程當中下一跳不變(須要特別注意)
默認EBGP傳遞時 TTL值爲1(須要特別注意)
默認IBGP傳遞時 TTL值爲255

四、更新源創建鄰居關係
這個概念說白了就是在指定對等體時,使用對方的loopback口,由於該接口比任何物理接口都要穩定,只要設備在運行,loopback口就不會關閉,只要有一條鏈路能夠和對方的loopback地址通訊,就不會形成BGP狀態的改變,若使用物理接口,一旦這個物理接口down掉,那麼BGP也就完了,因此這種使用loopback口創建BGP鄰居的方法稱爲更新源創建鄰居,一般會在同一個AS內使用冗餘鏈路來確保BGP的穩定性。(若在不一樣AS內使用對端路由器的loopback地址來創建鄰居關係,須要改變兩個路由器上的TTL值,具體解釋請參考博文末尾的配置總結)
華爲路由器之BGP路由技術總結及配置命令
如在上圖中,三個路由器同在AS 100區域中,若R1和R3要使用更新源創建鄰居關係,那麼配置以下:

R1路由器:

[R1]bgp 100              <!--設置BGP編號爲100-->
[R1-bgp]router-id 1.1.1.1 
<!--配置該路由器自己的route ID,該地址通常爲loopback接口地址-->
[R1-bgp]peer 3.3.3.3 as-number 100    
<!--指定對端的loopback地址,「100」是對端路由器所在的BGP編號-->
[R1-bgp]peer 3.3.3.3 connect-interface LoopBack0   
<!--指明對端的這個地址是哪一個loopback接口,這裏是loopback接口 0-->

R3路由器(相關命令解釋參考R1路由器的配置):

[R3]bgp 100                     
[R3-bgp]router-id 3.3.3.3               
[R3-bgp]peer 1.1.1.1 as-number 100                 
[R3-bgp]peer 1.1.1.1 connect-interface LoopBack0

注意:本地loopback接口先要讓對等體可達(就是能夠ping通對方的loopback地址),須要手動添加對等體環回接口的路由條目或者使用OSPF、RIP等自動學習對方環回接口的路由。
五、保證IBGP下一跳可達
在AS邊緣的BGP設備,會接收到它的EBGP對等體鄰居傳遞過來的BGP路由信息。上面說過:全部EBGP對等體在傳遞過程當中下一跳改變, 全部IBGP對等體在傳遞過程當中下一跳不變。上個圖來直觀的說一下:
華爲路由器之BGP路由技術總結及配置命令
圖中,用A——J分別來代替路由器的接口IP地址,結合全部EBGP對等體在傳遞過程當中下一跳改變, 全部IBGP對等體在傳遞過程當中下一跳不變這個結論,能夠看到圖中存在什麼問題(本身看圖理解吧,是在是懶癌晚期,不想解釋了),就是圖中R3路由器之後的路由器收到的路由條目中的下一跳是錯誤的,解決辦法就是在R3和R5路由器上對R4和R6宣稱下一跳爲它本身,而後就會發現,R4學到的下一跳地址是E。R6學到的下一跳就是I。這只是解決了R1宣告路由時出現的問題,那麼若是如今R6又宣告了一條路由,就還須要在R4和R2路由器上對R3和R1宣稱下一跳爲它本身。這樣纔算保證了IBGP的下一跳可達。
.
配置以下(就拿一個路由器來舉例,前三條配置命令的解釋能夠參考上面的註釋,主要是最後一條命令,來改變路由的下一跳):

[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 34.1.1.4 as-number 200   <!--34.4.4.4是R4的地址,用來和R4創建鄰居關係-->
[R3-bgp]peer 34.1.1.4 next-hop-local              
<!--這條命令用來改變向鄰居傳遞路由時,宣稱全部傳給鄰居的路由條目,下一跳都是本身-->

六、EBGP多跳
這個好理解,因爲默認BGP中EBGP鄰居之間的TTL值爲1,(TTL,數據包的生命週期值,每通過一個路由器該值會-1,當該值爲0後,數據包將會被丟棄)。若EBGP對等體非直連(通訊時須要通過一個以上的路由器,TTL值就不夠用了),TTL值限制會使非直連的對等體沒法正常創建鄰居關係,因此須要用EBGP多跳的命令來解決非直連的鄰居關係。以下圖,若不配置EBGP多跳,那麼R1和R3將沒法正常創建鄰居關係:
華爲路由器之BGP路由技術總結及配置命令
配置上圖中的R3路由器多跳(R1路由器也須要進行相似的配置,進而改變TTL值,這裏只拿R3爲例):

R3 配置以下:

[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 12.0.0.1 as-number 100
[R3-bgp]peer 12.0.0.1 ebgp-max-hop 2             <!--指明跳數爲2,也就是TTL值爲2-->

七、控制BGP選路
BGP協議包含不少路由屬性,這些屬性能夠很是靈活的控制BGP的選路。
.
BGP的屬性分爲共有必遵,公認任意、可選過渡可選非過渡四大類,以下表爲BGP的屬性及對應的分類:
華爲路由器之BGP路由技術總結及配置命令
(1)公有必遵:全部BGP路由器均可以識別,且必須存在update報文中。
(2)公有任意:全部BGP路由器均可以識別,但不要求必須存在於update報文中,能夠根據具體狀況來決定是否添加到Update報文中。
(3)可選過渡:BGP路由器能夠選擇是否在Update報文中攜帶這種屬性。接收的路由器若是不識別這種屬性,能夠轉發給鄰居路由器(這就是過渡的含義),鄰居路由器可能會識別並使用這種屬性。
(4)可選非過渡:BGP路由器能夠選擇是否在Update報文中攜帶這種屬性。在整個路由發佈的路徑上,若是部分路由器不能識別這種屬性,可能會致使該屬性沒法發揮做用。由於接收的路由器若是不識別這種屬性,將丟棄這種屬性,而再也不轉發給鄰居路由器。
BGP屬性的介紹:
.
BGP經常使用的屬性有:Origin、AS-PATH、Next-Hop、Local-Perf和MED等。
.
(1)Origin(起源)屬性:屬於公有必遵,用來定義路徑信息的來源,其做用是標記一條路由是怎麼成爲BGP路由的。它有如下三種類型:
IGP(I):優先級最高,經過Network命令注入BGP路由表的路由,其Origin屬性爲IGP。
EGP(e):優先級次之。經過EGP獲得的路由信息,其Origin屬性爲EGP。
Incomplete(?):優先級最低。經過其餘方式學習到的路由信息。如BGP經過Import-route命令重分發引入的路由,其Origin屬性爲Incomplete。可使用 display bgp routing-table 命令查看,將顯示在最後一列,其列名是Path/Ogn
.
(2)AS-PATH(AS路徑)屬性:該屬性按照矢量順序記錄某條路由從本地到目的地址要通過的全部AS編號,在接受路由時,設備若是發現AS-PATH列表中有本AS號,則不接收該路由,從而避免了AS間的路由環路。
若在查看BGP路由表時,看到了AS編號,如(100,200,300),則表示該路由條目是通過了AS300、AS200和AS100傳播到本設備,其中AS100是離本設備最近的AS。
.
(3)Next-Hop(下一跳)屬性:又回到保證IBGP下一跳可達這個問題了,這麼說吧,在前面提到的保證IBGP下一跳可達,就是利用了Next-Hop屬性,不解釋了。
.
(4)Local-Perf屬性:用來標識BGP路由的優先級,,用於判斷流量離開AS時的最佳路由。當BGP的設備經過不一樣的IBGP對等體獲得目的地址相同可是下一跳不一樣的多條路由時,將選擇優先級Local-Perf屬性值較高的路由。Local-Perf屬性僅在IBGP對等體之間有效,不會通告給其餘AS,本地優先級在AS內部傳遞,數值越高越優先。默認優先級爲100,能夠手動更改。下面是我在網上找到的一個配置圖(可使用ACL來定義一些流量,也能夠直接修改本地的優先級,下圖是基於ACL來對不一樣網段設置不一樣的優先級)。
華爲路由器之BGP路由技術總結及配置命令
(5)MED屬性:用於判斷流量進入鄰居AS時的最佳路由,當一個運行BGP的設備經過不一樣的EBGP對等體獲得目的地址同樣可是下一跳不一樣的多條路由時,在其餘條件相同的狀況下,將選擇MED 值較小者做爲最佳路由,用來改變下游的選路。
MED屬性僅在相鄰兩個AS之間傳遞,收到此屬性的AS一方不會再將其通告給其餘任何第三方AS。MED屬性能夠手動配置,默認爲0,具體配置看圖吧:
華爲路由器之BGP路由技術總結及配置命令
在RT3上配置以下能夠控制AS200中兩個路由器的選路:
華爲路由器之BGP路由技術總結及配置命令
八、BGP的選路原則

BGP 選路原則
(1)若去往目的網絡的路由下一跳不可達,則能夠忽略此路由
(2)Preferred-Value優先級以數值高的路由優先
(3)Local-Preference優先級以數值高的路由優先
(4)聚合路由優先級高於非聚合路由
(5)本地手動聚合路由的優先級高於本地自動聚合的路由
(6)本地經過Network命令引入的路由的優先級高於本地經過Import-route命令引入的路由
(7)AS路徑長度最短(最少個數)的路徑優先級高
(8)比較Origin屬性,IGP優先級高於EGP,EGP優先級高於Incomplete
(9)選擇MED優先級較小的路由
(10)EBGP路由優先級高於IBGP路由
(11)BGP優先選擇到BGP下一跳的IGP度量低的路徑
當以上所有相同,則爲等價路由,能夠負載分擔(注:AS-PATH必須一致),當負載分擔時,如下3條原則無效
(12)比較Cluster-List長度,短者優先
(13)比較Originator_ID(若是沒有Originator_ID,則用Router ID比較),選擇數值較小的路徑
(14)比較對等體的IP地址,選擇IP地址數值最小的路徑

3、BGP的配置實例
上面的BGP理論囉嗦了那麼多,其實真正的配置倒很簡單(這也符合網絡的特點),來個實驗圖配置一下吧!

網絡拓撲以下:
華爲路由器之BGP路由技術總結及配置命令

需求以下:

一、AS 200內部使用OSPF協議使AS 200內部互通,並在AS 200內部各個路由器上都運行BGP協議(R1和R二、R3創建鄰居關係,R4和R二、R3及R5創建鄰居關係,),各個AS之間運行BGP協議。

二、分別在R1和R5使用BGP協議宣告21.0.0.0/24和20.0.0.0/24,使全部路由器學到這兩條路由信息。

三、經過BGP的屬性控制選路,實現PC 1→R1→R2→R4→R5→PC 2→R5→R4→R3→R2→R1→PC 1的路由通訊。順便將多個控制選路的方法測試一下。

四、在R二、R3和R4路由器上分別向BGP協議中注入本地的OSPF路由信息,使全網互通(雖然在第三個要求實現了控制路由選路,可是並不意味着PC1能夠ping通任何一個路由器,好比R2)。

五、爲了引出EBGP多跳的配置,嘗試一下R1和R4直接創建對等體關係。

開始配置:

一、自行配置各個PC、路由器物理接口及loopback接口的IP地址(我是懶癌晚期患者,請多多擔待),路由器IP配置參考:

<R1>sys                          <!--進入系統視圖-->    
[R1]in g0/0/0                  <!--進入物理接口--> 
[R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24               <!--配置IP地址--> 
[R1-GigabitEthernet0/0/0]int loop 0                  <!--進入loopback接口--> 
[R1-LoopBack0]ip add 1.1.1.1 32              <!--配置IP地址-->

二、配置AS 200內部的OSPF路由協議:

R2路由器配置以下:

[R2]ospf 1              <!--開啓OSPF進程1--> 
[R2-ospf-1]area 0       <!--配置OSPF區域ID爲0--> 
[R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0        <!--宣告該路由器全部直連網段--> 
[R2-ospf-1-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]net 24.1.1.0 0.0.0.255
<!--OSPF宣告網段時須要寫反掩碼-->

R3路由器配置以下(相應註釋請參考R2):

[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]net 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0]net 13.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255

R4路由器配置以下(相應註釋請參考R2):

[R4]ospf 1
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0 
[R4-ospf-1-area-0.0.0.0]net 24.1.1.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255

三、開始配置BGP,使相應路由器爲鄰居關係:

R1配置以下:

[R1]bgp 100               <!--配置BGP編號爲100-->
[R1-bgp]router-id 1.1.1.1               <!--指定路由器ID-->
[R1-bgp]peer 12.1.1.2 as 200               <!--與R2路由器的GE 0/0/0接口創建鄰居關係-->
[R1-bgp]peer 13.1.1.3 as 200               <!--與R3路由器的GE 0/0/1接口創建鄰居關係-->
[R1-bgp]network 21.0.0.0 24               <!--宣告本路由器上的21.0.0.0/24網段-->

因爲配置BGP時,不少重複性的命令,因此,沒有特別不同的配置時,我接下來就不寫註釋了

R2配置以下:

[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 12.1.1.1 as 100               <!--與R1路由器的GE 0/0/0接口創建鄰居關係-->
[R2-bgp]peer 4.4.4.4 as 200                <!--與R4路由器的loopback接口創建鄰居關係-->  
[R2-bgp]peer 4.4.4.4 connect-interface LoopBack 0  <!--指明4.4.4.4是對端的loopback接口編號爲0-->
[R2-bgp]peer 4.4.4.4 next-hop-local     <!--因爲與R4屬於IBGP,因此要保證下一跳可達-->

R3配置以下:

[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 13.1.1.1 as 100
[R3-bgp]peer 4.4.4.4 as 200
[R3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[R3-bgp]peer 4.4.4.4 next-hop-local

R4配置以下:

[R4]bgp 200
[R4-bgp]router-id 4.4.4.4
[R4-bgp]peer 2.2.2.2 as 200
[R4-bgp]peer 3.3.3.3 as 200
[R4-bgp]peer 2.2.2.2 next-hop-local
[R4-bgp]peer 3.3.3.3 next-hop-local
[R4-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[R4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[R4-bgp]peer 45.1.1.5 as 300   <!--與R5路由器的GE 0/0/0接口創建鄰居關係-->

R5配置以下:

[R5]bgp 300
[R5-bgp]router-id 5.5.5.5
[R5-bgp]peer 45.1.1.4 as 200
[R5-bgp]network 20.0.0.0 24

如今BGP的鄰居關係已經創建完成,能夠經過如下命令查看:

[R1]dis bgp peer

 BGP local router ID : 1.1.1.1
 Local AS number : 100
 Total number of peers : 2        Peers in established state : 2

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State Pre
fRcv

  12.1.1.2        4         200        5        8     0 00:02:11 Established    
   1
  13.1.1.3        4         200        7       10     0 00:04:34 Established    
   1
<!--State列爲Established則表示BGP鄰居關係正常創建,能夠正常運行BGP協議-->

至此,PC 1已經能夠和PC 2進行通訊了,固然是BGP協議作的咯,可是如今除了非直連網段及AS 200內部路由器之外,也只有PC1和PC2能夠通訊,如PC1並不能ping通R2路由器。

四、開始作第三個需求,經過BGP的屬性控制選路,實現PC 1→R1→R2→R4→R5→PC 2→R5→R4→R3→R2→R1→PC 1的路由通訊。

先使用tracert命令查看PC1和PC2通訊時的路由,看看都是通過哪一個路由器。

PC1到達PC5所通過的路由器以下:

PC>tracert 20.0.0.1                     #使用tracert命令進行查看
traceroute to 20.0.0.1, 8 hops max
(ICMP), press Ctrl+C to stop
 1  21.0.0.254   <1 ms  16 ms  15 ms
 2  12.1.1.2   16 ms  15 ms  16 ms
 3  24.1.1.4   31 ms  32 ms  31 ms
 4  45.1.1.5   31 ms  47 ms  31 ms
 5    *20.0.0.1   31 ms  32 ms

PC5到達PC1所通過的路由器以下:

PC>tracert 21.0.0.1

traceroute to 21.0.0.1, 8 hops max
(ICMP), press Ctrl+C to stop
 1  20.0.0.254   15 ms  <1 ms  16 ms
 2  45.1.1.4   16 ms  31 ms  16 ms
 3  24.1.1.2   31 ms  31 ms  31 ms
 4  12.1.1.1   47 ms  16 ms  47 ms
 5  21.0.0.1   31 ms  31 ms  31 ms

來吧,開始配置選路問題(共三個方法可實現):

實現方法1:修改Local-Perf屬性來改變R3路由器的優先級

在R3路由器上配置以下:

[R3]route-policy lop permit node 10    <!--建立名爲lop的路由策略-->
Info: New Sequence of this List.
[R3-route-policy]apply local-preference 222      <!--設置本地優先級是222-->
[R3-route-policy]quit
[R3]bgp 200              <!--進入bgp  200-->
[R3-bgp]peer 4.4.4.4 route-policy lop export       <!--向R4通告該策略-->
[R3-bgp]quit
[R3]quit
<R3>reset bgp all         <!--刷新BGP-->

此時再查看PC5到達PC1所通過的路由器,就發現中間不通過R2路由器,而通過了R3路由器到達的PC1,以下:

PC>tracert 21.0.0.1

traceroute to 21.0.0.1, 8 hops max
(ICMP), press Ctrl+C to stop
 1  20.0.0.254   <1 ms  16 ms  16 ms
 2  45.1.1.4   15 ms  16 ms  31 ms
 3  34.1.1.3   31 ms  32 ms  31 ms
 4  13.1.1.1   47 ms  31 ms  47 ms
 5    *21.0.0.1   47 ms  31 ms

實現方法2:使用AS-PATH屬性控制選路

爲了還原最初走R2的效果,須要清除上一步R3路由器配置的Local-Perf屬性,在R3路由器執行如下命令進行刪除:

[R3]bgp 200
[R3-bgp]undo peer 4.4.4.4 route-policy lop export

刪除後,稍等會能夠自行查看,PC2和PC1時是否又恢復了走R2路由器而不走R3。

而後在R2路由器修改AS-PATH屬性(就是讓R2路由器在向R4路由器通告21.0.0.0網段時,告訴R4通過了好多區域,固然,這些區域是虛造出來的,這個區域數確定比R3所通過的區域數多,因此R4就會選擇走R3而不走R2,由於要走最優路徑嘛):
R2配置以下:

[R2]route-policy as permit node 10   <!--建立名爲as的路由策略-->
Info: New Sequence of this List.
[R2-route-policy]apply as-path 123 123 123 add   <!--添加幾個as區域-->
[R2-route-policy]quit
[R2]bgp 200            <!--進入bgp  200-->
[R2-bgp]peer 4.4.4.4 route-policy as export   <!--向R4通告該策略-->
[R2-bgp]quit
[R2]quit
<R2>reset bgp all        <!--刷新BGP-->
<!--隨便添加的AS區域,並不會影響通訊,當R3路由器down掉後,R4路由器仍是會把數據包發到R2路由器-->

如今在PC2再測試一下,會發現又開始走R3路由器了:

PC>tracert 21.0.0.1

traceroute to 21.0.0.1, 8 hops max
(ICMP), press Ctrl+C to stop
 1  20.0.0.254   16 ms  <1 ms  15 ms
 2  45.1.1.4   32 ms  15 ms  31 ms
 3  34.1.1.3   16 ms  31 ms  32 ms
 4  13.1.1.1   31 ms  31 ms  31 ms
 5    *21.0.0.1   47 ms  31 ms

實現方法3:使用MED屬性控制選路

在一開始測試過,PC1去往PC5是通過R2路由器,而不是R3路由器,那麼如今就增長R2路由器的MED屬性並通告給R1路由器,使它通過R3路由器而不是R2路由器。

[R2]route-policy med permit node 10   <!--建立名爲med的路由策略-->
Info: New Sequence of this List.
[R2-route-policy]apply cost + 500     <!--增長500的med值-->
[R2-route-policy]quit
[R2]bgp 200
[R2-bgp]peer 12.1.1.1 route-policy med export    <!--通告給R1路由器-->
[R2-bgp]quit
[R2]quit
<R2>reset bgp all        <!--刷新BGP-->

在PC1測試一下:

PC>tracert 20.0.0.1

traceroute to 20.0.0.1, 8 hops max
(ICMP), press Ctrl+C to stop
 1  21.0.0.254   16 ms  <1 ms  16 ms
 2  13.1.1.3   15 ms  16 ms  15 ms
 3  34.1.1.4   47 ms  16 ms  16 ms
 4  45.1.1.5   31 ms  31 ms  31 ms
 5    *20.0.0.1   32 ms  31 ms

已經改走R3路由器了,說明配置生效,經過這三個選路的實現方法不難發現,BGP控制選路主要都是經過BGP屬性值來調整完成的。BGP包含大量的屬性,而這些屬性直接影響着選路,全部BGP比IGP具備更強大的控制能力。
五、第四個需求:在R二、R3和R4路由器上分別向BGP協議中注入本地的OSPF路由信息,使全網互通。

R2路由器:

[R2]bgp 200
[R2-bgp]import-route ospf 1                  <!--將OSPF注入BGP,其中「1」表明OSPF的進程號-->

其他路由器配置基本一致:

R3:

[R3]bgp 200
[R3-bgp]import-route ospf 1

R4:

[R4]bgp 200
[R4-bgp]import-route ospf 1

自行查看各路由器的路由條目驗證吧!文章末尾有相關查看命令。
六、第五個需求:嘗試一下R1和R4直接創建對等體關係。

R1配置以下:

[R1-bgp]bgp 100
[R1-bgp]peer 34.1.1.4 as 200
[R1-bgp]peer 34.1.1.4 ebgp-max-hop 2            
<!--因爲中間隔着一個路由器,又不在同一個AS內,屬於EBGP,
默認TTL值爲1,因此要改變一下跳數-->

R4配置以下

[R4]bgp 200
[R4-bgp]peer 13.1.1.1 as 100
[R4-bgp]peer 13.1.1.1 eb    
[R4-bgp]peer 13.1.1.1 ebgp-max-hop 2

查看驗證(可能須要等一會纔可創建鄰居成功,等待時間不會超過兩分鐘)

[R1-bgp]dis bgp peer       <!--查看BGP的鄰居關係-->

 BGP local router ID : 1.1.1.1
 Local AS number : 100
 Total number of peers : 3        Peers in established state : 3

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State Pre
fRcv

  12.1.1.2        4         200       27       38     0 00:17:49 Established    
   8
  13.1.1.3        4         200       55       70     0 00:45:35 Established    
   8
  34.1.1.4        4         200       12       13     0 00:00:02 Established    
   8
<!--34.1.1.4的State列爲Established,表示創建鄰居成功-->

相關查看命令:

[R4]dis ip routing-table                    <!--查看路由器的全部路由信息-->
[R4]dis ospf routing                      <!--查看經過OSPF協議學到的路由信息-->
[R4]dis bgp peer                     <!--查看經過BGP協議學到的路由信息-->
[R1-bgp]dis bgp peer       <!--查看BGP的鄰居關係-->

4、配置總結

在配置過程當中須要注意如下幾點,以避免出現錯誤:一、在創建鄰居關係,指定對端路由器地址前,務必保證能夠ping通對端路由器。二、AS內部創建BGP鄰居關係時,最好指定對方的Loopback地址,但不要忘記更新源,參考命令: 「 [R3-bgp]peer 4.4.4.4 connect-interface LoopBack 0 」 。三、若在AS內部有一個以上的的路由器運行着BGP協議,對於AS內部來講,這也是IBGP協議,不要忘記更改下一跳的屬性,也就是前面提到的「保證IBGP下一跳可達」,命令參考:「[R4-bgp]peer 2.2.2.2 next-hop-local」四、前面說到,若在兩個不一樣AS區域的路由器上創建鄰居關係,哪怕這兩個路由器是直連的,也要改變它的TTL值,目的是讓路由器之間用來創建鄰居關係的數據包,能夠多通過幾個路由器,再被丟棄,由於,雖然不一樣AS的路由器是直連的,只有一跳便可,可是因爲指定的是對端路由器的loopback地址,loopback地址的網段確定與路由器直連的網段不是同一個網段,路由器收到該數據包後就把它當成另外一個路由器上的地址了,因此在兩個AS間創建鄰居關係時,必定要改變它的跳數,IBGP之間創建鄰居關係就不用改變TTL值了,由於在IBGP中,數據包的TTL值默認爲255。改變TTL值的參考命令:「 [R1-bgp]peer 34.1.1.4 ebgp-max-hop 2 」這條命令,須要跳幾下就把數值設置爲幾就行,能夠比實際跳數大,可是不能比實際跳數小。

相關文章
相關標籤/搜索