BGP路由技術
一、BGP概述
1、自治系統(AS,autonomous system)
自治系統是由一個技術管理機構管理,使用統一選路策略的一組路由器集合。
自治系統編號范圍:1-65535,其中1-64511是互聯網上注冊公有AS號,類似公網IP地址。64512-65535是私有AS號,類似私網IP地址。
2、動態路由的分類
(1)自治系統分類
①IGP:自治系統內部路由協議,主要有:RIP 1/2、OSPF、IS-IS、EIGRP(思科私有協議)。
IGP是運行在AS內部的路由協議,主要解決AS內部的選路問題,發現、計算路由。
②EGP:自治系統外部路由協議,通常為BGP。
EGP是運行在AS與AS之間的路由協議,他解決AS之間選路問題。
(2)協議類型分類
①距離矢量路由協議:RIP 1/2、BGP、EIGRP
②鏈路狀態路由協議:OSPF、IS-IS
3、BGP的概念
BGP是一種運行在AS和AS之間的動態路由系誒,主要作用在AS之間自動交換無環路由信息以此來構建AS的拓撲圖,從而消除路由環路並實施用戶配置的路由策略。目前公網網絡條目眾多,IGP協議無法承載,而BGP可以輕松應對,通常BGP協議用於ISP和ISP之間或跨越地域總、分公司之間的路由信息交換。
4、BGP的特征
●傳輸協議:TCP,端口號為179
●BGP是外部路由協議,用來在AS之間傳遞路由信息
●是一種增強的路徑矢量路由協議
●擁有可靠的路由更新機制
●具備豐富的Metric度量方法
●無環路協議設計
●為路由條目附帶多種屬性信息
●支持CIDR(無類別域間選路)
●豐富的路由過濾和路由策略
●無需周期性更新
●路由更新時只發送增量路由
●周期性發送Keep Alive報文以保持TCP連通性
二、BGP工作原理
1、BGP鄰居關系
(1)BGP報文
①open報文
open報文是TCP建立后發送那個的第一個報文,用於建立BGPP對等體之間的連接關系。
主要包括BGP版本號、本地AS編號、Holdtime等信息。
②update報文
update報文使用在BGP之間更新路由信息,update報文可以通告多條屬性相同的可達路由信息,也可以撤銷多條路由不可達的路由信息。
③notification報文
報文的作用是當BGP檢測到錯誤狀態時,立即向對等體發送notification報文,之后BGP就會中斷,只要收到notification報文就會返回idle狀態。
④route-refresh報文
用來告知對等體所支持路由的刷新能力,BGP的入口策略路由發生變化,本地的BGP路由會向對等體發送route-refresh報文,收到信息后,對等體將其路由信息重新發送給本地BGP路由器。
⑤keep alive報文
該報文在對等體之間周期的發送報文,用以保持連接的有效性並維護其連接,keep alive報文發送周期為60s,保持時間180s,這個類似於ospf中的hello報文。
(2)BGP狀態機
idle狀態-空閑
connece狀態-連接
active狀態-活動
opensent狀態-開啟發送
openconfirm狀態-開啟確認
established狀態-建立
(3)BGP數據庫
①IP路由表(IP-RIB)
全局路由信息庫,包括最優的路由信息
②BGP路由表(Loc-RIB)
BGP路由信息庫,包括本地BGPspeak通告的路由信息,將其最優的添加到路由表中
③鄰居表
對等體鄰居清單表,包括對等體兩端的鄰居信息及鄰居列表
④Adi-RIB-In
對等體宣告給本地的speak的未處理的路由信息庫
⑤Adj-RIB-Out
本地speak宣告給指定的對等體路由信息庫
(4)BGP的鄰居關系類型
①IBGP
同一個AS內部BGP鄰居關系,IBGP鄰居是指運行BGP協議的對等體兩端在同一個AS域內,屬於BGP AS內部。
②EBGP
AS之間的BGP鄰居關系,EBGP通常指運行BGP協議的對等體兩端在不同AS內部
2、通告BGP路由的方法
(1)netwrok方式
[R1-bgp] network 1.1.1.1 32
[R1-bgp] network 2.2.2.2 32
(2)import方式
[R1-bgp] import-route ospf 110 ###注入ospf中的路由
[R1-bgp] import-route static ###注入靜態路由
[R1-bgp] import-route direct ###注入直連路由
三、BGP的配置
1、BGP配置思路
(1)啟用BGP,后面跟AS系統號
(2)宣告route-id,建立鄰居關系用
(3)宣告和誰建立鄰居關系
(4)通告BGP路由(network、import)
2、BGP對等體配置
如R1與R2建立鄰居對等,as系統號為100,R1 router-id為1.1.1.1,R2 router-id為2.2.2.2
R1:
[R1] router id 1.1.1.1
[R1] bgp 100
[R1-bgp] peer 2.2.2.2 as-number 100
[R1-bgp] peer 2.2.2.2 connect-interface LoopBack 0
R2:
[R2] router-id 2.2.2.2
[R2] bgp 100
[R2-bgp] peer 1.1.1.1 as-number 100
[R2-bgp] peer 1.1.1.1 connect-interface LoopBack 0
3、保證IBGP下一跳可達
在EBGP之間建立對等鄰居時,由於它們之間數據傳輸需經2跳,因此需做如下設置
[R2-bgp] peer 3.3.3.3 ebgp-max-hop 2
4、BGP屬性
路由器發送關於目標網絡的BGP更新消息,更新的度量值被稱為路徑屬性。屬性可以是公認的或可選的、強制的或自由決定的、傳遞的或非傳遞的。屬性也可以是部分的。並非組織的和有組合的都是合法的,路徑屬性分為4類:公認必遵、公認自決、可選過渡、可選非過渡。
公認屬性:
是公認所有BGP實現都必須識別的屬性,這些屬性被傳遞給BGP鄰居。
公認強制屬性必須出現在路由描述中,公認自由決定屬性可以不出現在路由描述中。
可選屬性:
非公認屬性被稱為可選的,可選屬性可以是傳遞的或非傳遞的。
可選屬性不要求所有的BGP實現都支持。
對於不支持的可選傳遞屬性,路由器將其原封不動的傳遞給其他BGP路由器,在這種情況下,屬性被標記為部分的。
對於可選非傳遞屬性,路由器必須將其刪除,而不將其傳遞給其他BGP路由器。
5、BGP選路原則
1、優選具有最大Weight值的路由
2、優選具有最大Local_Preference值的路由
3、優選起源於本地的路由(如本地network、aggregate或redistribute的)即下一跳是0.0.0.0(在BGP表中,本路由器通告的路由的下一跳為0.0.0.0)
4、優選AS-Path最短的路由
5、Origin(IGP>EGP>incomplete)
6、優選MED最小的路由,默認情況下僅有當所有備選路由來自同一AS才會比較MED
7、優選EBGP鄰居發來的路由(相對於IBGP鄰居學過來的),在聯邦EBGP和IBGP中首選聯邦EBGP路由
8、優選到BGP next_hop 最近的鄰居
9、執行等價負載均衡(如果有多條來自相同相鄰AS的路由並通過Maximum-paths 使多條路徑可用,則將所有開銷相同的路由放入本地路由表)
10、優選最老的EBGP路由,EBGP路由接收的順序(此條主要對EBGP路由起效,基本不用,不好確定)
11、BGP鄰居的RID越小越優先
12、優選cluster_list最短的路由
13、選擇鄰居IP地址(BGP的neighbor配置中的那個地址)最小的路由
什么是BGP?
BGP( Border Gateway Protocol,邊界網關協議)是一個路徑矢量路由協議,和傳統的基於下一跳的IGP協議不同,它是基於AS(自治系統)的協議。BGP屬於外部網關路由協議,它解決的是AS之間的選路問題,如果把一個城市比作一個自治系統,那么像RIP、OSPF等協議就相當於該城市的公交車或地鐵,而BGP則是火車,運行在城市之間。
什么是自治系統?
自治系統( Autonomous System,AS )是由同一個技術管理機構管理、使用統一選路策略( 運行同一動態路由協議 )的一組路由器的集合,自治系統的編號取值范國為1~ 65535。其中1~64511是互聯網上注冊的公有AS號類,類似公有IP地址,是全球唯一的且不可重復使用,64512-65535是私有AS號,類似於私有地址,可以重復使用但是互聯網上不可以被使用。
認識IGP、EGP、IBGP、EBGP?
IGP:即自治系統內部的路由協議,主要包含RIPv1/v2、OSPF、ISIS、EIGRP(思科私有協議),IGP是運行在AS內部的路由協議,它解決AS內部的選路問題,其主要作用是發現、計算路由。
EGP:即自治系統之間的路由協議,通常指BGP。EGP是運行在AS與AS之間的路由協議,它解決的是AS之間的選路問題,BGP的主要作用是控制路由的傳播和選擇最優路由。
IBGP和EBGP所定義於BGP(EGP)里的鄰居關系
IBGP:同一個AS內部的BGP鄰居關系,IBGP鄰居通常是指運行BGP協議的對等體兩端均在同一個AS域內,屬於同一個 BGP AS內部。
EBGP:AS之間的BGP鄰居關系,EBGP鄰居通常是指運行BGP協議的對等體兩端分別在不同的AS內。
如下圖所示
總結動態路由分類
按自治系統分類可以分為:
IGP、EGP(BGP)
按協議類型分類可以分為距離矢量路由協議,鏈路狀態路由協議
距離矢量路由協議: RIPv1/v2、BGP(路徑矢量協議)、EIGRP(高級的距離矢量協議)
鏈路狀態路由協議: OSPF、ISIS
🆗,上面都了解以后,開始學習BGP
BGP的特性
傳輸協議:TCP,端口號179
BGP是外部路由協議,用來在AS之間傳遞路由信息
是一種增強的路徑矢量路由協議
擁有可靠的路由更新機制,無環路協議設計
具備豐富的 Metric度量方法
無須周期性更新
路由更新時只發送增量路由
周期性發送 Keepalive報文,以保持TCP連通性
BGP的工作原理
BGP是跨公網,跨自治系統的路由協議,可以在自治系統之間學習路由。BGP的動態學習路由也是基於鄰居,只有鄰居關系正常,BGP才可以正常工作。
BGP鄰居關系
運行BGP的路由器通常被稱為 BGPspeaker(發言者),相互之間傳遞報文的 Speaker之間互稱為對等體( Peer ),BGP鄰居關系的建立、更新和刪除是通過對等體之間交互5種報文、6種狀態機和5個表等信息來完成的,最終形成BGP鄰居
BGP的鄰居關系是基於TCP的,也就是說只要 TCP/IP可達,無論是否直連,BGP對等體彼此之間就可以建立鄰居關系
BGP的5種報文
報文 |
作用 |
open |
建立BGP對等體之間的連接 |
update |
更新增量路由 |
notification |
檢測錯誤狀態,報錯 |
route-refresh |
告知對等體本地支持的路由刷新能力 |
keepalive |
周期性的發送,保持有效的連接 |
BGP的6種狀態機
狀態機 |
動作 |
idle |
初始狀態,拒絕任何連接 |
connect |
連接態,等待tcp連接的建立 |
active |
活躍態,嘗試tcp的連接 |
opensent |
檢查態,檢查收到的open報文,如果報文正確轉到下一連接狀態openconfirm;如果報文錯誤,轉到idle |
openconfirm |
等待態,等待對等體的keepalive或notification報文,如果是keepalive就進入到established;如果是notification就回到idle |
established |
建立態,對等體之間正常收發信息 |
通告BGP路由的方法
BGP路由是通過BGP命令通告而成的,而通告BGP路由的方法有兩種: Network和 Import
使用 Network命令可以將當前設備路由表中的路由( 非BGP )發布到BGP路由表中並通告給鄰居。需要特別注意的是, network的對象是路由條目
[r1]bgp 100
[r1-bgp]network 1.1.1.1 32
[r1-bgp]network 192.168.100.0 24
使用Import命令可以將所學習到的路由信息重分發到BGP路由表中,是BGP宣告路由的一種方式,可以引入BGP的路由包括直連路由、靜態路由及動態路由協議學習的路由。和 Network方式的區別是,Import的對象是某種動態路由協議,而不是路由條目
[R2]bgp 100
[R2-bgp]import-route ospf 110
保證IBGP下一跳可達
在AS邊緣的BGP設備,會接收到它的EBGP對等體鄰居傳遞過來的BGP路由信息,因為EBGP鄰居接收到的BGP路由信息中下一跳改變,而在同一個AS內通過IBGP鄰居接收過來的BGP路由信息中的下一跳不會改變
如下圖所示:
在不同AS里面,他們呢屬於EBGP鄰居,R2,R3的下一跳都正常;
在同一AS中,R3,R4是IBGP鄰居,下一跳都會指向R2,這樣R4就會有問題
解決辦法是在R3上宣稱下一跳為R3自己,那么R4看到的下一跳就變成34.1.1.3,而34.1.1.3可以通過IGP(ospf)學習到(圖中是直連),從而解決了路由無效的問題
[R3]bgp 300
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 23.0.0.2 as-number 200
[R3-bgp]peer 34.1.1.4 as-number 300
[R3-bgp]peer 34.1.1.4 next-hop-local
BGP的屬性
BGP的常用屬性有 Origin、AS-PATH、Next-Hop、Local-Pref和MED等
屬性 |
作用 |
origin屬性 |
用來定義路徑信息的來源,標記一條路由是怎么成為BGP路由的 |
AS-PATH(AS路徑)屬性 |
記錄了某條路由從本地到目的地址所要經過的所有AS編號,且離本設備最近的AS號在最前面 |
Next-Hop(下一跳) |
IGP中的下一跳描述的是下一個路由器,而BGP中的下一跳描述的是下一個AS |
Local-Pref屬性 |
標識BGP路由的優先級,用於判斷流量離開AS時的最佳路由 |
med屬性 |
判斷流量進入鄰居AS時的最佳路由,其他條件相同的情況下,將優先選擇MED值較小者作為最佳路由 |
BGP選路的規則
Local-Preference優先級以數值高的路由優先
聚合路由優先級高於非聚合路由
本地通過 Network命令引入的路由的優先級高於本地通過 Import-route命令引入的路由
AS路徑長度最短(最少個數)的路徑優先級高
比較 Origin屬性,IGP優先級高於EGP,EGP優先級高於 Incomplete
選擇MED優先級較小的路由
EBGP路由優先級高於IBGP路由
下面,再看一個BGP的實驗
BGP實驗
使PC1可以ping通PC2
然后修改BGP屬性來改變路徑
r1配置端口並建立對等體
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]ip add 10.0.12.1 24
[r1-GigabitEthernet0/0/0]
[r1-GigabitEthernet0/0/0]int g0/0/1
[r1-GigabitEthernet0/0/1]ip add 10.0.13.1 24
[r1]int g0/0/2
[r1-GigabitEthernet0/0/2]ip add 192.168.100.254 24
[r1-LoopBack0]ip add 1.1.1.1 32
[r1-LoopBack0]q
## 創建對等體
[r1]bgp 100
[r1-bgp] router-id 1.1.1.1
[r1-bgp] peer 10.0.12.2 as-number 200
[r1-bgp] peer 10.0.13.2 as-number 200
[r1-bgp]network 1.1.1.1 32
[r1-bgp]network 192.168.100.0 24
r2添加端口並創建對等體
[r2]int g0/0/0
[r2-GigabitEthernet0/0/0]ip add 10.0.12.2 24
[r2-GigabitEthernet0/0/0]int g0/0/1
[r2-GigabitEthernet0/0/1]ip add 10.0.24.1 24
[r2]int LoopBack 0
[r2-LoopBack0]ip add 2.2.2.2 32
[r2]ospf 110
[r2-ospf-110]area 0
[r2-ospf-110-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[r2-ospf-110-area-0.0.0.0]network 2.2.2.2 0.0.0.0
## 建立對等體
[r2]bgp 200
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 10.0.12.1 as-number 100
[r2-bgp]peer 10.0.24.2 as-number 200
[r2-bgp]peer 10.0.24.2 next-hop-local
[r2-bgp]q
r3添加端口並創建對等體
[r3]int g0/0/0
[r3-GigabitEthernet0/0/0]ip add 10.0.13.2 24
[r3-GigabitEthernet0/0/0]int g0/0/1
[r3-GigabitEthernet0/0/1]ip add 10.0.34.1 24
[r3]int LoopBack 0
[r3-LoopBack0]ip add 3.3.3.3 32
[r3]ospf 110
[r3-ospf-110]area 0
[r3-ospf-110-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[r3-ospf-110-area-0.0.0.0]network 3.3.3.3 0.0.0.0
## 建立對等體
[r3]bgp 200
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 10.0.13.1 as-number 100
[r3-bgp]peer 10.0.34.2 as-number 200
[r3-bgp]peer 10.0.34.2 next-hop-local
r4添加端口並創建對等體
[r4]int g0/0/0
[r4-GigabitEthernet0/0/0]ip add 10.0.24.2 24
[r4-GigabitEthernet0/0/0]int g0/0/1
[r4-GigabitEthernet0/0/1]ip add 10.0.34.2 24
[r4]int g0/0/2
[r4-GigabitEthernet0/0/2]ip add 172.16.46.254 24
[r4]int LoopBack 0
[r4-LoopBack0]ip add 4.4.4.4 32
[r4]ospf 110
[r4-ospf-110]area 0
[r4-ospf-110-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[r4-ospf-110-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[r4-ospf-110-area-0.0.0.0]network 172.16.46.0 0.0.255.255
## 建立對等體
[r4]bgp 200
[r4-bgp]router-id 4.4.4.4
[r4-bgp]peer 10.0.24.1 as-number 200
[r4-bgp]peer 10.0.34.1 as-number 200
[r4-bgp]network 4.4.4.4 32
[r4-bgp]network 172.16.46.0 24
配置完成
在r1查看路由如下
*代表有效的路由,>代表最優的路由,只有最優的路由才會最終放入路由表中
ping通測試
修改優先級屬性來修改r1到r4的路徑
[r3]route-policy lop permit node 10
Info: New Sequence of this List.
[r3-route-policy]apply local-preference 222
[r3-route-policy]q
[r3]bgp 200
[r3-bgp]peer 10.0.34.2 route-policy lop export
[r3]q
<r3>reset bgp all # 刷新bgp路由表
修改AS-PATH屬性控制選路
自己指定經過那些AS
[R2]route-policy as permit node 10
Info: New Sequence of this List.
[R2-route-policy]apply as-path 100 200 300 additive
[R2-route-policy]quit
[R2]bgp 200
[R2-bgp]peer 10.0.24.2 route-policy as export
[R2-bgp]quit
[R2]quit
<R2>reset bgp all
修改完r4查看路由表如下
通過MED屬性控制選路
[R2]route-policy med permit node 20
Info: New Sequence of this List.
[R2-route-policy]apply cost + 500
[R2-route-policy]quit
[R2]bgp 200
[R2-bgp]peer 10.0.12.1 route-policy med export
[R2-bgp]quit
在r1查看路由表如下
注:這里只是演示怎么修改,上面也能看出,修改完不一定是最優的路徑,所以,你在公司里面一定要根據實際情況。