2017年10月5日 星期四

31 – BGP 重定向拓樸


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 NetworkIGPNetwork區別          

. BGPNetwork作用:

. IGPNetwork 作用:



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)S12.0(6)T及後續版本中支援。



BGP鄰居狀態

. Idle           初始狀態、終止狀態,當收到出錯時就回到idle狀態

. Connect       嘗試三次撏手

. Active         TCP三次握手

. Open sent      openAS號、版本(open)

. Open confirm   open包確認狀態(keepalive)

. Established     鄰居建立成功

出現BGP鄰居故障應該是什麼現象:

如果卡在idle狀態和active一定是出了問題,會在state顯示。

R1做驗證,在R2不做驗證,完成後在做檢查

R1# clear ip bgp *
R1# show ip bgp summary
當全部都出現數字的話表示正常,有英文字表示不正常



BGPEstablishedidle狀態

. idle:路由器在路由表中找不到去往鄰居的路由

*解決方法:檢查IGP問題。鄰居路由器是否通告該路由?

. EstablishedBGP鄰居的正常狀態

  *使用命令show ip bgp summary查看,在最後一行(State)中將顯示從該鄰居學習到的路由器數量。



BGPActive狀態              23:30

Active:路由器已經發送open報文並且在等待對方回應。

 . 狀態可能在activeidle之間徘徊

 . 鄰居不知道如何進行回復,可能原因如下:

     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 0
R2(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 0
R3(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 1
R2(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 23
R3(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
看他的轉發表有 *>  這個路由就可以傳給R3R2R1

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:重分佈的時候會發生自動彙總
(不攜帶metricnext-hop);宣告主類的時候

在一般的情況下auto-summary是不生效的,只有在發生重分佈的時候才會自動彙總。
不光只是彙總有很多東西都沒了,metricnext-hop變成0

2. no auto-summary:重分佈的時候會不發生自動彙總
  (攜帶metricnext-hop)



R1(config)# interface loopback 1
R1(config-if)# ip address 122.1.1.1 255.255.255.0
192.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.0
R1(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這三個地址放進去

因為BGPnetwork是路由,你的路由表之前是怎麼寫的就應該怎麼寫,必需要一條一條放進去。   那個是IGP才可以

R1# show ip bgp
這個路由會傳給R2R3R4

默認情況下所有的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

R2R3OSPF,然後把OSPF重分佈進去BGP,所以應該在BGP的進程裡下指令
R2(config)# router bgp 23
R2(config-router)# redistribute ospf 1

R2# show ip bgp
原本五條路由多了22.0.0.033.0.0.0100.0.0.0都產生了自動彙總,只針對重分佈路由產生彙總,其他的都沒變

只有在重分佈的時候會產生彙總,是對重分佈進來的路由產生了彙總,跟之前的路由一點關係都沒有。

不光只是彙總有很多東西都沒了,metric變成0next-hop也是0

如果在把自動彙總關掉
R2(config)# router bgp 23
R2(config-router)# no auto-summary

R2# show ip bgp
重分佈進來的路由又不一樣了,33.1.1.1偕帶了下一跳100.1.1.322.1.1.0的下一跳為什麼還是0,因為他本來就是0

auto-summaryno auto-summary僅僅只在重分佈的時候才有區別,在BGP的正常宣告是沒有區別的。
重分佈的區別:重分佈進來的路由如果打的是auto-summary,他將會產生自動彙總,並且不偕帶metricnext-hop(下一跳)
no auto-summary他不會產生彙總,而且會偕帶metricnext-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.0133.1.0.0不可能被放進路由。
因為Network宣告的是路由,路由表顯示的是 /24,但是宣告的確是 /16

但是可以通過auto-summary把他打開,其他路由並不會受影響。
R3(config-router)# auto-summary
R3# 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也可以收到路由條目,R2R3R4非明細所在的路由器為第二大類。


在明細上做彙總                          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的路由掛掉,這時彙總還是存在,數據包發到R2R2會查路由表,查到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
這時候R1就收不到彙總的路由
在非明細一定要加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
. 減少命令行