創作內容

1 GP

BGP 筆記

作者:達文西│2017-09-26 00:11:56│巴幣:2│人氣:1314
回顧一下:
IGP:RIP, EIGRP, OSPF, IS-IS(用於大型ISP,LS協議類似於OSPF,適用更大型網路)
EGP:EGP(已淘汰), BGP(DV協議,也叫路徑矢量協議 Path-Vector Routing)
!
BGP :有分二種,IBGP, EBGP,BGP是一個DV(或PV)協議,但是有別於純粹的DV協議

例如RIP通過鄰居傳遞最單純的路由訊息,然後二台或多台我們通過直接傳遞來完成路由的學習共享,RIP一台路由器只會用一張表,就是路由表RIB。

EIGRP則會生成三張表,在傳路由之前要先建立鄰接關係產生「鄰居表」,上來路由條目先加入「拓樸表」再對拓樸表做DUAL算法,再加入「路由表」。

BGP一樣會生成三張表,以及我們運行BGP所獲得的Metric值,而BGP的Metric值和一般IGP不同的是會有「多種選路參考屬性」,BGP確實也有Metric值,但只是影響BGP路由的其中一種參考屬性。BGP是一種純粹無類路由協議,EGP被淘汰因為他是有類路由協議。

BGP在OSI的劃分,和RIP一樣只是一種七層的應用層協議,對應的是端口號,是全班唯一使用TCP來做為傳輸層封裝的協議,使用於「TCP 179」端口號(可靠傳輸)。

透過窗口機制實現流控、序列號防亂序、確認號防丟包、校驗和防竄改、以及重傳機制
當我們TCP建立好三次握手之後,基於TCP的應用程序只能基於單播。也就是BGP發任何報文都是單播,我們在配BGP時,都需要手工定鄰居。

更新方式:當R在建立鄰居關係的時候,會傳一次完整路由,等拓樸收鏈之後就不在發更新,除非有路由變動,才會執行增量更新。不會使用周期更新。只發keep alive維持鄰接關係。

在一般IGP的keep alive有hello,會負責建鄰居和維持關居關係,但在BGP的周期keep alive報文只用在維持鄰居關係 [ 60s周期 keep alive, hold time 180s ],建鄰居另外使用open報文。

封裝的簡易載合
L2 IP TCP BGP FCS

BGP因為早期開發時經過多次改版生級,所以現今運行在Internet上有二大主流
BGPv4:針對IPv4
BGPv4 plus:針對非IPv4,像是IPv6或MPLS環境來做高級的網路需求

使用BGP是為了我們可以在一個跨多層網路,路由可達的情況下,也可以針對site和site之間去做動態的路由交換,不像IGP受限於TTL=1,必需要直連鄰居並建立關係之後才可以交換路由。
又或者在多條(Multihoming)可以通外網的ISP做動態選路,例如往國外IP走A的ISP,國內走B
提供可靠性和備緩與性能。

BGP 三表:
!
Neighbor table:存放和本路由器建立鄰居關係的路由器訊息
!
BGP table:本路由器收到路由更新時,不會直接加入路由表,會先加入BGP表,可以簡單理解為EIGRP的拓樸表,放置了所有鄰居通告來的所有路由訊息,並對這些路由訊息做算法計算,最優的路由條目,才會加到路由器
!
IP routing table:最終轉發報文的還是使用路由表中的路由條目


BGP Autonomous Systems
!
AS要和IANA單位申請,總共有0-65535號,分二段,公有(全球唯一)和私有(類似私有IP)
公有AS:0-64511
私有AS:64512-65535
!
利用AS來做路徑控制,每一跳都是一個AS,BGP通告的是整條路徑,能發給整個internet的所有AS,網路使用參考屬性 (attributes) 來做選路控制,


BGP Message Types 報文類型
!
Open:建鄰居用報文,裡面會挾帶一系列參數,二台路由器要保證參數匹配才能建立鄰居
includes hold time 180s and BGP router ID
. BGP router id 和ospf一樣,可自動選擇(狀態雙up且最大IP地址lo口
. 沒lo口就選IP地址最大的物理接口) 或 手工配一般建議手工配
包含字段:
1.版本號:1字節 [可以自動協商版本號自動向後兼容版本]
2.自己的AS號
3.hold time:2字節,預設180s,可設為0,這樣鄰居之間就不會發送keep alive消息了,也可以設置為3S,因為keep alive是hold time的1/3,即keep alive最小為1s
4.RID:BGP路由器的名字,自動選舉RID原則(同ospf)
4.1:loopback最大IP地址
4.2:物理接口上的最大IP地址
建議手工設置RID
注意:如果要做IGP與BGP路由同步,即BGP的同步功能打開則必煩確保ospf的RID和BGP的RID一致,否則會影響路由的正常傳遞,RFC建議BGP和IGP的RID保持一致

早期BGP同步是打開的,因為路由少,要求BGP重分發到IGP來同步,以保証可靠性
同步打開:IGP表必煩先有這條BGP路由才會使用和傳遞這條路由
現在則不能將BGP重發布進IGP,所以也不可能實現同步
要求所有的BGP路由器關閉同步,即使IGP沒有這條BGP路由,一樣可以通過BGP傳遞路由
在IOS 12.8T以後版本,BGP預設同步都是關閉的
no synchronization
!
Keep alive 60s 周期,維護鄰居關係用,最小值為1s
!
Update 增量更新,會挾帶掩碼和下一跳地址。會挾帶每條路由條目的所有BGP屬性,AD值不挾帶(本地有效)
!
Notification 報錯用 BGP連接出問題時,發現問題的路由器會使用這個報文,一般伴隨著報文的發送,BGP的連接也會終止,例如:AS指錯,就會生成這個報文

BGP 鄰居建立的狀態
正常情況只會從1~5的狀態執行,6為特殊情況。

1. idle(閒置狀態)
剛輸入nei 2.2.2.2 remote-as 200,這時BGP會檢查本地的路由表,看能不能和nei指定的地址建立一個TCP會議,如果有可用路由則進入connect狀態,一直停留在idle則表示目的不可達

本端停留在idle的原因:RIB沒有去往該nei的路由條目,檢查IGP有沒有出現問題,在同AS內,IGP必需收鏈狀態。

2.connect(連接狀態)
sh ip bgp 一般看不到
當BGP路由器找到了彼此的路由, 並且建立完畢三次握手,狀態為connect
和鄰居完成TCP三次握手之後才進行open sent

3.open sent(發送消息)
向鄰居發送open包攜帶自身參數,並等鄰居確認(等待時間5S)
這時本地BGP路由器狀態就是open sent

4.open confirm(確認消息)
鄰居成功了接收到了open,並且成功的參數對比發現收到的open是合法報文,就會回復一個open的確認,當收到確認後就是open confirm狀態,會話建立成功,開始傳路由。往established

當雙方鄰居對收到參數做匹配,發現不一致匹配失敗,或是非法報文,這時就不會回復給鄰居open確認報文,並且鄰居狀態就進入acitve

5.established(建立鄰居,開始傳路由)
能看到BGP鄰居建立,首次的路由傳遞已完成,只有二台BGP雙方的路由器BGP鄰接關係進入established,才算是鄰接關係建立完畢。

6.active(錯誤連接狀態)
能看到5s後,沒有收到鄰居open包的確認
本端停留在active的原因:
1.nei地址不對(或單向nei)

2.沒有配nei指令

3.沒有到我發送open包的源地址的路由
EX:R1和R2建BGP,R1有R2的更新源路由,但是R2沒有R1的更新源路由(例如R1用了lo 0當更新源update-source lo 0),導致R1可以發到R2,開始建立三次握手(這邊三次握手可以通是因為,發包時可能帶的是實體接口的出口IP地址,所以物理網段可通),但是R2並沒有R1的lo 0的路由,R2收到open時就會認為R1是非法並丟棄。

4.AS號不對(參數不匹配,丟棄)

active這個狀態是可變的,有可能active一段時間之後又進入idle,但是有路由發了又不通,再次進入active。考試時就二點--1:檢查IGP路由、2:neighbor有沒有正確。

如果BGP路由器之前是active狀態,並且收到如下日誌notification報文,意思如下:
%BGP-3-NOTIFICATION: sent to neighbor 172.31.1.3 2/2 (peer in wrong AS) 2 bytes FDE 6
本路由器發送給鄰居172.31.1.3一個notification,告知他,他指的AS錯了
代表172.31.1.3在指你nei的時候把你AS寫錯了

%BGP-3-NOTIFICATION: received from neighbor 172.31.1.1 2/2 (peer in wrong AS) 2 byes FDE6
代表通鄰居收到notifiaction,告知你你指鄰居,指錯了AS,改一下AS即可

如果是路由不通,就收不到notification報文




sh ip bgp summary //看BGP鄰居狀態,並且看收到多少條BGP路由

Neighbor :鄰居對你本地BGP路由器的更新源地址
V:版本
AS:鄰居所屬的AS
MsgRcvd:收到多少個報文
MsgSent:發送給他們多少個報文
State/PfxRcd:通過這些鄰居收到的路由條目的數量
!
deub ip bgp events // 查看bgp鄰居建立的過程
sh ip bgp nei //可以看到TCP會話建立端口號、BGP鄰居狀態

TCP 的會話是雙向的,所以要阻止BGP鄰居建立,必煩雙向拒絕179端口
access-list 100 deny tcp any eq bgp any
access-list 100 deny tcp any any eq bgp
access-list 100 permit ip any any




BGP Commands
!
router bgp autonomous-system
啓用bgp進程,路由器上只能啓用一個bgp進程
!
neighbor {ip-address | peer-group-name} remote-as autonomous-system
使用單播建鄰居,二端都要互指
!
neighbor {ip-address | peer-group-name} shutdown
關閉某一鄰居的BGP對等體會談,類似刪NO掉鄰居,但是又保留指令
!
neighbor {ip-address | peer-group-name} update-source interface-type interface-number
修改BGP路由器建鄰居的的更新源地址,一台路由器關於他的BGP鄰居,當BGP建鄰居後會給鄰居發送三層封裝報文,所有三層報文都會包含源IP地址,發給鄰居的源IP地址就會改變成對該「單一鄰居」所發送的出接口IP地址,對其他的鄰居並不一定會更新源地址。
一般情況建立IBGP對等體的時候使用loopback口來建立的話,建議使用。
ex: neighbor 3.3.3.3 update-source loopback 0
!
neighbor {ip-address | peer-group-name} ebgp-multihop [ttl]
當我們建立EBGP鄰居關係的時候默任發送報文的TTL值只有1,希望用LOOPBACK口來建鄰居時,一定要修改EBGP發送報文的TTL值。TTL值可加,可不加,不加的話預設=255
!
neighbor {ip-address | peer-group-name} next-hop-self
BGP 下一跳路由的傳遞和IGP不一樣,一台路由器本地生成的BGP路由,本地關於該路由的下一跳為四個0,再把路由傳給IBGP對等體,下一跳變成我對他們的更新源,然後這些路由條目,只要再傳給其他的EBGP對等體,又會改變,這些路由由他們的EBGP對等體傳遞給他們的IBGP對等體的時候就不再改變。
如果一台BGP路由不是始發的,該路由器把路由傳遞給IBGP對等體的時候,下一跳不會發生任何改變,而傳遞給EBGP鄰居的時候,是一定會改變成對鄰居的更新源地址,可能會導致,一台內部的IGBP路由器,收到了IBGP鄰居傳遞來的路由,由於下一跳不可達,而這條路由沒有資格被放入路由表(路由黑洞),為了解決下一跳地址的問題,一般會在能收到EBGP路由的IBGP路由器,對下一跳做next-hop-self,做完之後,該路由器把路由傳遞給IBGP對等體的時候,會強制把路由器的下一跳地址,改成他對這個鄰居的更新源地址。
ex:neighbor 3.3.3.3 update next-hop-self

修改間格時間:(不建議修改)
router bgp 100
times bgp 1 3 //keep palive,holdtime,單位為S

一般
針對有EBGP鄰居的IBGP鄰居使用
針對ipv4鄰居使用

如果ebgp是以vrf的方式建立的,預設會以vpnv4方式建鄰居
預設執行next-hop-self


BGP表的各標示信息
sh ip bgp 查看本地bgp表

第一列標
*:表示下一跳可達(不一定是直連)可加路由表

r:rib-failure(轉發信息庫失敗--RIB)
代表該路由,有資格被加入RIP,但是去往目的網段有更小AD值的路由存在,所以BGP不加表
打R不加路由表,但是只要是最優的>就會發給鄰居
sh ip bgp rib-failure 可以看

ia:ipv4里激活ipv6 產生 ia路由


第二列標
>:最優路徑,一個目的網路號BGP表可能有多條路由,只有最優才加RIB
BGP沒有load balance,必煩選擇出唯一最優路徑,如果一條BGP路由沒有打>沒有資格加入路由表,並且沒有資格傳給任何其他BGP對等體

導致BGP路由不優的原因

1.Synchronization當一台路由器收到了IBGP對等體傳遞的IBGP路由的時候,會優先判斷該路由是否能通過某種IGP學到,如果能則同步實現,如果不能則同步失敗,該路由將無資格打>標示不會被IBGP傳遞出去,解決方案-將該功能關閉 no synchronization

2.Next-Hop Unreachable,沒有往下一跳的可達路由,通在會在IBGP內傳BGP路由時產生,因為,IBGP在,解決方案next-hop-self
(文章往上找neighbor {ip-address | peer-group-name} next-hop-self)

s:suppressed 被匯總過的

d:damped 被惩罰的,可以在接口上啓用對BGP路由的惩罰,路由過於頻繁的up / down 需不停更新,通過惩罰值標記,不向外通告這條路由,定時器到期再通告

h:history歷史的,路由已失效,但還沒從表中刪除

第三列標
i 這條路由是通過IBGP學的或本地宣告的

空 這條是通過EBGP學來的

第四列標:學到的目的網路號

第五列標:下一跳(從哪裡起源的,自己起源的會帶0.0.0.0)

第六列標:起源方式
i:通過network起源的,優先級最高

e:EGP 優先級次高,通過EGP協議學來的(早期的EGP協議,現在不使用了)

?:incomplete 重發布進來的,優先級最低

前面的 i 是第3列標i,後面的i是第六列標 i

一條bgp路由有 r> 的情況:無法加路由表,該路由為最優的,但由於存在AD值更低的路由,所以無法加表,通常為通過BGP和IGP學到相同路由,但是此時可能IGP的AD低更低,所以BGP不加表,但是此時,BGP會因為有 > 的關係,所以一樣通告給鄰居,只是本地不加入RIB而已,一般在滿足同步規則的IBGP比較多這情況,因為AD值200
sh ip bgp rip-failure 可以查看看



Clearing the BGP Session

由於BGP只支特增量更新,當我們在已經建立鄰居的路由做策略之後,例如R1對R2建立的鄰接關係,R1傳給R2一條bgp路由,而這時我們學得R2學到對該網段的BGP路由有多條,但是目前的BGP路由不好,想要R2優選R1做為下一跳路由去網該目的網段,此時我們需要在R2做router-map來抓取對應的路由條目,並改寫BGP屬性。

但是你這樣直接改,並不會生效,因為BGP的發送更新機制,只支持觸發更新v2,R2收到R1的更新之後,不會對BGP表中或者路由表中的路由條目來執行定義策略,只能針對我們通過鄰居收到BGP條目或發送的路由條目的當下,例如R1在給R2發的時候,R2在接收方向收的時候做一個相應的策略,然後再加RIB,R2不可能先加RIB之後再去做相應的策略

所以router-map設定好之後R1必需再對R2發一份更新,才會產生效果
實現方式:
1:重啓路由器(不建議,網路會斷,客戶會叫,公司會爆,你會發瘋。)
2:清BGP的進程
!
2.1:Hard rest
直接斷開TCP的三握交流,這種重建TCP的過程叫硬重制,鄰居要重新建立
  clear ip bgp [neighbor-address]
  clear ip bgp * 全部重置
  回復速度慢,平常不要用硬重置,特別是在骨幹網,用了絕對出事,但考試時很好用。

2.2:Soft reset
出向軟重置:本地路由器的BGP路由會重發一份給鄰居
clear ip bgp {* | neighbor-address} [soft out]
入向軟重置:路由器會主重發一份報文,告訴鄰居,請他們把他們的BGP路由重發一遍。
clear ip bgp {* | neighbor-address} [soft in]
雙向軟重置:如果做了策略路由可以使用雙向軟重置重拿路由條目即可,入出向都執行
clear ip bgp {* | neighbor-address} [soft]
 
2.3:Route refresh(扯蛋,沒屁用,無視)


Inbound Soft Reset

neighbor [ip-address] soft-reconfiguration inbound

假設R1和R2建立了鄰接關係是不是會開始傳路由,那此時,R2給R1傳了一條路由,我們在R1看不到,可能原因無非二種
1:R2沒發給R1
2:R2發了R1因某種因素而不接收

可以在R2使用如下sh,可以看到R2從本地BGP表中哪些路由條目發出現,非常好用。
show ip bgp neighbors 12.1.1.1 advertised-routes


一樣可以反向查接收什麼路由
show ip bgp neighbors 12.1.1.2 received-routes

% Inbound soft reconfiguration not enabled on 12.1.1.2

回車發現報錯了,沒有對這個鄰居開啓soft reconfiguration
這是因為,當你把BGP路由發給一個鄰居之後,我會針對這個鄰居,使用一定的buffer,來緩存我們發送的路由信息,方便排錯,但是只會花自己的內存來保存我發給鄰居的路由,而鄰居給自己發了路由之後,我不會內存來保存鄰居發來的路由,所以你要sh recived的時候,沒法看到對應的資料,解決方式
neighbor [ip-address] soft-reconfiguration inbound //即可開啟inbound路由的內存buffer



ICMP Redirect.(ICMP 重定向)

當一台路由器通過一個接口接收到了一個報文,該路由器查表發現需要轉發這個報文需要通過通過接收報文的接口再次轉發出去。

執行動作
1.將該報文轉發走
2.給上一跳(給你報文的路由器)發送者返送一個ICMP的重定向,告訴他,今天有去往那個網段的封包,請直接給我下一跳地址

BGP Neighbor Authentication
Router(config-router)#
neighbor {ip-address | peer-group-name} password string

BGP 只支持密文認證(MD5)BGP在做認證時比IGP優化很多,例如我已建好鄰居,這時我需要設置加密功能,鄰居關係不會像IGP一樣直接down掉,而是很平穩的讓你兩台bgp都建好鄰居才生效,原因是你配認證時,需先把鄰居都先建好,如果你這時建認證把鄰居down了,那網路會直接斷掉,為了防止這個情況發生,所以BGP當你啓用認證,只在一端啓用,而沒有在對端啓用,預設情況是不生效的,只有兩邊都做好認證時才會生效,而當你兩邊都做好認證之後密錀又不匹配,才會失敗down掉鄰居。

R1
router bgp 1
neighbor 3.3.3.3 password cisco
!
R3
router bgp 1
neighbor 1.1.1.1 password cisco
!


Next Hop on a Multiaccess Network(BGP在MA網段的特例下一跳優化



環境說明,D把路由傳給C,下一跳=D,C傳給B,下一跳不變,B再傳給A,下一跳=B
控制層面:D>C>B>A、資料層面:A>B>C>D
當A有往AS 64600(D)的資料要轉發都會繞到B,這是不優化且浪費B資料的作法。

LAB


R1==預配
int lo0
ip add 1.1.1.1 255.255.255.0
no sh
int ser 1/1
ip add 12.1.1.1 255.255.255.0
no sh
int fa 0/1
ip add 134.1.1.1 255.255.255.0
no sh
!
router rip
version 2
no auto-summary
network 1.0.0.0
network 134.1.0.0(B類地址)
R2==預配
int lo0
ip add 2.2.2.2 255.255.255.0
no sh
int ser 1/0
ip add 12.1.1.2 255.255.255.0
no sh
R3==預配
int lo0
ip add 3.3.3.3 255.255.255.0
no sh
int fa0/1
ip add 134.1.1.3 255.255.255.0
no sh
!
router rip
version 2
no auto-summary
network 3.0.0.0
network 134.1.0.0
R4==預配
int lo0
ip add 4.4.4.4 255.255.255.0
no sh
int fa0/1
ip add 123.1.1.4 255.255.255.0
no sh
======================預配結束>BGP預配
--R2
router bgp 2
bgp router-id 2.2.2.2
neighbor 12.1.1.1 remote-as 1
!
--R1
router bgp 1
bgp router-id 1.1.1.1
neighbor 12.1.1.2 remote-as 2
neighbor 3.3.3.3 remote-as 1
neighbor 3.3.3.3 update-source loopback 0
neighbor 3.3.3.3 update next-hop-self
!
--R3
router bgp 1
bgp router-id 3.3.3.3
neighbor 1.1.1.1 remote-as 1
neighbor 1.1.1.1 update-source loopback 0
neighbor 134.1.1.4 remote-as 4
!
--R4
router bgp 4
bgp router-id 4.4.4.4
neighbor 134.1.1.3 remote-as 1
!
sh ip bgp summary

!
======================BGP預配結束>開始通告bgp路由
R2
network 2.2.2.0 mask 255.255.255.0
!(此時,R3將返回 ICMP Redirect。)
R4
show ip bgp

可以看到R4往R2的網段,不再先走R3了,而直接走R1
!
BGP在MA網段的下一跳特例
當R3收到2.2.2.0該路由之後,要轉發給R4,對R3而言該路由條目的下一跳的鄰居的接收路由條目的接口IP地址,跟該路由器上一跳接口IP地址為同IP子網段,基於BGP Seaker將一條BGP路由傳給同MA網段的下一跳EBGP鄰居時,R3為了避免次優路徑,R3在給R4發送路由條目更新的時候,就會主動將該路由條目的下一跳改寫為上一跳鄰居的發送路由接口的IP地址,請R4直接發給R1。
而這個下一跳的改變,不是基於 icmp 重定向的,而是由bgp協議控制層面的自動優化。
!
如果是使用IGP,必需要通過一個報文觸發讓我收到ICMP 重定向才能達到效果
!
來證實一下是怎麼運作的
debug ip bgp updates(但因為增量更新的關係,他收不到update報文)
所以在R3做 clear ip bgp * soft (軟重置,這命令會讓bgp的更新重新再發一次)

可以看到R3發給R4(134.1.1.4)的更新包,更新134.1.1.1下一跳路由去為2.2.2.0/24
!

關於BGP路由條目的下一跳地址

1. 如果一台路由器將本地路由通告進BGP進程,則對於這些被通告路由,該路由器本地BGP表中關於他們的下一跳都為0.0.0.0(表明該路由是本地始發的)
R2 sh ip bgp

直連和靜態都是本地路由IGP不算
我們在R2寫一條靜態和把RIP學來的3網段路由路由通告出來:
ip route 10.10.10.0 255.255.255.0 null 0
router bgp 2
network 10.10.10.0 mask 255.255.255.0
router bgp 1
network 3.3.3.0 mask 255.255.255.0
sh ip bgp

可以看到RIP學來的並不算本地路由,直連和靜態則算。

2. 如果一台路由器將通過IGP獲悉的路由通告進BGP進程,則這些路由在該路由器的BGP表中下一跳會繼承相應的IGP的下一跳地址。
我們在R1 sh ip route 可以看到他的下一跳是134.1.1.3,和BGP上圖的下一跳一樣。


3. 如果一台路由器將其本地通告的本地路由,傳遞給其任何BGP對等體,則會將該路由條目的下一跳改為本地對於這些鄰居的更新源

4. 如果一台路由器通過EBGP學習到了一條路由,則該路由在傳遞給IBGP對等體時,默任情況下一跳不變(除非做Next-Hop-Self)

5. 如果一台路由器將任何BGP路由通告給其EBGP對等體,則路由的下一跳會變成該路由器對於該鄰居的BGP更新源地址,則AS path也會更新成通告者的AS


BGP auto-summary

先來總結一下DV協議的auto summary
ripv1:預設開啓,無法關閉。
ripv2:預設開啟,可關閉,會匯總鄰居傳遞過來的路由
eigrp:預設開啓,可關閉,不會匯總鄰居傳遞過來的路由

但是我們可以從上面的LAB實驗發現,我們都是全啟用auto-summary,但是我們傳遞的依舊是明細路由。來測試一下。
R2
router bgp 2
auto-summary
clear ip bgp * soft
!
R1
sh ip bgp

發現這些路由開啓auto-summary,但是並沒有被匯總

在早期的ios版本中預設情況,一台路由器的bgp進程的auto-summary是開啓的,在後期新版本的ios中auto-summary是自動關閉的。 (和自動同步一樣)

無論在路由器上是否開啟auto-summary都不會影響BGP精確通告的BGP路由,該特性只有二個作用。

1:當在路由器上使用匯總通告的時候,如果該路由器路由表中擁有匯總條目內的明細由的時候,並且該路由器開啓了自動匯總,則該路由器會將明細路由抑制,並且將其在其主類網路邊界匯總後發送給鄰居。

LAB一下,使用樓上的拓樸預配
R2
network 2.0.0.0
sh ip bgp neighbors 12.1.1.1 advertised-routes
這時還看不到2.0.0.0的主類路由,因為我的路由表上還沒有這條主類路由

!
把2的網段做個自動匯總,就可以看到匯總路由,並且2.2.2.0/24的明細路由被抑制
router bgp 2
auto-summary



2:當在路由器的BGP進程中重分發外部路由時,如果開啟了auto-summary,那麼該路由器會將這些路由以主類的型式發送給鄰居,還會將重分發進入的路由的下一跳地址寫為0.0.0.0,即便這些路由本身協帶Metric,在bgp表中也不會繼承。

LAB一下,使用樓上的拓樸預配
R1
router bgp 1
auto-summary
redistribute rip
預設情況你把外部的協議,重分發到bgp,這些IGP,所協帶的metric值,會直接的被繼承的BGP路由的MED屬性之中。
!
sh ip bgp

!
path 打的不在是 i 而是 ? 是incomplete(不完整)代表該路由是透過重分發的方式進入
則下一跳變0.0.0.0代表由我起源發出,並不帶metric。
!
我們可以看到路由和我們之前看到的有所不同,我們再no auto-summary看原本


第1、2項的匯總條件:發送接口的IP地址,和路由的前綴不在同一個主類地址段中

結論:auto-summary和synchronization不建議開始(新版IOS預設關閉)
在考試中不管如何,先做3條命令,除非有需求
R2
router bgp 2
no synchronization
no auto-summary
bgp router-id 2.2.2.2


BGP 手工聚合(又叫手工匯總、手工summary)



方式1:手工靜態聚合,先回顧一個概念:當我把eigrp手工匯總發送之後,本地路由器會形成一個指向null 0接口的匯總路由,為了防環和路由黑洞,那bgp能不能基於這個原理來實現匯總路由通告?

首先bgp使用network語句,宣告路由前提條件,路由表中有這條匯總路由,所以要想個辦法讓路由器在路由表中擁有該匯總路由,我們可以手工指個靜態匯總。
缺點:當我們做手工匯總時,必須要寫一條指向null 0的靜態聚合路由,如果此路要聚合的網段不是連續性的,可能會產生路由黑洞,這個方式不建議使用

R2
int loopback 8 192.168.8.2 255.255.255.0
int loopback 9 192.168.9.2 255.255.255.0
int loopback 10 192.168.10.2 255.255.255.0
int loopback 11 192.168.11.2 255.255.255.0

R2
ip route 192.168.8.0 255.255.252.0 null 0
sh ip route

R2再從bgp通告出來
router bgp 2
network 192.168.8.0 mask 255.255.252.0
sh ip bgp neighbors 12.1.1.1 advertised-routes

現在路由有發給R1

結論:在本地創建指向null 0接口的取合路由,並在該路由器的BGP進程中使用network語句通告聚合由,而不需要通告任何一條明細路由,不建議使用,會產生路由黑洞,LAB用。

方式2最常使用的方案,使用aggregate-address

R2
router bgp 2
network 192.168.8.0 mask 255.255.255.0
network 192.168.9.0 mask 255.255.255.0
network 192.168.10.0 mask 255.255.255.0
network 192.168.11.0 mask 255.255.255.0
!
aggregate-address 192.168.8.0 255.255.252.0 (產生匯總)
!

!
sh ip bgp


此時可以發現,同時擁有明細和匯總路由,我們看一下R1到底收到啥
sh ip bgp neighbors 12.1.1.2 received-routes


BGP路由聚合原則,只要聚合命令配置了,該路由器如果在BGP表中擁有該聚合內的明細路由,則會直接在本地BGP表中生成該路聚合路由,並且再通告給其他鄰居。

IGP的會先準備發路之前再看情況匯總,BGP則先匯總再考慮發路由給鄰居。
IGP發現有路由需要匯總,就會匯總範圍內的明細路由抑制,BGP預設則全都發。

但是BGP這樣匯總就沒意義了,無法達到減少路由條目的需求,所以要把明細抑制。
!
no aggregate-address 192.168.8.0 255.255.252.0
!
aggregate-address 192.168.8.0 255.255.252.0 summary-only
當我們使用了summary-only路由器會先查看本地bgp表,看是否有路由需要被聚合,如果有把路由聚合之後,再把本地BGP中該路由條目範圍內的明細路由抑制。
!
再show ip bgp neighbors 12.1.1.1 advertised-routes,可以只看到只剩匯總路由,明細抑制。
!
再看一下sh ip bgp


看到打s = suppressed 被抑制(S時不能放入RIB,也不會通告給鄰居)


總結aggregate-address參數

advertise-map
概念其實和unsuppress-map差不多,被放行的路由將會被以下一跳0.0.0.0的方式,通告給其他路由器。sample設定如下,但是GNS3測試後並沒有被改成下一跳全0。
R5
int loopback 0
ip add 150.1.5.5 255.255.0.0
int serial 0/0
ip add 155.1.0.5 255.255.255.0
encapsulation frame-relay
frame-relay map ip 155.1.0.1 501 broadcast
frame-relay map ip 155.1.0.2 502 broadcast
frame-relay map ip 155.1.0.3 503 broadcast
!
router bgp 5
network 15.1.5.0 mask 255.255.255.0
aggregate-address 150.1.0.0 255.255.248.0 as-set summary-only advertise-map AD
neighbor 155.1.0.1 remote-as 1
neighbor 155.1.0.2 remote-as 2
neighbor 155.1.0.3 remote-as 3
!
ip prefix-list R3_LOOPBACK seq 5 permit 150.1.3.0/24
!
route-map AD dney 10
match ip address prefix-list R3_LOOPBACK
route-map AD permit 20
!
R3
clear ip bgp * soft
sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 150.1.0.0/24 155.1.0.5 0 0 5 {1,2} i
*> 150.1.3.0/24 0.0.0.0 0 32768 i
可以看到R3的150.1.3.0 沒有被summary-only 仰制,而放行
!
!
as-set
當使用了as-set時,在多條明細要聚合時,會在多條目中繼承某些屬性,而其中包含as path
一般用於要使用路由聚合,而聚合的路由器本身又不是這些路由的起源路由器的時候,為防止路由逆向傳遞回去,我們要讓聚合路由添加明細路由的相應屬性,就是要防止路由黑洞。

attribute-map

nlri

route-map

summary-only
當我們使用了summary-only路由器會先查看本地bgp表,看是否有路由需要被聚合,如果有把路由聚合之後,再把本地BGP中該路由條目範圍內的明細路由抑制。

suppress-map
抑制列表類似EIGRP的leak-map,不能夠單觸使用,需合併router-map,才能使用
leak-map是抓取的路由放行,suppres-map是抓取的路由抑制。

suppress-map
抑制列表LAB
R2
ip prefix-list 10 seq 10 permit 192.168.8.0/23 ge 24 le 24 (只通告10,11網段,8,9抑制)
route-map SUP permit 10
match ip address prefix-list 10(在這不要permit 20的null,不然會變permit any即全抑制)
route-map SUP per
router bgp 2
aggregate-address 192.168.8.0 255.255.252.0 supppress-map SUP
clear ip bgp * s
sh ip bgp neighbor 12.1.1.1 advertised-routes


我們也可以在R1入向方向做
aggregate-address 192.168.8.0 255.255.252.0 summary-only
sh ip bgp


補個拓樸

可以發現下一跳0.0.0.0並且as path 沒帶R2的AS號,代表該路由是由R1原生的,但是因為你本地生成所以會傳給你所有的源居,也就是R3和R2都會收到,但是R2會因為收到路由時,as patch 沒有挾帶AS 2,R2收到路由會繼續回傳回去(往R2右後方,其他的BGP路由器)因為R2不知道該路由是始於他自己發出去的路由且有打>,下一跳指向R1
R2 sh ip bgp


如果此時R2的.8網段掛了,聚合路由依舊存在,其他BGP會收到該聚合網段,要是有往該目的封包要傳都會往R1丟,R1再丟回給R2,但是最後被R2丟包,產生路由黑洞。

所以我們在R1傳給R2的時候,只要帶著R2的as path,R2收到之後會直接丟棄(水平分割)
即可防止黑洞。
R1
aggregate-address 192.168.8.0 255.255.252.0 summary-only as-set


unsuppress-map
反抑制,就是不抑制,使用語法如下(和SUPPRESS不一樣):
這些被抓到本身被抑制掉的路由將被放行
route-map UNSUPPRESS permit 10
match ip add prefix-list 10.0.0.0
!
router bgp 2
network 10.0.0.0 mask 255.255.0.0
network 10.1.0.0 mask 255.255.0.0
aggregate-address 10.0.0.0 255.252.0.0 summary-only (明細在匯總時被仰制了)
neighbor 155.1.146.4 unsuppress-map UNSUPPRESS (把明細放出來)
!
10.0.0.0被放行出來,10.1.0.0被抑制,並且有一個10.0.0.0 255.252.0.0的匯總路由
!
再一個LAB_R4
!
router bgp 4
int loopback 8
ip add 172.16.8.4 255.255.255.0
int loopback 9
  ip add 172.16.9.4 255.255.255.0
int loopback 10
  ip add 172.16.10.4 255.255.255.0
int loopback 11
  ip add 172.16.11.4 255.255.255.0
network 172.168.8.0 mask 255.255.255.0
network 172.168.9.0 mask 255.255.255.0
network 172.168.10.0 mask 255.255.255.0
network 172.168.11.0 mask 255.255.255.0
!
aggregate-adress 172.168.8.0 255.255.252.0 summary-only
exit
ip prefix-list 30 permit 172.16.10.0/23 ge 24 le 24(放行10 / 11網段)
router-map USP permit 10
match ip address prefix-list 30
exit(不用permit 20空值,不然其他全被放行了)
!
router bgp 4
neighbor 14.1.1.1 unsuppress-map USP
sh ip bgp neighbors- 14.1.1.1 advertised-routes



BGP network Command

Router(config-router)#
network network-number [mask network-mask] [route-map map-tag]

通告原則:不是把直連接口宣告進BGP進程,而是把RIB中已有的路由條目做為BGP路由通告出去。也就是說你下network命令之前,一定要先看RIB,如果你network錯的語句,你路由是通告不出來的。

精確通告:帶mask的通告,通告的前綴和掩碼和RIB看到的一樣
network 172.16.10.0 mask 255.255.255.0

匯總通告(主類通告):不帶mask的通告,被通告的網段,必需是一個主類地址段,而預設情況,只要路由器有這條主類路由就會被通告出來,如果沒有,即使有子網路由,一樣一條也通告不出來。
network 192.168.1.0

如果你使用192.168.1.0 mask 255.255.255.0的主類精確通告,預設情況你mask寫不寫都顯示不出來。就算是sh run 也看不到



BGP Path Attribues

Well-known versus optional 有二種
Well-known公認屬性
由官方標準化定義,所有廠商都要可以支持
optional 可選屬性
由某廠商私自定義的,只有該廠商設備可以支持

Mandatory versus discretionary
Mandatory強制屬性
無論是哪間廠商的設備,通告BGP路由強制要挾帶的屬性
discretionary自由屬性
可選擇性的屬性,可以挾帶也可以不挾帶

Transitive versus nontransitive
Transitive
可傳遞屬性:有些屬性可以在一個AS內傳遞,有些只能在隔跳的直連AS內傳遞
有些可在整個internet傳遞
nontransitive
不可傳遞屬性:有些屬性只能在路由器本地有意義,類似AD值

Partial 部份屬性
當路由器收到其他廠家的BGP的可傳遞屬性,但是又不支持的時候,會把該屬性標示Partial

拓樸


As path *
* 公認強制屬性:所有廠商都可支持,且發路由更新時必需挾帶。

本地產生與傳遞給IBGP對等體路由時不會挾帶

只有傳遞給EBGP對等體路由時會在AS字段中添加本地路由器所在的AS號

Next-hop *
* 公認強制屬性:所有廠商都可支持,且發路由更新時必需挾帶。

本地生成的本地路由下一跳0.0.0.0

傳遞給任何鄰居的時候,下一跳變成本地對等體的更新源

如果通告的是IGP學習到的路由,下一跳直接就是該IGP路由的下一跳

收到一條BGP路由,把該路由傳遞給IBGP對等體,下一跳不變,除非使用next-hop-self,如果把該路由傳遞給EBGP對等體,下一跳改變成本地對該鄰居的更新源地址

在MA網段中,會有特例下一跳優化

有時候選路並非因為設了Next-hop-self 而是因為其他台沒使用Next-hop-self 導致路由不可達。

Origin *
* 公認強制屬性:所有廠商都可支持,且發路由更新時必需挾帶。

起源屬性,標示打 i ? e 的都是,描述一條BGP路由是用何種方式進入BGP域

可透過某些方式來修改以控制選路,因為該屬性的不同會影響路由條目的優先權
i > e > ?
i = 使用network
e = EGP(已淘汰的協議)
? = 使用redistribute

修改方式
R2
ip prefix-list 10 permit 1.1.1.0/24
route-map O permit 10
match ip address preifx-list 10
set origin egp 1 (1=as)
!!!!!!!!!!!!!!!(如果要改? 用 set origin incomplete 1)
route-map O permit 20
!
router bgp 1
12.1.1.1 route-map O in
路由器收到BGP路由時會在入向做修改屬性 patch 會變e

!
使用route-map修改時,一定要加空語句(permit 20),並且用clear ip bgp * s 重置觸發更新



Route Selection Decision Process

BGP預設不支持負載均衡,且要能夠參與選路的路由必需有資格被優化,標示 > 的路由

1. Prefer highest weight (local to router)

(Cisco only)(Weight)
比較路由條目的權重

(Cisco only)
1. 傳遞範圍:本地有效 不可傳遞類似AD值

2. 預設值:有二種預設值
本地netwrok方式通告出來:對於一條下一跳為0.0.0.0的BGP路由,預設值=32768
IGP通告:由鄰居通告的,無論IBGP或EBGP或是由IGP學習並本地network出來的
下一跳不為0.0.0.0,預設值=0 取值範圍 0-65535

3. 比大還比小:比大

4. 選路排序:1(不建議使用該屬性,太寫死,又是第一條比較值)

5. 在入站方向改,出站改則無效,因為不會傳遞
R5
router bgp 1
neighbor 1.1.1.1 weight 1
clear ip bgp * s
sh  ip bgp

!
neighbor 1.1.1.1 weight 1 從該鄰居收到的任何BGP路由的Weight屬性值置為1後加表。
使用這個方式範圍太大了,建議用route-map縮小範圍如下:
!
!R5
先清掉原指令(這個no 只清weight功能,不會把建鄰居的bgp neighbor清掉)
no neighbor 1.1.1.1 weight 1
clear ip bgp * s
!
access-list 100 permit ip host 4.4.4.0 host 255.255.255.0
route-map W permit 10
match ip address 100
set weight 1
exit
route-map W permit 20 防deny any,不然剩下的會全被deny
!
neighbor 1.1.1.1 route-map W in
clear ip bgp * s
!
2. Prefer highest local preference (logbal within AS) (常用)

(local preference)
比較這些路由條目的本地優先級,一般在IBGP之間修改。
一般在IBGP當你有二台CE路由器,要控制從哪一台CE出去你的PE時用

1. 傳遞範圍:只能在一個AS內傳遞,也就是只在IBGP內傳遞,EBGP可以挾帶該屬性,但是只能是預設值

2. 預設值:100(無論是IBGP或EBGP傳來的)

3. 比大還比小:比大,越大越優

4. 選路排序:2

5. 在入站方向改,出站改則無效,因為不會傳遞

當你一個AS有多台出口路由器,這時只要多台出口路由器和外部AS建立EBGP鄰接關係,這些路由器會向AS內傳遞相同的路由條目,這時我們去往外網有多個出口,這時調整Local preference的目的讓邊界路由器告訴內網路由器當你需要往外網發包時,優先走哪一個當出口。一般情況就在邊界路由器上做選路(下一跳)使用。

不能在R4做因為和R1或R2是EBGP,值為固定100(只能在AS內傳遞)
只能在R1、R2入或出向做,或在R5入向,簡單來說不能再EBGP的out方向做

在R1做會比較好,在園區網中,如果要調整Local Preference,一定要在出口的邊界路由器的入向改比較好,例如在此拓樸中,我們並沒有在這個AS內部的二台邊界路由器上沒有建IBGP鄰接關係,所以沒差,如果建了IBGP鄰接關係,如果是R2的比較優,那你R1跟本不會把該路由傳給R5,所以你要在入向就做,才能影響到R1自己的路由表,才會傳給R5。

我們先在R1調整預設值(local-preference)
router bgp 1
bgp default local-preference 101
clear ip bgp * s
!
sh ip bgp


Local preference 在思科路由器常常不明原因顯示不出來,估且當IOS的BUG,但是沒顯示不代表沒有值
可以用sh ip bgp 4.4.4.0 255.255.255.0 查明細看出來,這是公認屬性,必需挾帶的。


!
(4.4.4.0和8.8.8.0都在R4的looopback接口)
可以發現4.4.4.0和8.8.8.0都是101


這是因為使用bgp default local-preference 101的影響範圍太大
1. 本地產生的路由 (Network / Redistribute)
2. EBGP路由
3. IBGP路由  對IBGP 學來的路由不起作用
4. Aggragate路由
!
縮小範圍來影響
!
ip prefix-list 10 seq 10 permit 4.4.4.0/24
route-map LP permit 10
match ip address prefix-list 10
set local-preference 101
exit
route-map LP permit 20
exit
!
neighbor 14.1.1.4 route-map LP in
clear ip bgp * s
sh ip bgp

!

看一下8.8.8.0的沒有被影響
!

看一下R5的路由,去往4.4.4.0的優選R1,因為LocPrf
!
3. Prefer route originated bye the local router (next hop = 0.0.0.0)

1. 傳遞範圍:本地有效

2. 預設值:

3. 比大還比小:優選0.0.0.0的本地源生路由

4. 選路排序:3(這條選路原則非常少遇到基本不考慮。考試例外)

一般情況通過鄰居收到一條路由,本地並不會再產生一條路由,因為水平分割原則,給鄰居發一條路由之後,本地正常情況是收不到該路由。

但是總有特例如下:

R1有一個loopback 0口的位址是 1.1.1.0/24 ,而在R2的bgp表中,該路由的下一跳是 1.1.1.1。
此時R2本地做一條靜態路由指向那個網段,並且指向null 0接口,這個null 0接口對R2本地而言算是一條本地路由,因為以直連顯示,這時R2再把該路由通告出來,就會是0.0.0.0,這種情況下,即本地生成路由,又通過鄰居學到該路,優選本地

如上概念圖
!
用原拓樸做一下LAB
!
R5
ip route 10.10.10.0 255.255.255.0 null 0
!
R1
int lo 10
ip address 10.10.10.1 255.255.255.0
no sh
router bgp 1
network 10.10.10.0 mask 255.255.255.0
!
R5
network 10.10.10.0 mask 255.255.255.0
sh ip bgp

看到往10.10.10.0 的網段,目前優選下一跳0.0.0.0
但是由於0.0.0.0這一條的權重會因為Weight是32768,所以第一步就被其他規則選掉了,為了證實,需要把這個屬性改掉
!
R5
neighbor 1.1.1.1 weight 32768
sh ip bgp

!
為了證照我們再改第5步比較的起源屬性,看是被第3項的next-hop影響,還是第5項,第4項因為同as所以無法拿來做證實
!R5
router bgp 1
no network 10.10.10.0 mask 255.255.255.0
redistribue static
sh ip bgp

!
可以看到0.0.0.0這條起源屬性是?號,在第五項比較是較差的路由,但是依舊選0.0.0.0這條為下一跳路由
所以可以證實被第三項選路優先影響。
!
4. Prefer shotest AS path.

比最短路的 AS path

1. 傳遞範圍:全網際網路BGP

2. 預設值:起啟AS=0跳,有發給其他EBGP就會增加1跳

3. 比大還比小:優選最短跳數AS,比的是AS跳數,不是比AS數字大小

4. 選路排序:4

使該規則並沒有特別限定,在哪改都可以,依你的需求,但是常規裡面,我們在如下拓樸


R3 sh ip bgp

可以看到AS的跳數為2,as 1和 as 4
流量需先經過AS1,再到AS4,數據從左往右看,控制從右往左看
!
我們再R4做一些AS path的跳數新增,出站調用
access-list 10 permit 4.4.4.0
route-map AP permit 10
match ip address 10
set as-path prepend 5 6 7 8
(prepend參數會在傳之前就新增,最後再加原始的4)
exit
route-map AP permit 20
neighbor 24.1.1.2 route-map AP out
clear ip bgp * s
!R2
sh ip bgp

可以看到路徑變 4 5 6 7 8 ,這是因為prepend 參數的關係
!
我們再改在R2入站調用
access-list 10 permit 4.4.40
route-map AP permit 10
match ip address 10
set as-path prepend 5 6 7 8
exit
route-map AP permit 20
exit
router bgp 1
neighbor 24.1.1.4 route-map AP in
clear ip bgp * s

R2在收之前鄰居已經先添加AS 4,進入R2的又被入向添加 5 6 7 8
最後AS path就變成 5 6 7 8 4
!
從R5確認是否會影響選路
R5 sh ip bgp

可以看到去往4.4.4.0的網段,本來應該優選 2.2.2.2,但是變成1.1.1.1,像是去8.8.8.0網段就是未調整應該優選R2。

!R2,調控自身的AS跳數
route-map AP permit 10
no set as-path prepend 5 6 7 8
set as-path prepend 4 4 4 4 4
exit
router bgp 1
neighbor 24.1.1.4 route-map AP in
clear ip bgp * s
!R2 sh ip bgp
利用增加自己所在的AS來增加跳數,控制metric值,跳數越低越好

!

!
allowas-in 特性 (一般用於CE 對PE 指的,設在CE)
R5
router bgp 1
neighbor 35.1.1.3 allowas-in
allowas-in使用該命令,如果通過鄰居收到本地AS號的路由,就可以接受,相當於把水平分割功能關掉(防環機制)
!
該功能先關掉
no neighbor 35.1.1.3 allowas-in
!
maxas-limit 特性
router bgp 1
bgp maxas-limit 10
限制所接收的bgp路由中,可接受的as-path最大跳數10,如果超過10則真接丟棄
一般用來限制EBGP路由的傳遞
!
!
bestpath as-path ignore 特性
R4
router bgp 4
bgp bestpath as-path ignore
當你收到bgp路由,在比較選路的時候,我們不比較as-path屬性,相當於跳過這個選路規則
該命令是隱藏命令,用?號叫不出來,必需手工輸入ex: bgp bestpath ?
!
over-write
一般用於PE 對 CE 在PE設
當要發往對端65002 AS但你又挾帶65001 65002的路徑AS會被水平分割特性拒收
使用over-write後,發往65002時會把65001 65002 變成65001 65001 ,就可以正常發送。


5. Prefer lowest origin code (IGP < EGP < incomplete)

1. 傳遞範圍:全網際網路BGP

2. 預設值:預設透過network=i,從EGP重分發=e,從其他協議重分發=?

3. 比大還比小:比較最小起源 IGP(i) < EGP(e) < incomplet(?)

4. 選路排序:5

R4
ip prefix-list 10 permit 4.4.4.0/24
route-map O permit 10
match ip address prefix-list 10
set origin incomplete
exit
route-map O permit 20
exit
router bgp 4
neighbor 24.1.1.2 route-map O out
clear ip bgp * s
!
R2 sh ip bgp
可以看到 列標符變成?

!

這時看R5可以看到他不再優選R2,原因就是起源屬性改變。

6. Prefer lowest MED (exchanged between autonomous systems) (常用)

1. 傳遞範圍:只能在直連的AS「一跳」內傳遞」

不在本地有效,也不能在一個AS內傳遞,只能夠在直連的AS鄰居內傳遞,如果那個AS和我直連,那我可以設置的MED屬性,當我把路由發到他們AS內,路由在他們AS之間傳遞時MED屬性可以保持,然後當這些路由器又把路由轉發到其他AS的時候,MED屬性就會回到預設值。

一般在EBGP傳遞時出方向修改,當你有二台PE路由器,要控制從哪一台PE進入你的CE時用

2. 預設值:Cisco = 0,IETF = MAX

3. 比大還比小:比較最小MED

4. 選路排序:5

一般會在R4做控制,但如果今天R4不能動,我們在R1用MED來控制R4也可以
R1
access-list 100 permit ip host 5.5.5.0 host 255.255.255.0
!
route-map MED permit 10
match ip address 100
set metric 100
exit
route-map MED permit 20
exit
!
neighbor 14.1.1.4 route-map MED out
clear ip bgp * s
!
R5 用記錄ping,用R參數

!
可以看到路徑ping

發包:先發給25.1.1.5 R2 > 通過R2的 24.1.1.2接口發走 > 到達 4.4.4.4
回包:24.1.1.4 R4連R2的出接口 > 到達R2 再由R2連接R5的接口 25.1.1.2 > 返回 5.5.5.5 R5
!
再看一下R4的 sh ip bgp 可以看到R4受MED參數影響(Metric)

!
med missing-as-worst 特性
!
router bgp 4
bgp bestpath med missing-as-worst
clear ip bgp * s
!
使用這個命令後,預設情況,如果沒設MED值,那該路由的MED值會改寫為MAX(和IETF協議給的BGP公定值MED就能匹配)這是為了和其他不同廠商的設備在同一個BGP AS內控制MED值使用的特性。
!
alway-compare-med 特性
R4
router bgp 4
bgp alway-compare-med
!
來自不同AS鄰居,但是去往相同路由的MED值,路由器是不會比較的,要同AS鄰居才可
!
使用這個命令後,不管從哪個AS鄰居學來的路由,只要挾帶MED都會比較。
!
如果你要下放預設路由,並且修改MED值有如下二種,第二種不能改。
!
router bgp 65001
bgp default-information !!要配合重分發
router bgp 65001
redis static !!要包含到默任靜態
!
!
router bgp 65001
neighbot 123.1.1.1 default-information !!!使用這種方式會無法修改MED值
!
7. Prefer EBGP path over IBGP path

EBGP 優於 IBGP
(在聯邦 EBGP 和 IBGP 中首選聯邦 EBGP 路由)
這個比較規模優於AD值,哪怕你EBGP的AD改成220,那一樣優選EBGP
正常情況這條規則也不會使用。
!
8. Prefer the path through the closest IGP neighbor

選擇離我最近的IBGP對等體
(優選到 BGP next_hop 最近的鄰居)
類似cost值,看metric。
sh ip bgp 4.4.4.0 255.255.255.0 可以看到
其實就是看IGP的metric值。
!
9. max-path

執行等價負載均衡(如果有多條來自相同相鄰 AS 的路由並通過 Maximumpaths 使多條路徑可用,則將所有開銷相同的路由放入本地路由表)
!
10. Prefer oldest route for EBGP paths

選擇最老的EBGP路由(通常不使用)
在 IBGP 環境中,這條規則不適用
注意:在配置了 bgp bestpath compare-routerid 命令後,直接跳到下一條選路原則
!
11. Prefer the path with the lowest neighbor BGP router ID

比最小的路由器ID

12. Route Reflector 路由反射器

優選 cluster_list 最短的路由
- 長度越小,越優先
- 僅在存在反射器的環境下,才會進行 Cluster-list 長度的比較,RR 在執行路由反射
動作時會將自己的 Cluster ID 添加在 Cluster-list 中.
!
13. Prefer the path with the lowest neighbor IP address

比較最小的更新源接口IP地址
鄰居地址是指 BGP 進程下面使用 neighbor 命令指定的地址
!

IBGP拓展

IBGP傳遞原則
一台路由器收到IBGP路由,沒有辦法把他傳給其他IGP對等體,可能會導致我們要在內網傳IBGP路由,所有路由器之間都要建立全互連的連接關係,配置多,路由器開銷大。

有二種方式可以打破IBGP的傳遞原則
1:路由反射器 Route Reflector
2:聯邦 Confederation

路由反射器 Route Reflector

Cluster IBGP

RR Server 伺服器端會和全部的Client端建立IBGP鄰接關係

RR收到一條EBGP路由,會將其轉發給所有其他EBGP對等體以及所有IBGP對等體(包含Client 以Non-Client)
RR收到一條IBGP路由(該路由是Client傳遞的),RR會將其轉發給所有其他的RR以及所有IBGP的Non-Client以及所有的EBGP對等體
no bgp client-to-client reflection禁止客户端到客户端的路由反射

RR收到一條IBGP路由(該路由是Non-Client傳遞的),RR會將其轉發給所有的Client以及所有EBGP對等體,但是不會傳遞給任何其他的Non-Client
!
RRC Client 終端之間則不會建立任何關係,只會和伺服端建立
!

同上拓樸,我們把R4和R2的BGP斷掉,並使用反射器讓R2 RRC能從R5的RR收到BGP路由
R4
neighbor 24.1.1.2 shutdown
!
R2
neighbor 24.1.1.4 shutdown
sh ip bgp

這時R2收不到R4的路由,原因是因為R5收到R1傳來的IBGP的路由依照BGP水平分割原則,不會再傳給IBGP內鄰居,所以R5不會再傳給R2,所以我們來做路由反射器
!
R5(RR)
router bgp 1
neighbor 2.2.2.2 route-reflector-client
只要在R5輸了這個命令之後,他本身就成了一台RR,並且R2就變成Client,剛設置好時鄰接關係會重置一次,鄰居只要建立完畢,RR和RRC的關係就完成,開始可以傳路由。
!
R2 sh ip bgp

R2 有收到R5的路由了,並且任何屬性都沒有改變
!
聯邦 Confederation

聯邦的基本概念就是把單一個大AS,劃分成多個私有的AS,把IBGP的鄰居利用聯邦的方式,調整成EBGP,傳遞路由就正常,這樣可以省很多Public AS Number。有點類似劃分192.168那種私有網段的做法。


!
R1
router bgp 65001 (定義一個私有AS)
no synchronization
no auto-summary
bgp router-id 1.1.1.1
!
bgp confederation identifier 1
!向外部宣告我是主AS1,當外部鄰居要nei指的時候要用1,而不是用他的私有65001,相當於對外而言,R1是 AS 1
!
neighbor 14.1.1.4 remote-as 4
neighbor 5.5.5.5 remote-as 65001 update-source loopback 0 (內部使用私有AS號)
neighbor 5.5.5.5 remote-as 65001 next-hop-self
!
!
R5
router bgp 65001
no auto-summary
no synchronization
bgp router-id 5.5.5.5
!
bgp confederation identifier 1
!向外部宣告我是主AS1,當外部鄰居要nei指的時候要用1,而不是用他的私有65001,相當於對外而言,R5是 AS 1
!
neighbor 1.1.1.1 remote-as 65001
neighbor 1.1.1.1 update-source loopback 0
!
neighbor 2.2.2.2 remote-as 65002(和R2建立私有的EBGP鄰居關係)
neighbor 2.2.2.2 update-source loopback 0
!
neighbor 2.2.2.2 ebgp-multihop
!使用lo 0來建立EBGP,會變非直連,TTL超過1,所以要加這條,改成255
!
bgp confederation peers 65002
!由於我們是聯邦內的EBGP,所以除了調整TTL以外,還要聲明鄰居關係的特殊性
!
!
R2
router bgp 65002
no auto-summary
no synchronization
bgp router-id 2.2.2.2
!
bgp conederation identifier 1
neighbor 5.5.5.5 remote-as 65001
neighbor 5.5.5.5 update-source loopback 0
neighbor 5.5.5.5 ebgp-multihop
bgp confederation peers 65001
!
!
R1 sh ip bgp summary

可以看到R1和R5已經建好了
!
R2 sh ip bgp summary

看到R2和R5也建好了
!
R2 sh ip bgp

可以看到AS-Path的參數,變成(65001),代路路由條目先過 as 4 > as (65001)
這個帶有(65xxx)的小()在選路的時候,不用考慮,不會影響As-path的跳數,不參加選路
!
R2 sh ip bgp 4.4.4.0 255.255.255.0

可以看到R2對4.4.4.0這條路由的參數變成confed-external,和普通的(R1)external並不一樣
多了一句 confed (Confederation的縮寫)是聯邦內的意思和一般ebgp是有區別
!
傳遞方式:
傳統方式R4傳一條給R1>
R1再從EBGP鄰居傳給IBGP鄰居R5>
R5由於和R2是聯邦內的EBGP鄰居,所以還會再傳給R2
!
怖署聯邦 Confederation
1:在聯邦內啓BGP的時候,使用的是私有AS號,聯紀內建鄰居也是指向私有AS號,外部路由器和聯邦內建鄰居指的是主AS號

2:每台聯邦內路由器都要聲明自己所屬的主AS,EX:bgp confederation identifier 1

3:在聯邦內路由器要建立聯邦內EBGP鄰接關係之前一定要保證,這個路由器雙方都要指bgp confederation peers 65xxx 描述我們的鄰接關係是聯邦內的EBGP,就是要指定本地和哪個私有AS做鄰居。
!
兩者功能可混用,例如一個環境,藍色為AS10,一個橫排的路由器連接法
R1(AS1)-R2-R3-R4-R5-R6-R7-R8(AS8)
在這情況下,用聯邦或反射器單一都是很麻煩的設定,AS10每間格二台就要設一次,可以改成
R1(AS1)-R2-R3(RR)-R4-R5-R6(RR)-R7-R8(AS8)
就會好設很多,藍色一個聯邦R3當RR,紅色一個聯邦R6當RR
!

BGP Path Selection

BGP轉發表中通常包含到達每一個網路的多條路徑

BGP 並不設計用於負載均衡
-路徑選擇基於策略
-路徑選擇不基於帶寬

BGP在路徑選舉過程中排除多條路徑,只留一條最佳路徑

最佳路徑提交到路由表中,將其同其他路由選擇協議提供的到同一網路的路徑進行AD值比較

AD最小的路由來源會被加入到路由表中


Community 屬性(團體屬性)

一般用於和MPLS VPN配合,不是全部廠商都可以支持的屬性
Cisco 預設BGP路由,不挾帶該屬性

公認:基本廠商設備BGP都可以支持
自由:可選挾帶
不可傳遞:預設只能傳遞一跳(一個直連的鄰居),再往下一跳時屬性清空

分成二種型式:
1. Standard(本章節介紹)
2. Extended(在MPLS VPN 細講)

Standard 標準型

Community一般不可傳遞,某些情況下我們會希望他伴隨著路由條目一直不停的傳下去
所以我們在發送時會在每一站都帶send-Community指令,強制他一直帶著該屬性到目的

標準型有三個值:(限制BGP的AS傳遞範圍使用)

No-Advertise
當路由器收到了帶有該Community: no-advertise的BGP路由的時候,路由無法傳遞給任何其他的BGP對等體。

No-Export
當路由器收到了帶有該Community: no-export的BGP路由的時候,路由無法傳遞給其他的AS,只能在AS內傳遞,如果該AS起了聯邦,則該路由還可以在聯邦內私有AS之間傳遞

Local-AS
當路由器收到了帶有該Community: local-as屬性的BGP路由的時候,路由只能在接收者所在的AS內傳遞,無論該AS是一個主AS還是一個聯邦內私有AS,都只能在一個AS內。

拓樸


Community: No-advertise

當路由器收到了帶有該Community: no-advertise的BGP路由的時候,路由無法傳遞給任何其他的BGP對等體。

R4
ip prefix-list 20 permit 4.4.4.0/24
!
route-map COM permit 10
match ip address prefix-list 20
set community no-advertise
exit
route-map COM permit 20
!
router bgp 4
neighbor 14.1.1.1 router-map COM out
!
neighbor 14.1.1.1 send-community standard
要使用send-community指令,該屬性才會挾在路由條目上面,預設不啓用的

如果使用both則,standard和extended都一併挾帶
!
R4 do sh run | se router 看一下

可以發現,你加不加standard都不顯示,原因為預設就只發送標準屬性
!
R1 sh ip bgp 4.4.4.0 255.255.255.0

可以看到Community: no-advertise
當有no-advertise時,就是告訴路由器,不要通告給其他鄰居,這樣R5就看不到這條路由
R5 sh ip bgp

!

Community: No-Export

當路由器收到了帶有該Community: no-export的BGP路由的時候,路由無法傳遞給其他的AS,只能在AS內傳遞,如果該AS起了聯邦,則該路由還可以在聯邦內私有AS之間傳遞

R4
ip prefix-list 20 permit 4.4.4.0/24
!
route-map COM permit 10
match ip address prefix-list 20
set community no-export
exit
route-map COM permit 20
!
router bgp 4
neighbor 14.1.1.1 router-map COM out
!
neighbor 14.1.1.1 send-community standard
!
!
R1 sh ip bgp 4.4.4.0/24

當帶了該屬性,這條路目將不會離開他所在的AS
!
R5 sh ip bgp 有看到這條路由,我們再sh ip bgp 4.4.4.0/24

發現這個Community: No-Export的屬性消失了
原因就是Community的不傳遞性,但是我們希望他也挾帶
R1 補個挾帶的指令
router bgp 65001
neighbor 5.5.5.5 send-community
clear ip bgp * s
!
R5 sh ip bgp 4.4.4.0/24

R5收到正常了,這時R2也有該路由
!
我們到不同的AS的R3看一下 sh ip bgp

看到R3只能收到8的路由,4的收不到
!
Local-AS

當路由器收到了帶有該Community: local-as屬性的BGP路由的時候,路由只能在接收者所在的AS內傳遞,無論該AS是一個主AS還是一個聯邦內私有AS

R4
ip prefix-list 20 permit 4.4.4.0/24
!
route-map COM permit 10
match ip address prefix-list 20
set community local-as
exit
route-map COM permit 20
!
router bgp 4
neighbor 14.1.1.1 router-map COM out
!
neighbor 14.1.1.1 send-community standard
!
R1 sh ip bgp 4.4.4.0/24

!
此時可以發現R5有收到路由,但是 R3並沒有

!
!
擴展 XX:YY tag
由於上列三個參數都無法精確的控制範圍,所以我們可以用TAG的方式去做精確控制
在Cisco IOS 12.0版本之後,可以使用三種格式配置BGP的community

三種格式:十進制、十六進制、XX:YY。預設IOS使用十進制格式
XX:YY格式,分號前面是AS號碼,後面是2字節數字。
使用 ip bgp new-format global命令配置
注意:雖然可用三種表示方式,但他們仍然是32位的值,EX:
set community 30:20
set community 0x1E0014
set community 1966100
這三個格式的值在BGP表都用30:20顯示

LAB拓樸

!
目標:R4傳遞給R1路由,希望要上TAG,基於這個TAG,R5利用這個TAG把這條路由過濾掉
!
R4 先把路由打上TAG
ip prefix-list 20 permit 4.4.4.0/24
!
route-map COM permit 10
match ip address prefix-list 20
set community 50:50
exit
route-map COM permit 20
!
router bgp 4
neighbor 14.1.1.1 router-map COM out
!
neighbor 14.1.1.1 send-community standard
!
R1 sh ip bgp

可以看到R1收到後自動轉化成十進制:3276850
!
再從R5去做TAG過濾
ip community-list standard DENY permit 50:50
!
route-map COM dney 10
match community DENY
exit
route-map COM permit 20
!
router bgp 65001
neighbor 1.1.1.1 route-map COM in
!
R5收到路由後,被route-map物件DENY,match的community-list裡面的TAG會被deny
也就是說50:50 的TAG的路由會被丟棄。R5 sh ip bgp

這種過濾方式,會針對所有R1有打TAG 50:50 都刪除。可以多條。
!
!

指令集

router bgp 1
bgp router-id 3.3.3.3
neighbor 1.1.1.1 remote-as 1
neighbor 1.1.1.1 update-source loopback 0
neighbor 134.1.1.4 remote-as 4

neighbor {ip-address | peer-group-name} shutdown
關閉某一鄰居的BGP對等體會談,類似刪NO掉鄰居,但是又保留指令

修改keep palive間格時間:(不建議修改)
router bgp 100
times bgp 1 3 //keep palive,holdtime,單位為S

no synchronization 關閉同步規則

sh ip bgp 查BGP路由表
sh ip bgp nei 可以看到TCP會話建立端口號
sh ip bgp summary 看BGP鄰居狀態,並且看收到多少條BGP路由
sh ip bgp 4.4.4.0 255.255.255.0 看往4.4.4.0的metric值,尾巴有寫best的優選


deub ip bgp events // 查看bgp鄰居建立的過程

debug ip bgp updates
看更新報文但因增量更新的關係,他收不到update報文要clear bgp * s 重置一下bgp鄰居關係

TCP 的會話是雙向的,所以要阻止BGP鄰居建立,必煩雙向拒絕179端口
access-list 100 deny tcp any eq bgp any
access-list 100 deny tcp any any eq bgp
access-list 100 permit ip any any


LAB 章節

BGP Update Source Mismatch

Objective:
Configure a BGP peering relationship between R1 and R3. R1 should peer with R3's Ethernet interface, while R3 should peer with R1's Serial interface
!

!

當使用這個架構R1發給R3,open報文的時候,會因為更新源非法,而被丟棄,R3給R1亦然。
R1的neighbor地址必需是R3的更新源,R3指鄰居亦然。
解法:調整更新源,為保證穩定,在IBGP我們使用loopback 0 互指鄰居

IBGP Synchronization

Objective
Configure BGP per the diagram to obtain connectivity from AS 1 to R4 and R5's loopback interfaces, R4 and R5 should have static default routes pointing towards R1 and R2 respectively. BGP synchronization should be enabled on R1 and R2
!

!
R4使用lop 0建EBGP鄰居,當R4把路由傳給R1,R1又傳給R2,R2會因為沒有去往R4的lo 0網段的路由而產生不可達。

解決方案,R1,R2使用next-hop-self

當R1收到EBGP路由,並有IBGP鄰居的時候,該路由器必需指定他所有IBGP鄰居next-hop-self,強制其他IBGP要發往該目的網段時的下一跳改成R1的更新源地址。

R2如果沒有關閉同步,那就必需保證有從OSPF從到去往R1的路由,不然就要關閉同步,不然去往R4的路由不會打>並且不會通告給鄰居(R5)

反向亦然也要設R2對R1的next-hop-self和設定同步

R3如果有開啓同步,就會有去往R4、R5的路由,那就沒問題,但是如果同步特性關掉
R3就會有路由黑洞,可在兩邊從BGP重分發到OSPF的方式解決
!
!
Transiting Non-BGP Seaking Devices - Redistriubtion

Objective: Configure the network so that hosts on LVAN 5 can reach hosts on VLAN 43. R3 will not participate in BGP routing.  Redistribute BGP into IGP in AS 2 to accomplish this
!

!
R3 沒有執行BGP,重分發BGP到IGP的AS2裡面,R1和R4之間EBGP,R1和R2之間IBGP,R2和R5之間EBGP
!
R1指R2要next-hop-self,R2把同步給關了,R2指R1要next-hopt-self,並在R1關同步,但此時R3沒有BGP,所以R3沒有去往R4、5的路由。
!
解決方式
1:AS2物理全互連
2:AS2的IBGP鄰居的全互連,建議使用peer-group,使用對等體組
3:tunnel,在R1和R2建一個L3 tunnel鄰居,使用loop互建,這時R3有,R1、2的loop路由即可通記得更新源要改成tunnel口
4:選擇性的把BGP路由重分發到IGP,R1、2兩台都要重分發。
!
!
BGP Next-Hop Precessing - Manual Modification
!
Objective: Configure manual next-hop modification via a route-map where necessary to gain reachability between R3's Ethernet segment and VLAN 5
!
通過route直接修改下一跳來保證路由可以通訊
!

!
R1對R3修改,R4對R5修改,強制修改下一跳位址(通過route-map)
!
R1
route-map NH permit 10
set ip next-hop 155.x.13.1 (原本是用self,現在用指派的方式改)
exit
!在這邊不用設permit 20的空語句,原因是因為route-map並沒有設置match語句
!沒設match代表所有的路由都被匹配,就不用空語句permit 20
!
router bgp 65001
neighbor 3.3.3.3 route-map NH out
clear ip bgp * s
!sh ip bgp 即可看到
!
!
next-hop-unchanged 特性
R1
router bgp 65001
neighobr 14.1.1.4 next-hop-unchanged
!
預設情況把一條路由從IGP學到之後發給EBGP鄰居時,會把下一跳改成我對他的更新源,有時候當我們傳給EBGP鄰居的時候,不改變下一跳,即可使用next-hop-unchanged
使用條件:只能對EBGP鄰居使用該命令,且需要保證下一跳鄰居和本地之間的連接需要啓用EBGP多跳。所以建議用loopback口建鄰居( neighbor x.x.x.x ebgp-multihop)
!
!
單獨重分發指定的直連路由到IGP
!
R1
route-map L permit 10
match int serial 0/0/0
exit
router eigrp 1
redistribute connected route-map L
!
也可以單獨把該接口Network出來,然後設為被動接口,用於解決IGP無此路由,導致IBGP鄰居下一跳不可達
!
!
BGP 正則表達式 Regular Expressions (不考,但是BGP骨幹的重點控制方式)
!
Voip 使用的比較多,可以去找Voice通配符
或其他官網文件
https://www.cisco.com/c/en/us/td/docs/ios/12_2/termserv/configuration/guide/ftersv_c/tcfaapre.html
!
!
BGP Outbund route Filtering (ORF) 出向路由過濾
!
預設的BGPv4只能支持address-family ipv4 單播
實現原理:當路由器通過其對等體接收路由時如果該路由器使用前綴列表過濾所接收的路由,預設情況該鄰居不會知道路由的傳遞被拒絕,該路由當拓樸變更或軟清進程的時候,依舊會給本路由發送這些被過濾的路由從而浪費鄰居的CPU資源,為了優化需要在路由器雙方啓用該特性。過濾方會通告orf報文給傳遞方,告知其路由過濾情況,發送方得知情況後無論何時都不會再將被過濾路由發送給過濾方
!
1:啓用address-family ipv4
2:activate 該地址族中激活鄰居
3:在路由過濾方定義前綴列表指令路由發送放入向過濾路由
4:在過濾方指令發送方做ORF,並指定send
5:在路由發送方指令過濾做ORF,並指定Recive
PS:部署ORF之前鄰接關係已建立的話則一定要重置(硬重置)
!
參考:http://stishsun.blogspot.tw/2009/08/bgp-orf-out-bound-filter.html
!
在BGP裡常會有許多inbound policy放在BGP neighbor上,用來過濾或apply相關的屬性
可以使用out bound filter (OBF)透過BGP的溝通將本機的inbound policy告訴peer
這樣一來原本發送端會將所有的prefix全部丟給接收端的行為就會變化成在發送端會先套用對方的inbound policy後在送出

這樣一來可以減少網路傳送的流量,尤其是在internet的環境,每一次update都有幾十萬筆的route,可以透過這個方式減少route update的 bandwidth
ORF的type有許多種,最直接的就是NLRI(1) NLRI也就是個別的route (NLRI:Network Layer Reachability information),base on prefix來過濾
另外還有使用 standard community(2), extended community(3) and prefix-list
ORF type編號從1-256,1-127是IANA所assign,128以後是vender specific !!

action type:
action: add delete or delete all
match : permit / deny
scope : exact or refine
NLRI : prefix
When : immediate or defer
!
!
參考:http://haolun.blog.51cto.com/173913/992755
!
在R1與R4之間配置BGP ORF,使R1不能廣播155.1.5.0/24到R4

!
【基本配置】

1:
interface FastEthernet0/0
ip address 155.1.146.1 255.255.255.0
interface Serial0/0
ip address 155.1.13.1 255.255.255.0
clock rate 2000000
router eigrp 2
network 155.1.13.1 0.0.0.0
no auto-summary
!
router bgp 2
no synchronization
bgp log-neighbor-changes
neighbor 155.1.13.3 remote-as 2
neighbor 155.1.13.3 next-hop-self
neighbor 155.1.23.2 remote-as 2
neighbor 155.1.23.2 next-hop-self
neighbor 155.1.146.4 remote-as 3
no auto-summary

R2:
interface Serial0/0
ip address 155.1.23.2 255.255.255.0
clock rate 2000000
interface Serial0/1
ip address 155.1.0.2 255.255.255.0
encapsulation frame-relay
clock rate 2000000
frame-relay map ip 155.1.0.5 205 broadcast
router eigrp 2
network 155.1.23.2 0.0.0.0
auto-summary
!
router bgp 2
no synchronization
bgp log-neighbor-changes
neighbor 155.1.0.5 remote-as 1
neighbor 155.1.13.1 remote-as 2
neighbor 155.1.13.1 next-hop-self
neighbor 155.1.23.3 remote-as 2
neighbor 155.1.23.3 next-hop-self


R3:(注意R3不用配置next-hop-self,因为它不不是邊界路由器)
interface Loopback0
ip address 155.1.37.3 255.255.255.0
interface Serial0/0
ip address 155.1.13.3 255.255.255.0
clock rate 2000000
interface Serial0/1
ip address 155.1.23.3 255.255.255.0
clock rate 2000000
router eigrp 2
network 155.1.13.3 0.0.0.0
network 155.1.23.3 0.0.0.0
auto-summary
!
router bgp 2
no synchronization
bgp log-neighbor-changes
network 155.1.37.0 mask 255.255.255.0
neighbor 155.1.13.1 remote-as 2
neighbor 155.1.23.2 remote-as 2
no auto-summary
R4:
interface Loopback0
ip address 204.12.1.4 255.255.255.0
!
interface FastEthernet0/0
ip address 155.1.146.4 255.255.255.0
router bgp 3
no synchronization
bgp log-neighbor-changes
network 204.12.1.0
neighbor 155.1.146.1 remote-as 2
no auto-summary
R5:
interface Loopback0
ip address 155.1.5.5 255.255.255.0
interface Serial0/0
ip address 155.1.0.5 255.255.255.0
encapsulation frame-relay
clock rate 2000000
frame-relay map ip 155.1.0.2 502 broadcast
router bgp 1
no synchronization
bgp log-neighbor-changes
network 155.1.5.0 mask 255.255.255.0
neighbor 155.1.0.2 remote-as 2
no auto-summary
!
【實驗配置】
R4#show ip bgp
BGP table version is 4, local router ID is 204.12.1.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 155.1.5.0/24 155.1.146.1 0 2 1 i
*> 155.1.37.0/24 155.1.146.1 0 2 i
*> 204.12.1.0 0.0.0.0 0 32768 i

【實驗配置】

注意下面配置中標紅部分是不需要輸入的,是系統在配置完成地址家庭ipv4後自動加入的

R1:
router bgp 2
address-family ipv4(啓用家族地址)
neighbor 155.1.13.3 activate(啓用ORF)
neighbor 155.1.23.2 activate
neighbor 155.1.146.4 activate
neighbor 155.1.146.4 capability orf prefix-list receive(做過濾清單接收)

R4:
router bgp 3
address-family ipv4
neighbor 155.1.146.1 activate
neighbor 155.1.146.1 capability orf prefix-list send(做過濾清單發送)
neighbor 155.1.146.1 prefix-list PERMIT_OTHER in
exit-address-family
!
ip prefix-list
PERMIT_OTHER
permit
155.1.37.0/24

【實驗驗證】

R1#clear ip bgp *
R1#show ip bgp
BGP table version is 8, local router ID is 155.1.146.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i155.1.5.0/24 155.1.23.2 0 100 0 1 i
*>i155.1.37.0/24 155.1.13.3 0 100 0 i
*> 204.12.1.0 155.1.146.4 0 0 3 i
R4#show ip bgp
BGP table version is 3, local router ID is 204.12.1.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 155.1.37.0/24 155.1.146.1 0 2 i
*> 204.12.1.0 0.0.0.0 0 32768 i

R4#clear ip bgp *
R4#ping 155.1.5.5 source 204.12.1.4

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 155.1.5.5, timeout is 2 seconds:
Packet sent with a source address of 204.12.1.4
.....
Success rate is 0 percent (0/5)
R5#show ip bgp
BGP table version is 6, local router ID is 155.1.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 155.1.5.0/24 0.0.0.0 0 32768 i
*> 155.1.37.0/24 155.1.0.2 0 2 i
*> 204.12.1.0 155.1.0.2 0 2 3 i
!
!

抓路由的高級工具

標準ACL、擴展ACL、前綴列表
分發列表:只能使用標準ACL以及前綴 來抓路由
Route-Map:3種都可以使用


Peer-Group

當我們要建立full mesh的IBGP鄰接關係的時候使用Peer-Group,能夠減少路由器的配置與開銷,例如我們有10個鄰居,那我們就要建10個ibgp的鄰接關係。
!
當你用一般方式建鄰居時,每一個鄰居都要緩存一份並吃你CPU資源,用Peer-Group,則這一堆鄰居只吃一份虛模版的資源。
!
例如:
Router bgp 1
Neighbor 2.2.2.2 remote-as 1
Neighbor 2.2.2.2 update-source loopback 0
Neighbor 2.2.2.2 next-hop-self
一個鄰居最少三條指令,10個要30條,其他每台都要30條,累死你
!
但是我們跟全部鄰居建鄰居,這三條後綴語句都一樣。
所以我們用Peer-Group建模版
R1
Router bgp 1
Neighbor IBGPTEST peer-group
Neighbor IBGPTEST remote-as1
Neighbor IBGPTEST update-source loopback 0
Neighbor IBGPTEST next-hop-self
Neighbor 2.2.2.2 peer-group IBGP
Neighbor 3.3.3.3 peer-group IBGP
Neighbor 4.4.4.4 peer-group IBGP
Neighbor 5.5.5.5 peer-group IBGP
Neighbor 6.6.6.6 peer-group IBGP
Neighbor 7.7.7.7 peer-group IBGP
!
R2
Router bgp 1
Neighbor IBGPTEST peer-group
Neighbor IBGPTEST remote-as1
Neighbor IBGPTEST update-source loopback 0
Neighbor IBGPTEST next-hop-self
Neighbor 1.1.1.1 peer-group IBGP
Neighbor 3.3.3.3 peer-group IBGP
Neighbor 4.4.4.4 peer-group IBGP
Neighbor 5.5.5.5 peer-group IBGP
Neighbor 6.6.6.6 peer-group IBGP
Neighbor 7.7.7.7 peer-group IBGP
以此類推


BGP 注入默任路由

!
ip route 0.0.0.0 0.0.0.0 null 0
router bgp 12
network 0.0.0.0
!
ip route 0.0.0.0 0.0.0.0 null 0
router bgp 12
default-information originate
使用這個注入時要先存在全0路由在RIB
!
BGP中default-information origin命令的配置與network(BGP)命令的配置類似。但是,default-information origin命令需要顯式重新分配路由0.0.0.0。網絡命令僅要求內部網關協議(IGP)路由表中存在路由0.0.0.0。因此,首選網絡命令。
https://community.cisco.com/t5/routing/bgp-default-information-originate/td-p/772779
!
router bgp 12
neighbor x.x.x.x default-originate
show ip bgp nei x.x.x.x advertised-routes !!好像會看不到, clear 看不確定
!
router bgp 12
neighbor x.x.x.x default-originate route-map xx ##_加入條件路由
##注意使用route-map時,必須用prefix來匹配路由才行,ACL不行
只針對某鄰居下放默任


backdoor 特性

在接受路由條目的路由器運行
router bgp 3
network 172.16.1.0 mask 255.255.255.0 backdoor
這樣這台路由器收到172.16.1.0路由條目時將會把這條路由置為AD值200的IBGP
讓同路由條目的IGP可以浮出來


負載均衡
!
router bgp 1
maximum-path 2 ##_對ebgp做負載均衡
!
!
router bgp 1
maximum-paths ibgp 2 ##_對ibgp做負載均衡,早期的IOS只能ebgp不能ibgp
!
路徑選路前八項必需相同才能loadbalance
!

dampening
!
一種處罰機制,針對接口是否頻繁抖動,如果頻繁就會仰制該路由
1:惩罰值:預設為0,當偵測到一次增加1000,每次1000惩罰值
2:開始仰制:預設2000,當惩罰值到2000就開始仰制
3:半衰期:隨時間降惩罰值 預設15分鐘,每15分鐘減半惩罰值
4:重新啓用:預設750,當開始仰制的路由惩罰值降到750以上即可重新啓用
5:最大仰制時間:預設60分鐘,防止惩罰一輩子,所以有個上限仰制60分鐘後一樣可以重啓
!
R1 conf t
router bgp 1
bgp dampening
或維調
bgp dampening 15 750 2000 60
15(半衰期)
750(重新啓用)
2000(開始仰制)
60(最大仰制時間)
!
R1 sh ip bgp
可以看到路由帶h開頭,代表有抖動
sh ip bgp 172.16.1.0
可以看到dampinfor值
被仰制時路由會帶d字頭
IGP的話則在接口下配
!

Maximrm-Prefix
!
本命令用來限制路由器最多只能讓鄰居接收多少條路由,如果超過則斷開鄰居關連
!
neighbor 1.1.1.1 maximum-prefix 10 ##超過10條永久斷開BGP鄰居,要手工解
neighbor 1.1.1.1 maximum-prefix 10 80 ##如果80%,>8條告警,>10條斷開,這個80預設是75
neighbor 1.1.1.1 maximum-prefix 10 80 warning-only ##只告警不斷開
neighbor 1.1.1.1 maximum-prefix 10 80 restart 20
##_>8條告警 >10條斷開,20分鍾後重連,如果<10條就連接,>10就斷開,鄰居會up然後down
!
bgp maxas-limit {1-2000} ##限制路由器只接受as-path屬性最多幾個AS號
!
!

條件路由
!
neighbor 1.1.1.1 advertise-map AAA exist-map BBB
當route-map BBB裡面匹配的路由存在BGP表中時
則向鄰居1.1.1.1 通告route-map AAA裡面匹配的路由
(這邊指是存在於BGP表中的)
!
neighbor 1.1.1.1 advertise-map AAA non-exist-map CCC
當route-map CCC裡面匹配的bgp路由不存在的話向鄰居1.1.1.1通告route-map AAA
裡面匹配的bgp路由
!
for example:有192路由才傳172路由出去
access-list 1 permit 172.16.1.0
route-map R172
match ip add 1
exit
!
access-list 2 permit 192.168.1.0
route-map R192
match ip add 2
exit
!
router bgp 2
neighbor 12.1.1.1 advertise-map R172 exist-map R192
!
sh ip bgp sum
!

改hold time的樣本:
neighbor 5.100.1.2 timers 20 60

Router(config-router)# neighbor [ip-address | peer-group-name] timers keepalive holdtime
Router(config-router)# timers bgp keepalive holdtime

https://www.cisco.com/c/en/us/td/docs/ios/12_2/ip/configuration/guide/fipr_c/1cfbgp.html#wp1002274

--------------------坑
router-id 一樣的話,在收到反射器過來的路由條目時會drop掉

Originator: 携带的是router-id ,如果与本router-id 一样,就相当于本地始发的,当路由器收到是originator-id是自己的话就把路由信息给丢弃来达到防止环路的目的。

单RR可能会存在单点故障的问题,因此从冗余性的角度,一个簇中可以拥有多台RR,Client与每一台RR都有物理连接并建立BGP对等体关系,在其中一台RR出现故障的情况下,Client仍然有替代连接。Client都不知道自己的Client身份,因此RR本身也可以成为别人的Client

由于AS_PATH属性在AS内部不会发生变化因此AS内防环才有水平分割的机制,而路由反射器实际上是放宽了水平分割原则,这个就会给环路带来一定的隐患,因此路由反射器需使用以下两个属性防止环路:ORIGINATOR_ID和CLUSTER_LIST.是路由反射器使用的可选非传递属性,用来防止环路。
=================================
nei xxx.xxx.xxx.xxx ebgp-multihop255
bgp從非直連建立的要加,做TTL控制

=================================
nei xxx.xxx.xxx.xxx soft-reconfigurationinbound
開啓動態軟更新,不用再手動clear ip bgp * soft

=================================
neighbor External3 fall-over bfd single-hop

neighbor ip-address fall-over bfd [multi-hop|single-hop] [check-control-plane-failure] [ strict-mode]

The BFD—BGP Multihop Client Support feature enables Border Gateway Protocol (BGP) to use multihop Bidirectional Forwarding Detection (BFD) support, which improves BGP convergence as BFD detection and failure times are faster than the Interior Gateway Protocol (IGP) convergence times in most of network topologies.
The BFD—BGP cBIT feature allows BGP to determine if BFD failure is dependent or independent of the Control Plane. This allows BGP greater flexibility in handling BFD down events.
In Cisco IOS XE Release 3.7S, support was added for the Cisco ASR 903 router.
The following commands were modified: neighbor fall-over and show ip bgp neighbors.

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

https://www.cisco.com/c/en/us/td/docs/ios/iproute_bgp/command/reference/irg_book/irg_bgp1.html

bgp fast-external-fallover
要配置邊界網關協議(BGP)路由進程以在用於到達這些對等端的鏈路斷開時立即重置外部BGP對等會話
請在路由器配置模式下使用

bgp fast-external-fallover命令。要禁用BGP快速外部失敗轉移,請使用此命令的no形式


bgp dmzlink-bw


bgp graceful-restart
To enable the Border Gateway Protocol (BGP) graceful restart capability globally for all BGP neighbors, use the bgp graceful-restart command in address family or in router configuration mode. To disable the BGP graceful restart capability globally for all BGP neighbors, use the no form of this command.

bgp graceful-restart [restart-time seconds | stalepath-time seconds] [all]

no bgp graceful-restart

Syntax Description
restart-time seconds

(Optional) Sets the maximum time period that the local router will wait for a graceful-restart-capable neighbor to return to normal operation after a restart event occurs. The default value for this argument is 120 seconds. The configurable range of values is from 1 to 3600 seconds.

stalepath-time seconds

(Optional) Sets the maximum time period that the local router will hold stale paths for a restarting peer. All stale paths are deleted after this timer expires. The default value for this argument is 360 seconds. The configurable range of values is from 1 to 3600 seconds

all

(Optional) Enables BGP graceful restart capability for all address family modes.


bgp scan-time
To configure scanning intervals of Border Gateway Protocol (BGP) routers for next hop validation or to decrease import processing time of Virtual Private Network version 4 (VPNv4) routing information, use the bgp scan-time command in address family or router configuration mode. To return the scanning interval of a router to its default scanning interval of 60 seconds, use the no form of this command.

bgp scan-time [import] scanner-interval

no bgp scan-time [import] scanner-interval

Syntax Description
import

(Optional) Configures import processing of VPNv4 unicast routing information from BGP routers into routing tables.

scanner-interval

The scanning interval of BGP routing information.

•Valid values are from 15 to 60 seconds. The default is 60 seconds.

Command Default
The default scanning interval is 60 seconds.

Command Modes
Address family configuration (config-router-af)
Router configuration (config-router)




bgp update-delay
To set the maximum initial delay period before a Border Gateway Protocol (BGP)-speaking networking device sends its first updates, use the bgp update-delay command in router configuration mode. To remove the bgp update-delay command from the configuration file and restore the initial delay to its default value, use the no form of this command.

bgp update-delay seconds

no bgp update-delay

Syntax Description
seconds

The maximum delay, in seconds, before a BGP-speaking networking device sends its updates. The range is from 0 to 3600. The default is 120 seconds.

Command Default
If this command is not configured, the default initial delay value is 120 seconds.
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3734914
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 1 篇留言

微笑刺客
沒想到在巴哈居然有BGP文章

04-17 18:35

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★lizngy 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:PBR_Redistri... 後一篇:組播 PIM Multi...

追蹤私訊切換新版閱覽

作品資料夾

Triangle360⭐喜歡動畫的你⭐
⭐點我頭像看4月新番快評👉https://home.gamer.com.tw/artwork.php?sn=5921394看更多我要大聲說昨天15:38


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】