一. BGP特性:
Border Gateway Protocol,邊界網關協議,協議優先級為255,目前所使用的版本為v4。
邊界網關路由協議,EGP網關協議,適用於大型路由網絡結構,以AS為一個節點,每個AS有唯一確定的AS-ID用於標識。
BGP版本:
① 2006年定義單播IPV4網絡MP-BGP
② MP-BGP在IPv6單播網絡上的應用稱為BGP4+
③ 在IPv4組播網絡上的應用稱為MBGP(Multicast BGP)
BGP分類:
① IBGP:
Internal Border Gateway Protocol ,內部邊界網關協議,用於在AS內部的BGP協議
② EBGP:
External Border Gateway Protocol,外部邊界網關協議,用於在AS之間的BGP協議,默認數據包中的TTL值為1跳,鄰居建立使用直連端口建立,通常兩個AS之間是不存在IGP路由協議的,所以AS之間使用直連鏈路建立鄰居
BGP路由具有以下特點:
① 可靠的路由更新機制
② 豐富的Metric度量方法
③ 從設置上避免了環路的發生
④ 為路由附帶屬性信息
⑤ 支持CIDR
⑥ 豐富的路由過濾和路由策略
⑦ 支持認證
⑧ 默認不使用附載分擔
1. 可靠的路由更新機制:
BGP使用TCP進行路由更新,保證路由傳遞的可靠性,源端口號隨機,使用端口號為179。
2. 豐富的Metric度量方法:
BGP支持AS-Path、MED等度量屬性的直接修改。
3. 從設計上避免了環路:
IBGP使用水平分割,EBGP使用AS-Path屬性。
4. 為路由附帶屬性信息:
路由信息攜帶不同的BGP路由屬性,為BGP選路提供了多種多樣的方式。
5. 支持CIDR、手動聚合:
BGP支持無類域間路由,支持手工匯總和自動匯總。
(1)自動聚合:
默認情況下,自動聚合時關閉的。自動匯總不會自動匯總BGP鄰居發送的路由以及使用Network命令通告的路由,只能聚合自身import注入的路由條目。當開啟自動聚合后,BGP路由默認會以主類路由進行聚合。此時聚合路由的屬性為Aggregate屬性
使用以下命令進行自動聚合:
[Huawei-bgp]summary automatic
R1:
- [Huawei-bgp]network 1.1.1.1 32
- 只引入loo2到loo4
- 啟用路由聚合
(2)手動匯總:
BGP手動路由聚合時,可以手動控制聚合路由的掩碼長度,修改聚合路由屬性等,手動路由聚合又有 兩種方式:
① network靜態路由
② aggregate宣告
① network靜態路由:
首先創建靜態路由將網段聚合並指向null0,BGP采用network方式通告出去,由於直連優先級高於靜態,優先選擇直連的下一跳接口,當直連網段出現問題,匹配靜態送往Null0。
在R1上配置靜態路由:[Huawei]ip route-static 172.16.0.0 255.255.0.0 NULL 0 preference 254
使用network宣告出去:[Huawei-bgp]network 172.16.0.0 16
② aggregate宣告:
直接在BGP試圖下進行匯總
使用以下命令進行aggregate匯總:
[Huawei-bgp]aggregate 172.16.0.0 255.255.0.0 detail-suppressed
注1: 默認聚合路由只繼承Community屬性和起源屬性(如果明細都為i,則為i,有一個為?,則為?)
注2: 默認聚合后的路由不會攜帶任何的AS-path屬性,為了防止環路,如果想要攜帶AS-path
屬性,后面增加命令as-set,此時匯總路由會繼承所有明細路由的AS號,為無序的AS號,如果增加了AS-SET之后,聚合路由會將明細路由的AS-Path放入AS-SET屬性中,如果明細路由消失或屬性修改都會造成聚合路由的抖動增加;如果明細路由的AS-PATH id完全一致,此時聚合路由的AS-PATH類型為AS-Sequence
注3:如果不加detail-suppressed,會將明細路由和匯總路由全部發送出去,使用detail-suppressed命令只通告匯總路由,此時匯總路由的屬性為ATOMIC_Aggregate,用於通告下游的路由器成員信息被抑制,此時的匯總路由不會攜帶Community屬性
注4:為了讓聚合后的路由繼承明細路由的路由屬性,聚合命令后面增加attribute-policy 1,此時在定義Route-policy,規划屬性值
注5:origin-policy的作用,定義route-policy,當滿足if條件中的路由條目時,聚合路由才會生效,如果定義的路由消失,則聚合路由為ATOMIC_Aggregate
注6:suppress-policy的作用是用於過濾掉某些明細路由,定義route-policy,當滿足if條件中的路由條目,明細路由就會被過濾掉,如果只抑制了一部分明細路由,屬性依舊為Aggregate;如過抑制了全部的明細路由,屬性為ATOMIC_Aggregate
注7:同IGP路由手動聚合對比,BGP路由聚合,默認明細匯總都發布,IGP只發布匯總路
由;匯總之后IGP不會自動生成一條指向Null0的路由,而BGP路由匯總之后會自動
生成一條指向Null0的匯總路由
(3)默認路由發布:
在peer對等體的時候,可以使用命令發布默認路由給對端鄰居:
[Huawei-bgp]peer 192.168.1.1 default-route-advertise
6. 豐富的路由過濾和路由策略:
BGP攜帶了大量的屬性信息,並支持13種選路規則。
7. 支持認證:
BGP支持MD5認證方式,如果是MD5方式,路由器會根據BGP報文的某些字段和密鑰計算出一個128bit的散列值,然后將BGP報文連同散列值(散列值存在TCP報頭中的Option中)發送給鄰居。鄰居路由器收到以后,會在本地基於收到的BGP報文和相同的密鑰在進行一次HASH運算。如果計算出的散列值與接收到的散列值相同,則認證通過。
使用以下命令進行密碼認證:
[Huawei-bgp]peer 192.168.1.1 password cipher huawei/huawei
注:由於BGP直接使用TCP報頭中的Option承載加密數值,所以BGP只支持MD5加密
8. 默認不使用附載分擔:
BGP默認不使用附載分擔,即使存在多條路徑也會使用選路規則選出一條“最優路由”將其放入路由表中。
開啟附載分擔方式:
① 選路規則前9條一模一樣(AS ID循序也一樣),可以使用命令maximum load-balancing bgp 8進行附載分擔,當比較到下一跳的IGP開銷值一樣時,會進行流量的負載分擔
② 當BGP路由中的下一跳地址在IGP路由表中存在附載分擔,此時流量會附載分擔
③ 使用屬性值對多個目標流量對半分流實現附載分擔
9. EBGP特性:
EBGP默認存在以下特性:
① 在通告給EBGP鄰居時會將NEXT_Hop屬性設置為自身的接口IP地址
② 將Local_PREF值清空
③ 將MED數值除0
③ 在AS_PATH屬性中增加自己的AS-ID
10. 擴展性強:
BGP擴展性強,在承載多協議路由時,在MP NLRI中增加屬性值(TLV)進行擴展
二. BGP報文:
BGP報文Header:
① Marker:16bit,用於檢查BGP對等體的同步信息是否完整,以及用於BGP驗證的計算。不使用驗證時所有比特均為1(十六進制則全“FF”)
② Length:占2個字節,BGP消息總長度(包括報文頭在內),以字節為單位。長度范圍是19~4096
③ Type:1字節,表示BGP消息的類型
- Type 1:OPEN
- Type 2:UPDATE
- Type 3:NOTIFICATION
- Type4:KEEPALIVE
- Type5:REFRESH(RFC2918)
BGP報文分為:
① open報文
② KeepAlive報文
③ update報文
④ notification報文
⑤ Route-refresh報文
1. open報文:
負責和對等體建立鄰居關系。
① Version:版本,目前使用為v4
② My Autonomous System:本端AS號
③ Hold Time:KeepAlive老化時間,默認為180S
④ BGP Identifier:發送者的router id
⑤ Opt Param Len:表示Optional Parameter的長度。如果此值為0,表示沒有可選參數
⑥ Optional Parameters:為BGP可選參數列表,使用TLV承載
Optional Parameters詳解:
① Type:1Byte,當Type為2時,默認為2,表示攜帶的參數為協商能力
② Length:1Byte,為Parameter Value的長度。
③ Value:根據Type的不同值填寫不同的參數內容,在Type為2表示協商能力時,Value
是表示所支持的各種協商能力的列表,列表中的每一個單元是一個TLV三元組
在鄰居建立時,在Open報文中的Optional Parameters中表示自己當前支持的擴展性。
① AFI:地址協議簇
② SAFI:子地址協議簇
AFI |
SAFI |
1-----IPv4 |
1----------IPv4 Unicast |
2-----------IPv4 Multicast |
|
3-----------IPv4 Unicast and Multicast |
|
14----------MP_REACH_NLRI(MP-BGP可達路由) |
|
15----------MP_Withdrawn_NLRI(MP-BGP撤銷路由) |
|
16----------IPv4 Community |
|
128--------IPv4 VPN |
|
2------IPv6 |
1------------IPv6 Unicast |
2------------IPv6 Multicast |
|
3-------------IPv6 Unicast and Multicast |
|
16------------IPv4 Community |
|
128----------IPv6 VPN |
2. Update報文:
BGP為觸發更新的路由傳遞機制,只發送增量路由或失效路由,使用Update報文在對等體之間傳遞增量路由信息。Update報文傳遞的路由信息分為可達路由信息和不可達路由信息,可達路由信息為對端更新的路由信息,不可達路由信息讓對端刪除路由信息。
每條路由都攜帶大量的路由屬性,相同屬性的路由在一個Update報文中,不同屬性的路由使用多個Update報文分別發送。
① Path Attribute:路由屬性信息
- 路由可達,使用Path Attribute
- 路由不可達,使用Withdrawn Routes
② NLRI:網絡層可達信息,路由信息,包含網段信息和網絡掩碼
注:如果是MP BGP協議,則報文格式發生變化:
路由前綴放在Path-Attribut中,使用MP_REACK_NLRI來承載VPNv4路由前綴,其中還包含AFI和SAFI,Nex_HOP信息
3. Notification報文:
當BGP 對端檢測到錯誤的時候,就發送該報文給對端,當對端接收到Notification后,會將TCP連接斷掉。
錯誤主要包括:
① 消息頭錯誤
② OPEN消息錯誤
③ Update消息錯誤
④ 指定對端AS號碼錯誤
⑤ 保持時間超時
⑥ 狀態機錯誤
⑦ 終止,例如管理員使用命令reset bgp all
4. KeepAlive報文:
只有一個頭部,該消息在對等體之間周期性發送,用以維護連接。默認60S發送一次,Died時間為180S。
BGP speaker會在以下兩種情況發送KeepAlive報文:
① 維護鄰居關系,默認60S發送一次
② 回復對端發送Open報文,同意建立鄰居關系
5. Route-refresh報文:
使用此報文通告對等體進行路由刷新。
(1)refresh bgp all import:
通告對端刷新對本地BGP收到的路由
(2)refresh bgp all export:
觸發重新發送路由給鄰居
三. BGP收斂狀態:
BGP收斂主要經過以下幾種狀態:
① Idle 初始狀態
② Connect 連接狀態
③ Active 失敗等待狀態
④ Open Sent協商狀態
⑤ Open confirm 連接確立狀態
⑥ Established 確定建立狀態
1. Idle:
BGP初始狀態。在Idle狀態下,BGP拒絕鄰居發送的連接請求。只有在收到本設備的Start事件后,BGP才開始嘗試和其它BGP對等體進行TCP連接,並轉至Connect狀態。
Start事件是由一個操作者配置一個BGP過程,或者重置一個已經存在的過程或者路由器軟件重置BGP過程引起的(為了保證配置時間空閑,通常會存在37s的start延時)。
2. Connect:
連接狀態,雙方配置命令后,誰先配置完成誰先主動發起建立TCP,源端口隨機,目標端口179,在Connect狀態下,BGP啟動連接重傳定時器,等待TCP完成連接
建立狀態:
- 如果TCP連接成功,那么BGP向對等體發送Open報文,並轉至OpenSent狀態
- 如果對方無響應,則5S后發送第二份組播報文,依舊沒有響應,等待大約25S時候周期后開始下一輪的TCP報文發送,對方一直無響應,則停留在Connect(對端沒有去往本端的路由)
- 如果對方回應拒絕建立TCP連接,則不在繼續發送TCP報文,在大約25S后進入Active狀態
注:如果控制TCP的主動端和被動端可以使用命令peer listen-only,此時設備只偵聽對端,而不主動建立;或者控制主動端的連接端口地址
3. Active:
失敗等待狀態,huawei設備依舊為主動建立連接,Active狀態一個時間周期(大約25S)只發送一次TCP報文
- 如果建立成功,進入OPENSENT狀態
- 如果收到拒絕建立TCP報文(沒有啟用BGP),則一個時間周期只發送一次,並停留在此狀態
- 如果對方無響應(無本端路由,比如進入Active狀態,對端路由撤銷掉了),一個時間周期后回到Connect狀態
4. OPENSENT:
協商狀態,TCP連接建立成功后,發送open報文后,進入OPENSENT狀態,開始等待對端接收對端的Open報文
- 根據Open報文中的AS號、版本號、認證碼等進行檢查。當接收到對端的Open報文后,發現Open報文無誤,會立刻發送Keep alive報文,並進入下一狀態
- 如果發現收到的Open報文有錯誤,那么BGP發送Notification報文給對等體,並轉至Idle狀態
OPEN檢測不通過的原因:
① Version不相同
② Route ID沖突
③ TTL跳數
④ 源IP與Peer地址不一樣
注:BGP Hold-Timer時間不一致不影響鄰居的建立
5. OPENCONFIRM:
等待對端的keep alive報文,當收到對端的keep alive,進入下一狀態。
6. Established:
當成功接收對端Keep Alive報文后,進入Established狀態,是一種穩態,並周期的發送Keep Alive報文。
四. BGP表:
BGP協議中,連接一旦建立,BGP Speaker將把自己產生的所有BGP路由通告給對等體,有多條路徑時,BGP Speaker只會選最優的給自己使用放入IP路由表中,BGP Speaker只會選最優的給鄰居對等體。
BGP一共包含三張表:
① 鄰居表
② IP路由表
③ BGP路由表
1. 鄰居表:
用來查看當前的鄰居,使用display bgp peer查看:
① Peer Rcv:對端IP
② V:版本
③ AS:對端AS號
④ MsgRcvd:收到了幾條BGP消息
⑤ MsgSent:發出了幾條BGP消息
⑥ OutQ:等待發送指定對等體的消息
⑦ State:狀態
⑧ Pref Rcv:從鄰居學到多少BGP路由條數
2. IP路由表:
全局路由表,包含目前可用的BGP路由
3. BGP路由表:
BGP路由表發送原則:
① IBGP路由,只發送給EBGP對等體
② EBGP路由,發布給所有EBGP和IBGP對等體
③ 只將最優路由發布給對等體
④ 只發送增量更新的BGP路由
BGP路由表無效:
① 下一跳不可達(不加入到IP路由表中)
② IGP同步開啟,無相應的IGP路由(不加入IP路由表中)
③ 存在相同的IGP路由(不加入IP路由表中)
④ AS ID相同(不接受此BGP路由)
⑤ Cluster List中包含本RR的簇ID(不接受此BGP路由)
⑥ Originator ID和本路由器的Router ID相同(不接受此BGP路由)
⑦ 使用BGP命令 bgp-rib-only(最優BGP路由不會放入IP路由表中)
① >為最佳路由,存在多條路徑時,BGP會選擇最佳路由放入路由表並傳遞給鄰居
② *為最優化路由,表示當前路由有效,當沒有*標明此路 由不是最優
③ i為IBGP鄰居學到的路由條目,如果位空表示本地產生或EBGP學到的路由
五. BGP防環機制:
1. EBGP防環:
路由條目在跨越AS時,每經過一個AS的邊界路由器,會將此路由器的AS號放入路由條目的AS-Path屬性中(最左邊),記錄此路由條目所經歷的AS-ID。當AS邊界路由器收到路由條目,首先查看它的AS-Path屬性,如果AS-Path屬性中存在自己BGP的AS號,則認為出現環路,丟棄此路由條目。
2. IBGP防環:
在AS內,沒有一種BGP路由屬性用來定義AS內防環的,所以IBGP采用水平分割的機制,當從IBGP鄰居傳遞過來的路由,不會再次傳遞到IBGP鄰居。
六. BGP配置過程:
① 啟用BGP並配置本地AS號
② Peer對等體
③ 等待建立鄰居
④ Network宣告網段
1. 啟用BGP並配置本地AS號:
全局模式下使用命令[Huawei]bgp 100啟用BGP並配置本地AS號
AS-ID:
其中AS-ID在報文中占16bit,最多可以支持2^16=65535個ID:
① 公有AS號:1-64511
② 私有AS號:64512-65535
2. Peer對等體:
在BGP進程下,使用命令peer 192.168.1.2 as-number 100指定鄰居IP和AS號。
(1)默認直連建立鄰居:
默認Peer對等體之后,路由器使用與對端直連的端口或IGP對應的出接口建立鄰居。
(2)LoopBack口建立鄰居:
當與對等體之間不止一條TCP鏈路時,可以使用邏輯地址建立鄰居加強冗余,當一條實際物理鏈路斷掉時,啟用另一條建立TCP鄰居。
使用命令[Huawei-bgp]peer 192.168.1.2 connect-interface loop 0進行端口修改,此命令只是對主動端發送Open報文時使用哪個接口的IP地址進行設置,如果被動端收到Open報文時,報文的源地址就是本設備的Peer地址,檢測無誤,則會使用Open報文中的目的地址為源地址回復Open報文建立鄰居。
① AR1為主動端,在Connect狀態主動發起Open報文,源地址為1.1.1.1,目標地址為2.2.2.2
② AR2收到Open報文后,源地址為Peer地址,報文通過,並且發送本端的Open報文,由於為TCP連接,使用源Open報文的源地址為本端Open報文的源地址
③ AR1收到Open報文后,通過檢查,鄰居建立
3. 等待建立鄰居:
BGP協議使用單播TCP進行鄰居的建立,可以使用本地任何端口進行鄰居建立,單播建立鄰居的好處是支持多跳鄰居建立,默認EBGP TCP報文中的TTL值只有一跳,如果使用Loopback地址或跨跳建立鄰居,會造成鄰居不可達現象。
使用命令:[Huawei-bgp]peer 192.168.1.2 ebgp-max-hop 10 修改TTL值
EBGP報文抓包:
4. Network宣告網段:
BGP使用命令network進行路由宣告,宣告路由的必須要存在路由表中,且掩碼必須嚴格匹配路由表掩碼,否則無法宣告。
5. BGP優化:
從IBGP學到的路由條目,有可能沒有*,表示沒有被優化,如果BGP路由表中的路由沒有被優化,此路由條目不會放入IP路由表,通常沒有被優化的的原因為:
① 下一跳不可達
② BGP同步
(1)下一跳不可達:
默認從EBGP學習到的路由條目在傳遞給IBGP鄰居的時候默認不會修改路由的下一跳地址,用於防止次優路徑,但是會帶來路由不可達的現象。
- 使用命令[Huawei-bgp]peer 192.168.1.1 next-hop-local修改源地址
- 在路由協議中引入之間接口
(2)BGP同步:
通過BGP學習到的路由,並且也可以通過IGP學習到,才能通告給對等體,稱之為BGP同步,當開啟BGP同步后,
如果足了同步的條件才能通告給鄰居,華為undo synchronization默認不開啟,並且無法開啟
6. 路由傳遞:
BGP默認不使用附載均衡,所以當同一個目的地存在多條等價路徑時,BGP協議也會選擇出一條最優的路由放入IGP路由表,傳遞給鄰居。
BGP對等體路由交互原則:
① IBGP路由,只發送給EBGP對等體
② EBGP路由,發布給所有EBGP和IBGP對等體
③ 只將最優路由發布給對等體
④ 只發送增量更新的BGP路由
七. 路由反射器:
Route Reflector,由於IBGP水平分割的原因,為保證IBGP對等體之間的連通性,需要在IBGP對等體之間建立全連接關系。假設在一個AS內部有n台設備,那么建立的IBGP連接數就為n(n-1)/2。當設備數目很多時,設備配置將十分復雜,而且配置后網絡資源和CPU資源的消耗都很大。在IBGP對等體間使用路由反射器可以解決以上問題。
路由器反射器對路由進行反射,對於同一目標多條路由反射器只會選一條最優的(選路規則),並且默認不會修改任何的屬性值,可以在Clint入路由進行修改
注:如果在反射器上使用命令[Huawei-bgp]reflect change-path-attribute命令,此時可以修改反射器反射發送的路由屬性參數(huawei交換機不支持)
1. 反射器角色:
路由反射器定義了以下幾種角色:
① Route Reflector 路由反射器
② Client 客戶機
③ Non-Client 非客戶機
④ Originator 始發者
⑤ Cluster集群
(1)Route Reflector:
路由反射器RR,允許把從IBGP對等體學到的路由反射到其他IBGP對等體的BGP設備,類似OSPF網絡中的DR。
(2)Client:
客戶機,與RR形成反射鄰居關系的IBGP設備。在AS內部客戶機只需要與RR直連。
(3)Non-Client:
非客戶機,既不是RR也不是客戶機的IBGP設備。在AS內部非客戶機與RR之間,以及所有的非客戶機之間仍然必須建立全連接關系。
(4)Originator:
Originator-ID為始發者Router-ID,在AS內部始發路由的設備。Originator_ID屬性用於防止集群內產生路由環路。
(5)Cluster:
集群,路由反射器及其客戶機的集合,通常一個集群中只有一個RR和一群客戶端。Cluster_list屬性用於防止集群間產生路由環路。
2. 反射器原則:
(1)反射器:
① 反射器從IBGP非客戶端接收到的路由,傳遞給所有的客戶端和EBGP鄰居。
② 反射器從客戶端接收到的路由,傳遞給所有的客戶端、非客戶端和EBGP鄰居
③ 反射器從EBGP鄰居接收的路由,傳遞給所有的客戶端、非客戶端和EBGP鄰居
(2)客戶端:
① 客戶端從反射器學來的路由,只傳遞給EBGP鄰居
3. 反射器規划:
(1)同一集群內的客戶機只與RR建立關系:
客戶機需要通過RR便可以知道網絡中的路由條目,所以同一個集群內所有的客戶端只需要與RR建立鄰居關系即可。
ClUSTER1配置:
R2:
[Huawei]bgp 200
[Huawei-bgp]router-id 2.2.2.2
[Huawei-bgp]reflector cluster-id 1----設置本端的簇為1
[Huawei-bgp]group g1----創建組g1
[Huawei-bgp]peer 4.4.4.4 group g1---將對端4.4.4.4加入組1
[Huawei-bgp]peer 5.5.5.5 group g1---將對端5.5.5.5加入組1
[Huawei-bgp]peer 6.6.6.6 group g1---將對端6.6.6.6加入組1
[Huawei-bgp]peer g1 reflect-client----將組g1設為此RR的客戶端
CLENT:
在所有的客戶端上,只需有建立與RR的鄰居關系即可。
(2)集群間RR建立IBGP全互聯關系:
每個集群只有一個RR,所以此時IBGP中的RR便可以建立全互聯的IBGP鄰居關系。
如果一個集群內存在多個RR做冗余:
- 由於Cluster id相同,所以另外一台RR不會接收,所以同RR之間不需要建立IBGP鄰居
- 如果存在EBGP路由,此時RR之間需要建立IBGP鄰居傳遞EBGP路由,因為沒有破壞水平分割,所以RR不會增加這兩種屬性
4. 反射器防環:
增加了路由反射器破壞了IBGP的“水平分割”防環機制,所以為了防止路由在IBGP傳遞時防止出現環路,RR在傳遞路由時會增加兩種屬性值,並且這兩種屬性只在IBGP之間傳遞,當在EBGP之間傳遞時,會將這兩種屬性刪除
注:只有在破壞“水平分割”的情況下才會增加這兩種屬性值,在RR收到EBGP鄰居傳遞過來的路由時傳遞給Client時不會增加兩種屬性值,只有收到IBGP路由時反射給Client時會增加。
(1)Originator id:
起源屬性,用於防止集群內出現環路
① 可選非過渡
② 用於集群內的防環
③ 由RR產生,攜帶了本地AS內該路由發送者的Router ID
原理:
① 路由第一次被RR反射給客戶端時,RR會將傳遞給RR的路由器ID作為Orginator屬性加到這條路由中,用來標識這條路由的起源路由器。
② 如果路由中已經存在Originator屬性,反射器不會創建新的Originator。
③ 當其他BGP對等體收到這條路由時,將對收到的Originator和本地路由表中的BGP Router-ID進行比較如果兩者相同,BGP對等體將會忽略掉這條路由,不做處理Originator屬性可以傳遞給其它的Cluster,路由在AS內傳遞時該屬性不會丟失。
注:如果AR2為AR3的RR,AR2再將1.1.1.1/32的路由傳遞給AR3時,由於沒有破壞水平分割,所以不會增加着兩種屬性
(2)Cluster List:
Cluster List屬性用於防止集群間產生路由環路
① 可選非過渡
② 用於集群間的防環
③ 由每個路由反射器產生,記錄反射路由經過的集群
注:一個AS內可以有多個簇,每個簇可以存在多個RR,同簇中的RR相同,不同簇的ID不相同
原理:
① 當路由反射器在客戶端之間或客戶端與非客戶端之間反射路由時,會將自己的
Cluster—ID增加到Cluster List中
② 路由反射器收到BGP路由后檢查其中的Cluster List,如果發現自己的Cluster-ID位於Cluster-ID中,則表明出現了路由環路,會忽略掉該路由。
- 當客戶機Client1從EBGP對等體接收到一條更新路由,它將通過IBGP向RR1和RR2通告這條路由。
- RR1和RR2在接收到該更新路由后,將本地Cluster ID添加到Cluster List前面,然后向其他的客戶機(Client2、Client3)反射,同時相互反射。
- RR1和RR2在接收到該反射路由后,檢查Cluster List,發現自己的Cluster ID已經包含在Cluster List中。於是RR1和RR2丟棄該更新路由,從而避免了路由環路。
八. BGP Confederation:
BGP路由反射器可以用來減少大型AS中IBGP鄰居關系的數量和簡化IBGP鄰居關系的管理和維護,BGP聯盟(Confederation)也可以用來實現類似的目的。
一個BGP聯盟是一個具有內部層次結構的AS,一個BGP聯盟由若干個子AS(Subautonomous System)組成,子AS也稱為成員AS(Member Autonomous System)。
對於一個BGP聯盟,其成員AS內部的路由器之間需要建立全互聯的IBGP鄰居關系或使用BGP路由反射器,而成員AS之間需要建立EBGP鄰居關系。
每個聯盟都有一個聯盟號(Confederation ID),它其實就是一個普通的AS編號。聯盟各個成員AS通常使用BGP協議預留的私有的AS編號, 私有AS號為64512-65535。
BGP聯盟之間行為:
① 增加成員AS,用於防環,格式為(64513 64514)100
② 下一跳地址不變
③ 保留Local-PREF
④ 保留MED
⑤ 鄰居建立TTL值為1
1. 防環機制:
BGP聯盟之后可能會帶來環路的風險,在BGP聯盟中,使用以下兩種屬性進行防環:
① AS Confed Sequence
② AS Confed SET
(1)AS Confed Sequence:
有序的子AS號,AS-Path的Type為4,路由在聯盟內部傳遞時,會攜帶AS Confed Sequnce,用於防止聯盟內部的環路。
格式為(AS Confed Sequence、AS Confed Sequence)AS Sequence
(2)AS Confed SET:
AS-Path的Type為3,在聯盟內部使用路由聚合時,如果開啟了匯總路由攜帶明細路由的AS ID屬性功能,會使用AS Confed SET攜帶這些屬性ID
2. BGP聯盟配置:
R2:
[Huawei]bgp 2001----創建BGP子AS進程
[Huawei-bgp]router-id 1.1.1.1
[Huawei-bgp]confederation id 200—---設置子AS所屬的總AS
[Huawei-bgp]confederation peer-as 202 203---設置聯盟成員號
[Huawei-bgp]peer 3.3.3.3 as-number 202
[Huawei-bgp]peer 3.3.3.3 next-hop-local--不是真正的EBGP鄰居,下一跳不更改
[Huawei-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[Huawei-bgp]peer 3.3.3.3 ebgp-max-hop 10-修改TTL值(子AS之間為EBGP,TTL為1,使用loop口建立鄰居ttl為1將不可達)
[Huawei-bgp]peer 5.5.5.5 as-number 203
[Huawei-bgp]peer 5.5.5.5 next-hop-local
[Huawei-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[Huawei-bgp]peer 5.5.5.5 ebgp-max-hop 10
注:
- BGP聯盟中,子AS之間的AS-Path變為(2003)200用於防環,並且TTL值只有1跳
- BGP聯盟之間取消了水平分割的機制用於路由的傳遞
- BGP聯盟默認在傳遞路由時不會更改下一跳
- BGP聯盟默認在傳遞路由時會攜帶路由屬性,等同於IBGP
九. BGP路由黑洞:
在BGP網絡總,報文穿越AS內部路由器時,有可能會被AS內部中未運行BGP協議的路由器接收到。由於這樣的路由器沒有AS間的BGP路由信息,報文有可能會被直接丟棄,造成路由黑洞。
如圖:
R1訪問R5的2.2.2.2網絡,將數據包送往R2,R2查找BGP路由表,下一跳為R4的192.168.3.2,使用迭代查找去往192.168.3.2的下一跳為R3的192.168.2.2/24,於是送往R2,R2收到去往2.2.2.2的數據包,查找路由表,發現路由表中沒有2.2.2.2/24的路由條目,於是丟棄數據包,造成路由黑洞。
形成BGP路由黑洞的主要原因在於AS內部中IGP路由器沒有AS外部的路由,解決方法為:
① IGP路由器中引入BGP路由
② 全部使用BGP路由
③ GRE隧道解決路由黑洞
④ MPLS技術解決路由黑洞
⑤ BGP同步
1. 路由引入:
在運行IGP和BGP的AS邊界路由器中,使用命令將BGP路由引入到IGP路由中,但是會造成中間的IGP路由器造成負擔。
解決方法:
① 可以在BGP設備上匯總,將匯總路由引入到IGP路由表中
② 可以配置一條匯總的靜態路由指向Null0,將這條匯總的靜態路由引入的IGP路由表中
在引入時默認路由設備只引入EBGP路由,如果想要引入IBGP路由,使用import BGP permit IBGP,但是會帶來環路的風險。
2. 全BGP協議:
無論是AS之間還是AS內部全部使用EBGP和IBGP路由,IBGP內部建立全互聯,解決路由黑洞問題。
3. GRE隧道技術:
解決BGP路由黑洞可以采用GRE隧道技術,在數據包的頭部在此封裝一個IP頭部,此頭部為AS邊界的路由器的IP網段,這樣在AS內部傳遞中,IGP路由器查看數據包只查看最外層GRE增加的頭部,將數據包送往AS邊界路由器,AS邊界路由器對去往另外AS的數據進行轉發。
在R2和R4之間建立GRE隧道:
[Huawei]inter Tunnel 0/0/0
[Huawei-Tunnel0/0/0]ip address 10.0.100.2 24---配置隧道口的IP地址
[Huawei-Tunnel0/0/0]tunnel-protocol gre
[Huawei-Tunnel0/0/0]source 10.0.23.2-----定義新IP頭部的源地址
[Huawei-Tunnel0/0/0]destination 10.0.34.4-----定義新IP頭部的目標地址
[Huawei]ip route-static 10.0.45.0 24 Tunnel 0/0/0 preference 1
[Huawei]ip route-static 10.0.5.5 32 Tunnel 0/0/0 preference 1
注:R2收到數據包后,查看路由表去往10.0.5.5的下一跳地址為10.0.34.4,查找IGP路由表下一跳為10.0。2.3,下一跳送往R3,R3將數據包丟棄。配置靜態路由的意思在於數據包去往10.0.3.4會走隧道口,進行隧道封裝,增加新的頭部,讓R3直接送往R4。
4. MPLS迭代標簽:
設備默認不會為BGP單播路由分配標簽,但是本端設備可以使用迭代查找的方式在BGP路有數據包前壓入下一跳IGP的標簽頭部,用來解決路由黑洞。
① R4的4.4.4.4想要訪問R5的5.5.5.5
② R4將目標地址為5.5.5.5的數據包送往R1
③ 配置了MPLS的R1收到目的地為5.5.5.5的數據包后,查看路由表5.5.5.5下一跳地址為3.3.3.3:
④ 再次查看去往3.3.3.3的標簽:
⑤ 發現去往3.3.3.3的Out Label為1025,於是將BGP數據包增加標簽頭部為1025。
⑥ 收到標簽為1025的IGP路由器查看標簽轉發表:
標簽為3,進行次末節標簽彈出,送往目的地3.3.3.3,最終數據包被R3收到。
配置:
華為設備默認不啟用迭代標簽壓入,使用以下命令開啟:
[Huawei]route recursive-lookup tunnel
5. BGP同步:
BGP同步是指路由器從EBGP鄰居學習到的路由條目如果在IGP中也存在,才會將此條目傳遞給BGP鄰居。如果BGP鄰居學習到了一條路由條目,表示此BGP路由條目在IGP中也存在,同時解決了數據在傳遞過程中出現的路由黑洞問題。
注:華為默認關閉BGP同步,並且無法打開。
6. 物理mash:
在兩個BGP speaker之間增加一條物理鏈路
十. BGP選路:
1. 路徑屬性:
BGP路徑屬性是一組描述BGP前綴特性的參數,由於各個廠商制定的屬性參數較多,有的屬性為私有屬性,有的為國際標准屬性,各個廠商的設備不一定都支持所有的屬性,而有的屬性的作用可以在每台路由器上生效,也可以在一個AS內部生效,也可以在所有的AS設備上生效,所以將屬性進行分類。
BGP路徑屬性可以被分為四大類:
① well-known mandatory 公認必遵
② well-known discretionary 公認任意
③ Optional transitive 可選過渡
④ Optional non-transitive 可選非過渡
類別 |
屬性 |
well-known mandatory |
① Originator ② As-Path ③ Next-Hop |
well-known discretionary |
① Local_Preference ② ATOMIC_Aggregate |
Optional transitive |
① Aggregate手動聚合 ② community團體屬性 |
Optional non-transitive |
① Originator ID ② Cluster List ③ MED |
(1)well-known mandatory:
公認必遵屬性,所有的BGP路由器都可以識別,且必須存在於Update消息中,如果缺少這種屬性,路由信息就會出錯。
類型協議:
① Originator
② Next-Hop
③ As-Path
注:在IPv4單播BGP報文中,三個屬性必須都要存在,而在AFI不等於1的其他BGP網絡類型中,下一跳屬性存放在MP-REACH-NLRI(多協議網絡可達性信息)中
(2)well-known discretionary:
公認任意 ,所有BGP路由器都可以識別,但不要求必須存在Update消息中,可以根據具體情況來決定是否增加到Update消息中。
類型協議:
① Local preference
② ATOMIC_Aggregate原子聚合
(3)Optional transitive:
可選過渡,BGP路由器可以選擇是否在Update消息中攜帶這種屬性。接收的路由器如果不識別這種屬性,可以轉發給鄰居路由器,鄰居路由器可能會識別並且使用到這種屬性
協議類型:
① Aggregator手動聚合
② community團體屬性
可選過渡屬性中,在傳遞過程中如果有的設備不支持此屬性,但是會繼續傳遞此屬性值,在繼續傳遞報文之前,會將Flag中的Partial置位,后續設備接收到Partial置位的報文,得知有設備不支持此屬性
(4)Optional non-transitive:
可選非過渡,BGP路由器可以選擇是否在Update消息中攜帶這種屬性,在整個路由發布的路徑上,如果部分路由器不能識別這種屬性,可能會導致該屬性無法正常發揮效用,因此在接收的路由器如果不識別這種屬性,應當丟棄這種屬性,不必再轉發給鄰居路由器
協議類型:
① Originator ID
② Cluster List
③ MED
2. BGP選路規則:
① 丟棄下一跳(NEXT_Hop)不可達的路由
② 優選Preferred_value值最大的路由
③ 優選本地優先級(Local_PREF)最高路由
④ Aggregate>Summary>Network>Import
⑤ 優選AS路徑(AS_PATH)最短的路由
⑥ ORIGIN屬性(I>E>?)
⑦ 優選MED值最低的路由
⑧ 依次選擇從EGP、聯盟、IBGP學來的路由
⑨ 優選下一跳度量值最低的路由
⑩ 優選Cluster_list長度最短路由
⑪ 優選Originator_id最小路由
⑫ 優選Router-id最小路由
⑬ 優選地址最小的對等體發布的路由
注:默認情況下,BGP不會進行負載均衡,比較到第9條選路規則下一跳度量值一致時,此時可以使用附載均衡命令。
(1)丟棄下一跳不可達的路由:
當路由器的下一跳不可達時,display ip routing-table將無法看到此條路由,bgp路由器已將下一跳不可達的路由直接丟棄。
NEXT_Hop屬性規則:
- BGP Speaker在向EBGP對等體發布某條路由時,NEXT_Hop值為空,會把路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的接口地址
- BGP Speaker在向IBGP對等體發布某條路由時,NEXT_Hop值為空,會把路由信息的下一跳屬性設置為本地與對端建立BGP鄰居關系的接口地址
- BGP Speaker在向IBGP對等體發布從EBGP對等體學來的路由時,並不改變該路由信息的下一跳屬性。
① 命令[Huawei-bgp]peer 192.168.2.2 next-hop-invariable保持NEXT_Hop的原屬性值傳遞
② 命令[Huawei-bgp]peer 192.168.2.2 next-hop-local修改下一跳為自身接口IP
next-hop-invariable應用場景:
① AR5、AR6、AR7之間運行IGP路由協議
② AR7將7.7.7.7/32的路由條目通過IBGP鄰居關系傳遞給AR6,如果下一跳屬性為Local,則IP地址為192.168.2.2
③ AR6收到路由后,將路由條目傳遞給RBGP鄰居AR5,下一跳屬性為Local,則IP地址為192.168.1.2
④ AR6訪問7.7.7.7,下一跳屬性為192.168.2.2,根據IGP迭代查詢下一跳地址為192.168.1.1,將數據包送給AR5
⑤ AR5收到數據包后,BGP路由表中7.7.7.7的下一跳屬性IP地址為192.168.1.2,將數據包又送回AR6,形成路由環路
⑥ 如果AR6將NEXT_Hop模式改為Invariable,則在將路由傳遞給AR5時,下一跳屬性IP為192.168.2.2,AR5收到數據后,直接將數據包送給AR7,解除環路
(2)優選Preferred_value值最大的路由:
協議首先值PrefVal:(華為私有,默認為0),數值高者優先,此屬性值不會發送給任何BGP鄰居,僅本地有效
PrefVal主要用於路由器從哪個端口送出數據包。
配置命令:
①宣告對等體,將對等體全部發送過來的路由Pref-value屬性改為100
[Huawei-bgp]peer 10.0.13.1 preferred-value 100—將10.0.13.1發送過來的路由中pref-value屬性值全部改為100
②使用Router-Policy,實現負載分擔:
[Huawei]ip ip-prefix 1 permit 10.0.44.44 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply preferred-value 100
[Huawei]route-policy 1 permit node 10
[Huawei-bgp]peer 10.0.1.1 route-policy 1 import----R1發送過來的10.0.44.44的路由條目的Pref-Value值為100
[Huawei]ip ip-prefix 2 permit 10.0.55.55 32
[Huawei]route-policy 2 permit node 5
[Huawei-route-policy]if-match ip-prefix 2
[Huawei-route-policy]apply preferred-value 100
[Huawei]route-policy 2 permit node 10
[Huawei-bgp]peer 10.0.2.2 route-policy 2 import----R2發送過來的10.0.55.55的路由條目的Pref-Value值為100
實現負載平衡。
(3)優選Local_Preference值最大的路由:
本地優先級Local_PREF:缺省值為100,數值高者優先。本地優先級(Local_PREF)屬性僅在
IBGP對等體之間交換,不通告給其他AS。
Local_PREF主要用於控制流量離開AS時的最佳路由,也就是從哪個邊界路由器離開AS
配置命令:
①BGP試圖下,使用命令將本路由器的Local-Pref改為200
[Huawei-ospf-1]bgp 100
[Huawei-bgp]default local-preference 200
②使用Router-Plicy實現負載均衡:
R2:
[Huawei]ip ip-prefix 1 permit 44.44.44.44 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply local-preference 200
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 1.1.1.1 route-policy 1 export
R3:
[Huawei]ip ip-prefix 1 permit 55.55.55.55 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply local-preference 200
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 1.1.1.1 route-policy 1 export
實現負載均衡。
注:Local_PREF不會在聯盟子AS中傳遞
(4)A>S>N>I>L:
根據路由生成方式進行對比,路由生成方式:
A(aggregate)>S(summary)>N(network)>I(import-route)>L(從鄰居學習來的路由)
(5)AS-PATH:
公認必遵屬性,優選AS路徑(AS_PATH)最短的路由,BGP路由器在向EBGP對等體宣告路由時,會在該路由的AS_Path最左端增加本地自制系統的AS編號,長度短者優先。AS_PATH屬性值會在所有的自制系統內修改as編號,修改AS-Path的長度可以控制BGP的選路,AS-Path會在所有的路徑中攜帶。
AS-Path主要用於整體上控制數據經過AS的路徑。
注:在路由器BGP試圖下使用命令bestroute as-path-ignore,此時不再比較AS—PATH屬性
AS-PATH Segment Type:
① AS Sequence
② AS Set
③ AS Confed Sequence
④ AS Confed SET
① AS Sequence:
有序的AS排列,AS-Path的Type為2,如果存在AS Set,總是在AS Set前面存在,每經過一個AS,AS Sequence會記錄此AS ID,用於防止路由環路。
② AS Set:
無序的AS排列,AS-Path的Type為1,如果使用了路由聚合功能,而且開啟了AS-Set參數選項,則聚合路由會將所有順序明確的使用AS Sequence表示,順序不明確的使用AS Set表示,一個AS Set為一個長度的AS ID
子路由一:1 2 3 4 5
子路由二:1 2 3 6 7
聚合后的路由屬性:1 2 3 {4 5 6 7}
配置命令:
① Router-Policy實現負載均衡:
R15:
[Huawei]ip ip-prefix 1 permit 22.22.22.22 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply as-path 20 30 additive—在源路由AS-Path屬性上增加20,30(如果為overwrite覆蓋源AS-Path)
注:如果增加的AS號碼存在網絡AS上,則收到路由器后,屬性中的AS ID和自身的AS ID一致,
會拒絕此路由,所以建議后面使用本AS ID,如 apply as-path 20 20 20 20
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 500
[Huawei-bgp]peer 10.0.15.1 route-policy 1 export
AS-path號已增加。
(6)ORIGINATOR屬性:
ORIGIN為起源屬性,公認必遵屬性,表示這條路由產生方式,對於BGP起源屬性來說:
IGP優於EGP優於?
- I為路由始發AS的Network得到的路由信息
- E為古老的EGP協議
- ?為Incomplete,不完整屬性,當使用Import命令引入IGP路由時,為此數值
使用Route-policy修改起源屬性:
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply origin incomplete
(7)優選MED值最低的路由:
Multi Exit Discriminator,多出口區分符,MED屬性只會影響相鄰兩個AS,當一個AS收到另一個AS路由條目后,不會在將此條目的MED屬性傳遞給EBGP鄰居(除非手工配置傳遞給EBGP鄰居MED值),MED缺省值為0,數值小者優先。在BGP選擇最佳路徑時,MED值為空實際上值為0,當使用Import命令將IGP路由引入到BGP路由表中,BGP協議直接將IGP的cost值作為MED值放入BGP路由表中
MED屬性的主要作用是用來控制來自鄰居AS的流量從哪個口進入本AS中
注1:只有相同的AS中的鄰居路由器傳遞的路由攜帶MED屬性值才會進行比較,否則跳過MED選路屬性,使用命令[Huawei-bgp]compare-different-as-med可以對不同的AS上進行MED值比較
注2:默認比較的順序為從時間最老的兩條路由條目進行比較,如果使用命令[Huawei-bgp]deterministic-med之后,會將每條路由以AS為單位進行分類,同等AS之間進行比較,各個AS中最優的路由在進行比較
注3:默認BGP協議引入(Network、Import)會將IGP中的cost復制到BGP路由中的MED中,並傳遞給IBGP鄰居,當傳遞給EBGP鄰居時,MED屬性值消失
注4:如果存在聯盟,由於聯盟內的路由攜帶子網AS ID,所以不會比較MED屬性
配置命令:
①使用命令修改路由器的MED值:
[Huawei-bgp]default med 100-----此命令只對本設備import的IGP路由med值起作用
②使用Router-Policy實現負載均衡:
R2:
[Huawei]ip ip-prefix 1 permit 11.11.11.11 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.3.2 route-policy 1 export
R3:
[Huawei]ip ip-prefix 1 permit 10.10.10.10 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.4.2 route-policy 1 export
實現負載均衡。
注:默認在比較MED值時只會比較通AS中的MED值,如果來自不同AS中相同的路由不會比較MED。
可以使用以下命令比較來自不同AS中的路由的MED值:
[Huawei-bgp]compare-different-as-med
(8)EBGP>聯盟>IBGP>Local Cross>Remote Cross:
依次選擇從EGP、聯盟、IBGP學來的路由、Local Cross、Remote Cross
- Local Cross:VPNv4路由同PE傳遞過來的VPnv4路由
- Remote Cross:VPNv4路由對端PE傳遞過來的VPNv4路由
(9)選擇IGP下一跳度量值最低的路由:
比較兩條路由對應的下一跳的開銷值
開啟附載均衡:
注:當前面九條全部相同,並且AS_PARH序列號ID一模一樣,此時可以使用命令開啟附載均衡:
[Huawei-bgp]maximum load-balancing bgp 8-----開啟BGP附載分擔,負載分擔的
最大路徑為8條
(10)優選Cluster_list長度最短路由:
當AS內部存在多個集群時,優先現則路由條目總Cluster List長度短者優先的路徑。
(11)優選Originator_id最小路由:
當路由條目中存在Originator Id時,優先選擇Id小的路由條目。
(12)優選Router-id最小路由:
存在到達同一目的地址的多條路由時,BGP優選Router ID最小的設備發布的路由。
注:如果路由屬性中存在Originator-ID屬性,而無法比較出最優路由,此時不會比較Router-ID,而是直接比較IP地址,如果沒有Originator-ID,會比較Router-ID
(13)優選IP地址最小路由:
優選從具有較小IP地址的對等體學來的路由,如果BGP在比較對等體地址之前還沒有選出最優路由,則表明本設備和另外一台設備之間通過等價鏈路建立了多個BGP鄰居關系。一般情況下,在兩台設備之間存在用於備份的物理鏈路時,我們推薦使用Loopback接口來建立BGP鄰居,但是實際上,兩台設備之間通過多個物理鏈路建立多個BGP鄰居關系也不違反協議規定。
十一. BGP路由過濾:
1. filter-Policy:
過濾策略,由於BGP為矢量路由協議,所以可以直接使用filter-Policy在入方向和出方向對路由進行過濾。
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 deny source 1.1.1.2 0
[Huawei-acl-basic-2000]rule 10 permit source any
[Huawei-bgp]bgp 100
[Huawei-bgp]peer 2.2.2.2 filter-policy 2000 export
2. Prefix-Policy:
前綴策略,使用IP-Prefix定義路由條目,BGP直接調用IP-Prefix進行路由的過濾
[Huawei]ip ip-prefix 1 index 5 deny 2.2.2.2 32
[Huawei]ip ip-prefix 1 index 10 permit 0.0.0.0 0 less-equal 32
[Huawei-bgp]bgp 100
[Huawei-bgp]peer 1.1.1.1 ip-prefix 1 export
3. Router-Policy:
BGP路由條目的下一跳實際為對端鄰居接口標識,可以根據下一跳過濾路由條目:
在R4上過濾下一跳為192.168.1.1的路由條目:
[Huawei]ip ip-prefix 1 permit 192.168.1.1 32
[Huawei]route-policy 1 deny node 5
[Huawei-route-policy]if-match ip next-hop ip-prefix 1
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 400
[Huawei-bgp]peer 192.168.1.1 route-policy 1 import
已無下一跳為192.168.1.1的路由條目
4. AS-Path-Filter:
BGP路由條目都會攜帶BGP的AS-ID,BGP過濾可以針對AS的ID號進行過濾,過濾公式為正則表達式
正則表示式符號:
符號 |
說明 |
^ |
匹配一個字符串的開始。如“^200”表示只匹配AS_PATH的第一個值為200 |
$ |
匹配一個字符串的結束。如“200$”表示只匹配AS_PATH的最后一個值為200 |
_ |
匹配一個符號。如逗號,括號,空格符號、前面(后面)什么都沒有 |
. |
匹配所有的內容,一個.表示一個符號(包含數字、符號、空格) |
* |
單目操作符,匹配前面的一個字符,如34*,表示4出現次數≥0次 |
+ |
單目操作符,匹配前面的一個字符,如34+,表示4出現次數≥1次 |
? |
單目操作符,匹配前面的一個字符,如34?,表示出現次數≤1次 |
() |
匹配變化的AS或者一個獨立的匹配,通常和“|”一起使用 |
| |
邏輯或,如(23|34),表示只要出現23或34都匹配 |
[] |
匹配內部的任何單個的數,通常和“-”一起使用 |
- |
連接符,如[123-56],表示出現1、2、3、4、5、6都匹配 |
常見正則表達式關系圖:
^$ Null,本區域始發的路由或引入的路由
.* 匹配所有路由
. 除空以外的所有路由
10_20_30匹配所有通過AS為10、20、30的路由條目
^10$ 匹配AS_Path中只有AS10的路由
^10_. 匹配從相鄰AS10接收的路由
^[0-9]+$ 匹配任意一個AS號
AS-Path屬性過濾配置:
① 在R4傳遞給R5路由條目時,過濾AS200的路由條目
[Huawei]ip as-path-filter 1 deny ^200
[Huawei]ip as-path-filter 1 permit .*
[Huawei]bgp 400
[Huawei-bgp]peer 5.5.5.5 as-path-filter 1 export
已無AS200的路由條目
5. Community屬性:
BGP的路由團體屬性Community的主要作用是簡化路由策略的實施過程,可選過渡。例如,可以將擁有相同團體屬性的若干路由視為屬於同一個團體,當需要對該團體中所有路由的某個屬性進行修改時,可以通過匹配相應的團體屬性來自動實現所有路由的特定屬性的修改。
團體屬性是BGP路由的一種可選屬性,路由器在向BGP對等體傳遞路由時,如果希望所傳遞的路有攜帶團體屬性,需要額外配置。
(1)常規Community屬性:
一條BGP路由可以應有多個團體屬性,團體屬性的值規定為4個字節,
表示方式:
① AA:NN的格式表示,其中前2個字節AA為AS號,后2個字節NN為團體編號。最大數值為65535:65535
② 團體屬性的值也可以表示為一個十六進制數或十進制數,范圍是0x00000000~0xffffffff或0~4294967295,其中,0~65535和4294967295為預留值
配置:
①為R1上的所有路由打上團體屬性值為10:100,R2上的路由打上團體屬性值為20:100:
注:如果if-match community-filter,則需要使用命令
R1:
[Huawei]ip ip-prefix 1 permit 1.1.1.1 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply community 10:100
[Huawei-bgp]peer 192.168.1.1 route-policy 1 export
[Huawei-bgp]peer 192.168.1.1 advertise-community--------默認不傳遞Community屬性,使用此命令激活傳遞
R2:
[Huawei]ip ip-prefix 1 permit 2.2.2.2 32
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match ip-prefix 1
[Huawei-route-policy]apply community 20:100
[Huawei-bgp]peer 192.168.2.1 route-policy 1 export
[Huawei-bgp]peer 192.168.2.1 advertise-community
R3上查看團體屬性:
② 在R3上將團體屬性值為10:100、20:100的路由條目的MED值設置為100傳遞給R4
R3:
[Huawei]ip community-filter 1 permit 10:100 20:100
[Huawei]route-policy 1 permit node 5
[Huawei-route-policy]if-match community-filter 1
[Huawei-route-policy]apply cost 100
[Huawei]route-policy 1 permit node 10
[Huawei]bgp 300
[Huawei-bgp]peer 4.4.4.4 route-policy 1 export
已修改MED值
(2)特殊Community屬性:
RFC1997定義了幾種特殊的團體,也被稱為Well-Known團體:
① Internet
② No-Export
③ No-Export-Subconfed
④ No-Advertise
① Internet:
Internet團體屬性沒有一個特定的值,所有路由都默認認為屬於該團體,路由器可以向任何BGP對等體發布所收到的屬於Internet團體的路由。
② No-Export:
No-Export團體屬性的值為4294967041(0xffffff01)。路由器接收到一條攜帶No-Export團體屬性的路由后,不會將它發布給EBGP對等體,但可以發布給IBGP對等體和聯盟EBGP對等體。
③ No-Export-Subconfed:
No-Export-Subconfed團體屬性的值為4294967043(0xffffff03)。路由器收到一條攜帶No-Export-Subconfed團體屬性的路由后,只會將它發布給IBGP對等體,不會將它發布給EBGP對等體和聯盟EBGP對等體。
④ No-Advertise:
No-Advertise團體屬性的值為4294967042(0xffffff02)。路由器接收到一條攜帶No-Advertise團體屬性的路由后,不會將它發布給任何BGP對等體。
十二. BGP可擴展性:
1. BGP安全特性:
BGP安全特性主要包含以下幾個方面:
① MD5
② GTSM
③ 限制從對等體接收的路由數量
④ AS-Path長度保護
(1)MD5:
可以使用MD5對BGP報文進行加密,在建立TCP連接時進行MD5認證,由於所有的報文承載在TCP報文之上,所以BGP所有報文都要認證。
使用以下命令進行MD5加密:
[Huawei-bgp]peer 192.168.3.1 password cipher Huawei
(2)GTSM:
Generalized TTL Security Mechanism,通用TTL安全防護機制。GTSM通過檢查IP報文頭中的TTL值是否在一個預先定義好的范圍內,對IP層以上業務進行保護。在實際應用中,主要用於保護健在在TCP/IP基礎上的控制層面(路由協議等)免受CPU利用(CPU-utilization)類型的攻擊入CPU過載(CPU overload)
解決的安全問題:
攻擊者模擬真實的BGP報文,對一台路由器不斷的發送報文,路由器收到這些報文后,發現是發送給本機的報文,轉發層面直接上送控制層平面由BGP協議處理,而不加辨別其“合法性”,這樣導致路由器因為處理這些報文,系統異常繁忙,CPU占用率高。類似於DOS攻擊。
GTSM是一種利用TTL防止以上類型攻擊的通用化技術,主要手段如下:
- 對於直連的協議鄰居:將需要發出的協議報文的TTL值設定為255,這樣部署了GTSM
功能的鄰居收到后,鄰居轉發層面會將TTL值為非255的協議報文直接丟棄,避免了對控制層面的攻擊。
- 對於多跳的鄰居:可以定義一個合理的TTL范圍,例如251-255,鄰居轉發層面收到不
匹配這個TTL范圍的協議報文直接過濾掉,從而避免了控制層面受到攻擊。
GTSM配置命令:
[Huawei-bgp]peer 192.168.1.1 valid-ttl-hops 1
注:hops默認值為255,多跳定義范圍時,公式為【255-hops+1,255】,缺省情況下,hops
取值為255,即TTL有效值范圍為{1,255}。對於EBGP直連路由,hops的取值為1,即
有效的TTL值為255。
(3)限制對端路由數量:
由於路由器的性能有限,為了防止路由器宕機,可以使用命令限制從對端接收到的最大BGP路由數量。
配置命令:
- 100:允許接收的最大上限為100條
- 75: 當超過最大上限的75%時,進行告警,缺省值為75
- alert-only: 對路由器超限僅限於產生告警,不再接收超限后的路由
- idle-forever:路由超限斷開連接,並且不會自動重新建立連接,手工使用命令reset bgp
- idle-timeout: 路由器超限斷開連接,自動重新建立連接的超時定時器。整數形式,取
值范圍為1-1200,單位是分鍾,在定時器超時前,可以手工使用命令reset bgp
- 不配置以上參數的時候,路由超限產生告警並計入日志,鄰居斷開,30S后自動重新嘗試建立鄰居關系。
(4)AS-Path長度保護:
缺省情況下,AS-Path屬性中的AS號的最大限制為2000,可以使用命令對AS號進行限制。
使用以下命令進行AS-Path長度保護:
[Huawei-bgp]as-path-limit 10—只接收路由條目中AS號不超出10個AS號的路由條目
2. 路由衰減:
Route Dampening,路由衰減主要用來解決路由不穩定問題,路由不穩定的主要表現形式為路由震盪(Route Flaps),即路由表中的某條路由反復的消失和重現,發生路由震盪時,路由協議就會向鄰居發布更新,收到更新報文的路由器重新計算路由並修改路由表,所以頻繁的路由震盪會消耗大量的帶寬資源和CPU資源,嚴重時會影響網絡的正常工作。
原理:
BGP衰減使用懲罰值來衡量一條路由的穩定性,懲罰值越高則說明路由越不穩定。路由每發生一次震盪(路由從激活狀態變為未激活狀態,稱為一次路由震盪),BGP變回給此路由增加一定的懲罰值(1000)。當懲罰值超過抑制閥值時,次路由被抑制,不加入到路由表中,也不再向其他BGP對等題發布更新報文。
被抑制的路由每經過一段時間(900S)懲罰值便會減少一半。這個時間成為半衰期(Half-life)。當懲罰值降到再使用閥值時,次路由變為可用並加入到路由表中,同時向其他BGP對等體發布更新報文。
注:路由衰減只針對EBGP生效,對IBGP無效。
配置命令:
[Huawei-bgp]dampening 15 1000 3000 5000
- 配置半衰期時間為15分鍾,如果路由震盪超出閥值,如果15分鍾內沒有出現震盪,懲罰值減少一半。
- 配置使用閥值為1000,當減少到1000時,路由可用
- 配置抑制閥值為3000,當懲罰值超出3000,路由不可用
- 配置抑制閥值上限為5000,表示當懲罰值增加到5000時,不再增加
3. BGP ORF:
BGP Outbound Route Filtering,BGP出方向的路由過濾,基於本地的入口策略構建對端的出口策略,實現BGP按需發布路由。
當在R2上配置入方向的路由過濾時,R1會將所有的路由傳遞給R2,R2根據路由策略選擇接收哪些路由條目,但是此時R1已將所有的路由條目傳遞給了R2,造成了鏈路帶寬的浪費。
ORF原理:
在R2上配置ORF,配置IP前綴選擇所要接收的路由條目,ORF會將所要接收的路由條目打包到Route-refresh中,發送到對端鄰居,告訴鄰居所要接收的路由條目,當對端收到Route-refresh報文會在接口上構建策略。
ORF配置:
R2:
[Huawei]ip ip-prefix 1 index 5 permit 1.1.1.2 32----配置接收的報文
[Huawei]bgp 100
[Huawei-bgp]peer 192.168.1.1 capability-advertise orf ip-prefix both
[Huawei-bgp]peer 192.168.1.1 ip-prefix 1 import
R1:
[Huawei-bgp]peer 192.168.1.2 capability-advertise orf ip-prefix both
4. Active-Route-Advertise:
激活路由通告,路由必須同時滿足在BGP協議層面優選與在路由管理平面活躍兩個條件,才能向鄰居發布。
原理:
默認情況下,當路由存在BGP路由表中並且為最優即可向鄰居發布,當配置Active-Route-Advertise后,發送給對端的條件不僅需要在BGP路由表中為最優,而且要在IP路由表中為最優(協議優先級)。
注:與命令[Huawei-bgp]bgp-rib-only(禁止BGP路由下發到IP路由表)互斥
配置:
[Huawei-bgp]active-route-advertise----激活active-route-advertise
5. BGP按組打包:
按組打包技術將所有擁有共同出口策略的BGP鄰居當做是一個打包組,每條待發送路由只被打包一次然后發送給組內的所有鄰居。
配置:
R2:
① 定義組內容:
[Huawei-bgp]group RR internal---配置打包組RR為IBGP組
[Huawei-bgp]peer RR connect-interface LoopBack 0---配置建立接口
[Huawei-bgp]peer RR reflect-client----配置作為組RR的客戶端
[Huawei-bgp]peer RR next-hop-local----配置組RR的下一跳為自身
[Huawei-bgp]reflector cluster-id 2.2.2.2
② 建立鄰居應用組RR內容:
[Huawei-bgp]peer 3.3.3.3 group RR
[Huawei-bgp]peer 4.4.4.4 group RR
[Huawei-bgp]peer 5.5.5.5 group RR
6. 4Byte的AS號:
BGP報文頭部的AS號長度只支持2Byte,4ByteAS號特性是將AS號的編碼范圍由2字節擴大為4Byte。
支持4Byte的BGP並沒有改變原報文格式,Open的MY AS長度依舊為2Byte,而真正的4Byte的AS號標識存放在擴展Options中,原Open的MY AS中使用23456進行標識
7. AS特性:
(1)public-as-only:
ISP在部署網絡時,如果AS號碼不夠使用,通常會使用私有AS號碼,但是私有AS號碼不能在互聯網上傳遞。
在AR9上使用命令[Huawei-bgp]peer 192.168.1.1 public-as-only,此時在AR9將企業路由傳遞
給AR8時,會自動將AS號碼刪除
注:前提為企業路由AS屬性中不能存在公網路由
(2)fake-as:
① AR9和AR8使用正常的AS號碼建立鄰居
② AR9和AR10之間AR9使用AS400與AR10建立鄰居
AR9:
[Huawei]bgp 200
[Huawei-bgp]peer 192.168.2.2 as-number 300
[Huawei-bgp]peer 192.168.2.2 fake-as 400
AR10:
[Huawei]bgp 300
[Huawei-bgp]peer 192.168.2.1 as-number 400
③ 而AR9在向AR8傳遞路由時,不會攜帶AS400的AS-PATH屬性ID
(3)allow-as-loop:
① AR8和AR10都為AS300,所以AR8不會接收從AR9傳遞過來的關於AR10的路由條目
② 使用命令[Huawei-bgp]peer 192.168.1.2 allow-as-loop 2允許路由屬性中的AS ID和自身的AS ID相同,並且相同的次數為2次
在全局下使用命令[Huawei-bgp]bestroute as-path-ignore