31 – BGP 重定向拓樸
BGP防環機制
一. iBGP防環機制:iBGP的水平分割
在iBGP的鄰居關係當中,我從一個iBGP鄰居關係收到的路由將不會在傳給我任何一個iBGP的鄰居關係。
在iBGP的鄰居關係當中這個路由只能傳一跳。
二. eBGP防環機制:AS-PATH
AS-PATH意思是每經過一個AS,都會把他的AS號放在AS-PATH這個屬性裡面,然後偕帶路由表一起轉發。
每經過一個AS都會把相應的AS號加進路由當中一起傳遞,如果有一樣的AS號就不會在接收。
路由在傳遞的過程中會偕帶AS-PATH屬性,每經過一個AS他的AS號都會加在AS-PATH屬性裡面。
如果發現AS-PATH當中的AS號跟我本身的AS號一樣的話,將不接收這樣的路由,防止了eBGP路由傳遞的環路。
這兩種防環機制默認都是開啟的
一. BGP的Network作用:
二. IGP的Network 作用:
BGP鄰居驗證 17:30
一. BGP驗證使用MD5。
二. 配置KEY﹣密碼;路由器產生BGP消息和密碼(不發送)的摘要訊息(發送)或哈希(hash)。
三. 路由器產生並檢查TCP連接上發送的每個段(即BGP訊息)的MD5摘要。
四. 路由器對它接收的每個BGP訊息進行驗證。
清除BGP會話
一. 當BGP策略(如ACL或屬性)改變時,必須等待下一次發佈或接收路由訊息時,新的策略才會使用。這樣一個新的策略在網路中應用可能需要很長時間。
二. 為了讓新的策略立即生效,管理員必須來觸發路由更新。
三. 觸發路由更新的方法如下:
1. 硬復位 (Hard
reset)
2. 軟復位 (Soft
reset)3. 路由刷新 (Router refresh)
BGP的硬復位
Router# clear ip bgp *
1. 復位該路由器的所有BGP連接。
2. 整個BGP表被清空。
3. 與所有鄰居的BGP會話從Established變為idle;所有的BGP訊息必須重新學習 。
Router# clear ip bgp [neighbor-address]
1. 僅復位單個鄰居。
2. 與該鄰居的BGP會話從Established變為idle;從該鄰居學習到的所有BGP訊息必須重新學習。
3. 影響比clear ip
bgp *小。
BGP的出口軟復位
Router# clear ip bgp {*|neighbor-address} [soft out]
1. 從該鄰居學習到的路由訊息不會丟失。
2. 本路由器重新向該鄰居發送所有的BGP訊息,但是BGP連接沒有被復位。
3. BGP鄰接依舊保持在Established狀態。
4. 當更改出口策略時,強烈建議使用該方法。
5. 當更改入口策略時,採用soft out選項起不到作用。
BGP的入口軟復位
Router(config-router)# neighbor
[ip-address] soft-reconfiguration inbound
1. 本路由器存儲從該鄰居學習到的所有原始BGP訊息。
2. 注:該命令比較消耗內存。
Router# clear ip bgp {*|neighbor-address} soft in
1. 使用存儲的BGP訊息來生成新的入口更新。
路由刷新:動態的入口軟復位
Router# clear ip bgp {*|neighbor-address} [soft in | in]
1. 通告給該鄰居的路由訊息不會被撤銷。
2. 不需要在本地存儲原始的BGP更新訊息。
3. BGP連接保持在Established狀態。
4. 在Cisco IOS
12.0(2)S、12.0(6)T及後續版本中支援。
BGP鄰居狀態
一.
Idle 初始狀態、終止狀態,當收到出錯時就回到idle狀態
二.
Connect 嘗試三次撏手
三.
Active TCP三次握手
四. Open
sent 發open、AS號、版本(open)
五. Open
confirm open包確認狀態(keepalive)
六.
Established 鄰居建立成功
出現BGP鄰居故障應該是什麼現象:
如果卡在idle狀態和active一定是出了問題,會在state顯示。
R1# clear ip bgp *
R1# show ip bgp summary當全部都出現數字的話表示正常,有英文字表示不正常
BGP的Established和idle狀態
一. idle:路由器在路由表中找不到去往鄰居的路由
*解決方法:檢查IGP問題。鄰居路由器是否通告該路由?
二.
Established:BGP鄰居的正常狀態
*使用命令show ip
bgp summary查看,在最後一行(State)中將顯示從該鄰居學習到的路由器數量。
BGP的Active狀態 23:30
Active:路由器已經發送open報文並且在等待對方回應。
一. 狀態可能在active和idle之間徘徊
二. 鄰居不知道如何進行回復,可能原因如下:
1. 沒有到達BGP open報文源IP地址的路由
2. neighbor命令中配置錯誤的IP地址3. 沒有配置neighbor
4. AS號配置錯誤
什麼情況下會導致鄰居起不來:
1. 驗證2. 路由不可達
3. AS號配置錯誤
BGP重定向實驗拓樸 27:10
R1(config)# router bgp 1
R1(config-router)# neighbor 100.1.1.2 remote-as 23
R2(config)# router ospf 1
R2(config-router)# network 22.1.1.1 0.0.0.0 area 0R2(config-router)# network 100.1.1.0 0.0.0.255 area 0
R3(config)# router ospf 1
R3(config-router)# network 33.1.1.1 0.0.0.0 area 0R3(config-router)# network 100.1.1.0 0.0.0.255 area 0
R2(config)# router bgp 23
R2(config-router)# neighbor 100.1.1.1 remote-as 1R2(config-router)# neighbor 33.1.1.1 remote-as 23
R2(config-router)# neighbor 33.1.1.1 update-source loopback 0
R2(config-router)# neighbor 33.1.1.1 next-hop-self
R3(config)# router bgp 23
R3(config-router)# neighbor 22.1.1.1 remote-as 23R3(config-router)# neighbor 22.1.1.1 update-source loopback 0
R3(config-router)# neighbor 22.1.1.1 next-hop-self
R3(config-router)# neighbor 34.1.1.1 remote-as 4
R4(config)# router bgp 4
R4(config-router)# neighbor 34.1.1.3 remote-as 23
R3# show ip bgp summary
都是數字就代表neighbor建成功
R2# show ip bgp summary
Network之前要看一下44.1.1.1是 / 多少位
R4# show ip router
R4(config)# router bgp 4
R4(config-router)# network 44.1.1.0 mask 255.255.255.0
R4# show ip bgp
R1# show ip bgp
在R1上看他的下一跳不是R2確是R3,這個就叫做ICMP的重定向。
R2把路由丟給R1的時候,R1的下一跳應該是R2。但R1會認為R2把數據丟給我之後,又要從我這邊在出去到R2,這時候R1就發一個ICMP的重定向告訴R2直接把下一跳改成100.1.1.3。雖然我跟你建議eBGP但下次所有數據都這樣發送。
一但涉及到一個接口收到的包又從我這個接口發出去的時候,一般都會觸發ICMP重定向。
※BGP的自動summary 37:40
1. auto-summary:重分佈的時候會發生自動彙總
(不攜帶metric和next-hop);宣告主類的時候
在一般的情況下auto-summary是不生效的,只有在發生重分佈的時候才會自動彙總。
不光只是彙總有很多東西都沒了,metric和next-hop變成0。
2. no auto-summary:重分佈的時候會不發生自動彙總
(攜帶metric和next-hop)
R1(config)# interface loopback 1
R1(config-if)# ip address 122.1.1.1 255.255.255.0192.168.1.1 192.168.2.1 192.168.3.1 多建了四個地址
R1(config)# router bgp 1
R1(config-router)# network
122.1.1.0 mask 255.255.255.0R1(config-router)# network 192.168.1.0 mask 255.255.255.0
R1(config-router)# network 192.168.2.0 mask 255.255.255.0
R1(config-router)# network 192.168.3.0 mask 255.255.255.0
122.1.1.0 192.168.1.1
192.168.2.1 192.168.3.1 四個地址都放進去路由
沒辦法用一句指令把192.168.1.1
192.168.2.1 192.168.3.1這三個地址放進去
因為BGP的network是路由,你的路由表之前是怎麼寫的就應該怎麼寫,必需要一條一條放進去。 那個是IGP才可以
R1# show ip bgp
這個路由會傳給R2、R3、R4
默認情況下所有的BGP自動彙總都是關閉的
打開自動彙總的指令
自動彙總
R2(config)# router bgp 23
R2(config-router)#
auto-summary
R2# clear ip bgp * so
R2# show ip bgp
R2# show run | se bgp
什麼叫重分佈的時候才會自動彙總 44:20
R2跟R3跑OSPF,然後把OSPF重分佈進去BGP,所以應該在BGP的進程裡下指令。
R2(config)# router bgp 23
R2(config-router)#
redistribute ospf 1
R2# show ip bgp
原本五條路由多了22.0.0.0、33.0.0.0、100.0.0.0都產生了自動彙總,只針對重分佈路由產生彙總,其他的都沒變。
只有在重分佈的時候會產生彙總,是對重分佈進來的路由產生了彙總,跟之前的路由一點關係都沒有。
不光只是彙總有很多東西都沒了,metric變成0,next-hop也是0
如果在把自動彙總關掉
R2(config)# router bgp 23
R2(config-router)# no
auto-summary
R2# show ip bgp
重分佈進來的路由又不一樣了,33.1.1.1偕帶了下一跳100.1.1.3,22.1.1.0的下一跳為什麼還是0,因為他本來就是0
auto-summary和no auto-summary僅僅只在重分佈的時候才有區別,在BGP的正常宣告是沒有區別的。
重分佈的區別:重分佈進來的路由如果打的是auto-summary,他將會產生自動彙總,並且不偕帶metric和next-hop(下一跳)。no auto-summary他不會產生彙總,而且會偕帶metric和next-hop。
宣告主類的時候 49:00
首先把重分佈NO掉,讓他變回no auto-summary
R2(config)# router bgp 23
R2(config-router)# no
redistribute ospf 1
重新在R3上創建一個環回口
R3(config)# interface
loopback 1
R3(config-if)# ip address
133.1.1.1 255.255.255.0
R3(config)# router bgp 23
R3(config-router)# network 133.1.0.0
network後面可以不打mask,不打mask宣告的就叫主類。
show ip bgp 一定看不到133.1.0.0,133.1.0.0不可能被放進路由。
因為Network宣告的是路由,路由表顯示的是 /24,但是宣告的確是 /16
但是可以通過auto-summary把他打開,其他路由並不會受影響。
R3(config-router)#
auto-summaryR3# show ip bgp
auto-summary的另一個重點叫宣告主類的時候:
如果打了auto-summary去宣告時候,可以按照主類來宣告,會去找本地有沒有在主類當中的這樣一個路由,如果有的話他會宣告出去。
BGP的手動summary 54:35
一. 在明細所在的路由器上做聚合
二. 在其他路由器做聚合 (考慮存在什麼問題)
兩種聚合的方式:
一. 偽造路由,宣告進BGP
二. BGP的聚合命令,AGG
已經在R1上設定三個環回口,在R2上也收到這三個路由,現在在R1上針對這三條路由來做手動彙總成一條路由。
在做彙總之前要把192.168.1.1
192.168.2.1 192.168.3.1三個地址都宣告進去路由協定(BGP)。 沒宣告進去不用談彙總
宣告彙總可以在任何一台路由器上做,分為二大類:
第一大類在明細所在的路由器上,明細是從R1發出來的,也可以在R2上做因為R2也可以收到路由條目,R2、R3、R4叫非明細所在的路由器為第二大類。
在明細上做彙總 58:00
R1(config)# router bgp 1
R1(config-router)# aggregate-address
168.168.0.0 255.255.252.0
R1# show ip bgp
默認的情況下BGP的明細是不會被抑制掉,只是多一條彙總路由
而IGP做彙總他的明細會被抑制掉,只留下彙總路由
把明細抑制掉
R1(config-router)#
aggregate-address 168.168.0.0 255.255.252.0 summary-only
R2# show ip bgp
summary-only是用來抑制BGP明細路由
在非明細上做彙總 1:02:50
在非明細的路由器上做彙總會出現一種問題: 假設R2上有一條默認路由0.0.0.0指向的下一跳是R1,要是R1有一條直連192.168.1.1的路由掛掉,這時彙總還是存在,數據包發到R2上R2會查路由表,查到1.1這條路由沒有了R2會通過默認路由在把數據包丟給R1,但R1本來就收到R2做的一條彙總,雖然1.1沒有了他會根據R2做的彙總在傳給R2就變成環路。
在非明細的路由器上做彙總的彙總路由,不應該傳回到明細所在AS的路由器(R1)
R2(config)# router bgp 23
R2(config-router)#
aggregate-address 168.168.0.0 255.255.252.0
R3# show ip bgp
R3會收到這條彙總路由,R1一樣會收到
現在不要讓他在傳回給R1
R2(config-router)#
aggregate-address 168.168.0.0 255.255.252.0 as-set
是用來解決在非明細的路由器做彙總,不會在向明細的路由器所在的AS傳遞這樣一個問題。
R1# show ip bgp
在非明細一定要加as-set,不然會出現環路。
as-set意思是做出來的彙總自動攜帶明細所有的AS號,有了AS號就不可能在回傳給原來的AS了。沒as-set他是不攜帶AS號的。
suppress-map (抑制地圖)
R2(config-router)#
aggregate-address 168.168.0.0 255.255.252.0 as-set suppress-map
他的作用是:把這個路由彙總然後把他抑制掉。把這個路由彙總出來然後不通告出去 (路由過濾的一種方法)
BGP Peer Group
一. 減少Buffer
二. 減少命令行