GRE over IPSec的缺陷
GRE over IPSec的缺陷:
如上圖,如果一個公司又很多分支站點,採用GRE over IPSec的話會存在如下缺點:
- IPSec隧道集中在Hub點,所有流量都穿越Hub點。
- 所有流量通過總部封裝和解封裝時,會引入額外的網絡延時。
- 每增加一個新的Sopke點,Hub點都必須被配置。
- 若Spoke點的公網地址是動態變化的,部署點到點的GRE會存在問題。
DSVPN原理介紹
DSVNP簡介:
動態智能VPN(Dynamic Smart Virtual Private Network),簡稱DSVPN,是一種在Hub-Spoke組網方式下爲公網地址動態變化的分支之間建立VPN隧道的解決方案。
DSVPN是華爲私有協議。
DSVNP的目的:
爲什麼需要DSVPN?
因爲GRE OVER IPSEC缺點比較多
A. 流量都需要經過HUB
B. 增加分部都需要配置
C. 分部非固定IP地址
DSVPN解決方案,它通過將下一跳解析協議NHRP(Next Hop Resolution Protocol)和mGRE(multipoint Generic Routing Encapsulation)技術與IPSec相結合解決了GRE over IPSec的缺陷:
- DSVPN通過NHRP協議動態收集、維護和發佈各節點的公網地址等信息,解決了源分支無法獲取目的分支公網地址的問題,從而可在分支與分支之間建立動態VPN隧道,實現分支與分支間的直接通信,進而減輕總部的負擔、避免網絡延時。
- DSVPN藉助mGRE技術,使VPN隧道能夠傳輸組播報文和廣播報文,並且一個Tunnel接口可與多個對端建立VPN隧道,減少了配置VPN隧道的工作量;在新增分支或分支公網地址發生變化時,也能自動維護總部與分支之間的隧道關係,而不用調整總部的隧道配置,使得網絡維護變得更智能化。
使用DSVPN的優點:
-
降低VPN網絡構建成本
DSVPN可以實現分支和總部以及分支之間的動態全連接,分支不需要單獨購買靜態的公網地址,節省企業開支。
-
簡化總部Hub和分支Spoke配置
總部Hub和分支Spoke上配置的Tunnel接口從多個點對點GRE隧道接口變更爲一個mGRE隧道接口。當爲DSVPN網絡添加新的分支Spoke時,企業網絡管理員不需要更改總部Hub或任何當前分支Spoke上的配置,只需在新的分支Spoke進行配置,之後新的分支Spoke自動向總部Hub進行動態註冊。
-
降低分支間數據傳輸時延
由於分支間可以動態構建隧道,業務數據可以直接轉發,不用再經過總部,減少了數據轉發的延遲,提升了轉發性能和效率。
DSVPN基本概念:
DSVPN典型網絡架構:
企業通過總部Hub端與多個分支Spoke相連,Hub端使用靜態公網地址,Spoke可以使用動態的公網地址。在該網絡中,當源Spoke需要向目的Spoke發送數據報文時,源Spoke將通過與Hub之間的靜態mGRE隧道交換NHRP協議獲取目的Spoke的公網地址,並與目的Spoke建立動態的mGRE隧道。隧道建立完成後,Spoke與Spoke之間的數據報文將通過該動態mGRE隧道直接發送給對方,不載經過總部Hub中轉。
DSVPN節點:
DSVPN節點爲部署DSVPN的設備,包括Spoke和Hub兩種形態。
-
Spoke
Spoke通常是企業分支的網關設備。一般情況下,Spoke使用動態的公網地址。
-
Hub
Hub通常是企業總部的網關設備,接收Spoke向其註冊的信息。DSVPN網絡中,Hub既可使用固定的公網地址,也可使用域名。
DSVPN框架:
MGRE --------多點GRE
MGRE隧道分類:
-
靜態隧道 ----- spoke—hub
-
動態隧道------ spoke —spoke
mGRE、mGRE隧道接口和mGRE隧道:
mGRE是在GRE(Generic Routing Encapsulation)基礎上發展而來的一種點到多點GRE技術。它將傳統GRE隧道點到點(P2P)類型的Tunnel接口擴展成了點到多點(P2MP)類型的mGRE隧道接口。通過改變接口類型,Hub或Spoke上只需要配置一個Tunnel接口便可與多個對端建立隧道,從而減少了配置GRE隧道的工作量。
mGRE隧道接口包含:
- 隧道源地址:GRE封裝後的報文源地址。
- 隧道目的地址:GREP封裝後的報文目的地址。mGRE隧道的目的地址不能手工指定,該地址需要來自NHRP協議。
- 隧道接口IP地址。
mGRE隧道接口不支持GRE隧道的Keepalive檢測。
採用mGRE隧道接口建立起來的GRE隧道稱爲mGRE隧道。mGRE隧道分爲靜態mGRE隧道和動態mGRE隧道兩種:
- 靜態mGRE隧道建立於分支Spoke與總部Hub之間,靜態mGRE隧道永久存在。
- 動態mGRE隧道建立於各分支Spoke之間,動態mGRE隧道在一定週期內沒有流量轉發將自動拆除。
NHRP協議和NHRP映射表:
NHRP(Next Hop REsolution Protocol)即下一跳地址解析協議。
1.爲什麼需要NHRP?
NHRP解決非直連穿越互聯網映射
解決非固定IP地址2.NHRP是什麼?
NHRP映射 TUNNLE到公網IP地址
基本原理:
源Spoke(隧道發起方)以到目的Spoke(隧道響應方)路由的下一跳地址爲索引,向目的Spoke發送NHRP地址解析請求,目的Spoke收到該地址請求後將向源Spoke返回其公網地址。源Spoke獲取到目的Spoke的公網地址後,兩者之間將建立動態的mGRE隧道。
主要功能:
- 解決非點到點直連網絡跨互聯網映射問題。
- 在DSVNP網絡中,源Spoke利用NHRP協議獲取對端Spoke的公網地址,類似於IP-MAC或IP-DHCI號的對應關係。
- 解決動態IP問題。
NHRP協議映射表:
NHRP映射方式:
靜態映射
spoke----hub動態映射
hub-spoke
NHRP映射表是有關Tunnel地址和公網地址的映射關係表。
按照生成方式的不同,NHRP映射表分爲靜態表項和動態表項兩種:
-
靜態表項:由網絡管理員手工配置。
例如:Spoke要與Hub建立靜態mGRE隧道,管理員就需要在Spoke上手工配置Hub的Tunnel地址和公網地址。
-
動態表項:它是由NHRP協議動態生成的表項。
例如,Hub通過NHRP註冊報文提取各Spoke的Tunnel地址和公網地址而生成的NHRP映射表;各Spoke通過NHRP解析報文提取對端Spoke的Tunnel地址/子網地址和公網地址而生成的NHRP映射表。
DSVPN基本原理:
DSVPN實現分支之間直接通信的關鍵是在分支之間建立隧道。DSVPN利用mGRE結合NHRP來建立分支之間的隧道。
mGRE與NHRP結合建立隧道的基本原理是:當設備轉發一個IP報文時,根據路由表將IP報文傳給下一跳的出接口mGRE隧道接口,mGRE在NHRP映射表中查找獲取下一跳地址映射的對端公網地址。然後mGRE封裝IP報文,加上新IP頭,目的地址就是對端的公網地址,這樣IP報文就能發向隧道對端,隧道即可建立。
可見,NHRP映射表和路由表是mGRE與NHRP結合建立隧道的重要依據。如果一端分支有對端分支Tunnel地址/子網地址與公網地址的NHRP映射、有到對端分支的路由,那麼分支間就可建立mGRE隧道。而DSVPN網絡開始時,分支Spoke只有一個靜態配置的NHRP映射表(Hub的Tunnel地址與公網地址的映射),也只有到總部Hub的路由。因此,分支間無法直接建立隧道,只能先借助Hub學習到彼此的路由、生成彼此Tunnel地址/子網地址與公網地址的NHRP映射。這一過程主要分爲如下三個環節:
-
建立Spoke與Hub之間的mGRE隧道
這一環節的目的是打通分支到分支報文轉發的通道,使得一端分支的報文可以藉助Hub轉發到另一端分支。
DSVPN在Spoke與Hub之間建立的mGRE隧道是一種靜態隧道,無論Spoke與Hub間是否有流量經過,該隧道一直存在。
-
分支間路由學習
這一環節的目的是生成一端分支到另一端分支的路由。
-
建立Spoke與Spoke之間的mGRE隧道
這一環節的目的是建立用於分支間直接通信的通道。當一個分支向另一個分支轉發數據報文時,如果源Spoke找不到目的Spoke的公網地址,則會觸發DSVPN建立Spoke與Spoke之間的mGRE隧道。
Spoke與Spoke之間建立的mGRE隧道是一種動態隧道,當Spoke與Spoke間有流量通過時,隧道自動保活;當一定週期內沒有流量經過時,隧道自動拆除。
Spoke與Spoke之間的mGRE隧道建成後,分支間的數據報文即可通過該隧道直接轉發,不再經過Hub中轉。
建立Spoke與Hub之間的mGRE隧道過程:
DSVPN網絡開始時,總部Hub的NHRP映射表是空表,分支Spoke有一個靜態配置的NHRP映射表(Hub的Tunnel地址與公網地址的映射),分支Spoke和總部Hub有到彼此的路由。要建立Spoke與Hub之間的mGRE隧道,總部要生成各分支Tunnel地址/子網地址與公網地址的NHRP映射表,這主要通過分支Spoke向總部Hub進行NHRP註冊來實現,其過程如下圖所示。
-
Spoke向Hub註冊請求
管理員在Spoke上手工配置Hub的Tunnel地址和公網地址以後,Spoke將定時向Hub發送NHRP註冊請求報文,該報文中包含Spoke的Tunnel地址和公網地址。
-
Hub向Spoke註冊應答
Hub從NHRP註冊請求報文中提取Spoke的Tunnel地址和公網地址,並生成NHRP映射表,進而建立兩者之間的mGRE隧道。
Spoke定時向Hub發送註冊消息,這樣就使Hub的NHRP映射表在老化時間到來前重新計時,確保分支與總部一直能夠維持隧道關係。
分支間路由學習:
DSVPN支持兩種分支間路由學習方式:
-
分支間相互學習路由(非shortcut方式,也叫Normal方式) 明細路由
採用這種方式時,源分支到目的分支子網的路由下一跳爲目的分支的Tunnel地址,每個分支需要學習到所有對端的路由數據。這種情況下,Spoke會消耗大量的CPU和內存資源,對其路由表容量和性能有較高的要求。而實際應用中,Spoke的性能往往較低,能存放的路由數量有限。因此,這種路由學習方式只適用於網絡節點較少、路由信息量小的中小型網絡。
-
分支路由匯聚到總部(shortcut方式) 彙總路由
採用這種方式時,源分支到目的分支子網的路由下一跳爲總部的Tunnel地址,Spoke只需存放到Hub的路由。由於Spoke減少了自身的路由數量,所以該路由學習方式適用於那些網絡規模大、分支較多的大型網絡。
建立Spoke與Spoke之間的mGRE隧道:
經過上述兩個環節後,各分支已經有到對端分支的路由,但還沒有對端分支的Tunnel地址/子網地址與公網地址的NHRP映射表。要建立Spoke與Spoke之間的mGRE隧道,就要藉助NHRP協議和學習到的路由來生成NHRP映射表。不同的路由學習方式,分支學習到的路由不同,NHRP映射表的生成過程也不同:
- 非shortcut方式下/Normal方式,源Spoke可以學習到目的Spoke的Tunnel地址。因此,源Spoke可以直接根據目的Spoke的Tunnel地址來查找目的Spoke的公網地址,生成目的Spoke的Tunnel地址與公網地址的NHRP映射表。
- shortcut方式下,所有Spoke的路由下一跳全部都是Hub的Tunnel地址,源Spoke無法學習到目的Spoke的Tunnel地址。因此,源Spoke只能根據報文的目的地址來查找目的Spoke的公網地址,生成目的Spoke的子網地址與公網地址的NHRP映射表。
Spoke與Spoke之間的mGRE隧道建立過程(Normal方式\非shortcut方式):
當Spoke1下的用戶首次訪問Spoke2下的用戶時,將觸發Spoke1與Spoke2之間建立動態mGRE隧道,隧道建立過程如下:
- Spoke1收到其下用戶發往Spoke2的數據報文後:
- 根據報文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2(Spoke2的Tunnel地址),但在NHRP映射表中沒有查找10.1.1.2對應的公網地址,就默認將該數據報文直接轉發給Hub。
- 構建並向Hub發送NHRP地址解析請求報文,請求10.1.1.2對應的公網地址。
- Hub收到Spoke1發送的數據報文和NHRP地址解析請求報文後,將報文通過Hub與Spoke2間的mGRE隧道轉發給Spoke2。
- Spoke2收到NHRP地址解析請求報文後:
- 從NHRP地址解析請求報文中提取Spoke1的Tunnel地址和公網地址,並將該信息更新到自己的NHRP映射表中。
- 構建並向Spoke1發送NHRP地址解析應答報文(攜帶Spoke2的Tunnel地址10.1.1.2和公網地址2.2.2.2)。
- Spoke1收到NHRP地址解析應答報文後,從應答報文中提取Spoke2的Tunnel地址和公網地址,更新到自己的NHRP映射表中,Spoke1與Spoke2之間的動態mGRE隧道隨即建立。
當Spoke1再次收到其下用戶發送給Spoke2的數據報文時,Spoke1根據報文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2,再根據10.1.1.2在NHRP映射表中找到公網地址2.2.2.2,即可按照公網地址2.2.2.2將此報文進行mGRE封裝後直接發送給Spoke2,不再經過總部Hub。
以上過程總結爲三步:
- 路由(明細路由)
- Spoke主動發起
- NHRP解析地址爲10.1.1.2(Tunnel)
建立Spoke與Spoke之間的mGRE隧道(shortcut方式):
當Spoke1下的用戶首次訪問Spoke2下的用戶時,將觸發Spoke1與Spoke2之間建立動態mGRE隧道,隧道建立過程如下:
- Spoke1收到其下用戶發往Spoke2下用戶的數據報文後,根據報文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.3(Hub的Tunnel地址),並在NHRP映射表中找到10.1.1.3對應的公網地址3.3.3.3(Hub的公網地址),就將數據報文轉發給Hub。
- Hub收到Spoke1轉發的數據報文後:
- 將此報文通過Hub與Spoke2間的mGRE隧道轉發給Spoke2。
- 檢查發現接收和發送數據報文的Tunnel接口屬於同一個NHRP域,就構建並向Spoke1發送NHRP重定向報文(僅攜帶Hub的Tunnel地址和公網地址)。
- Spoke1收到NHRP重定向報文後,構建並向Hub發送NHRP地址解析請求報文(攜帶Spoke1的Tunnel地址10.1.1.1和公網地址1.1.1.1,以及需要解析的數據報文的目的地址192.168.2.0)。
- Hub收到NHRP地址解析請求報文後轉發給Spoke2處理。
- Spoke2收到NHRP地址解析請求報文後:
- 從NHRP地址解析請求中提取Spoke1的Tunnel地址和公網地址,並將該信息更新到自己的NHRP映射表中。
- 構建並向Spoke1發送NHRP地址解析應答報文(攜帶Spoke2的子網地址192.168.2.0、Spoke2的Tunnel地址10.1.1.2和公網地址2.2.2.2)。
- Spoke1收到NHRP地址解析應答報文後,從應答報文中提取Spoke2的子網地址和公網地址,更新到自己的NHRP映射表中,Spoke1與Spoke2之間的動態mGRE隧道隨即建立。
當Spoke1再次收到其下用戶發送給Spoke2的數據報文時,Spoke1根據報文目的地址(192.168.2.0)查找NHRP映射表,找到Spoke2的公網地址2.2.2.2,即可根據公網地址2.2.2.2將此報文進行mGRE封裝後直接發送給Spoke2,不再經過總部Hub。
DSVPN的IPSec安全封裝:
當企業需要對總部和分支機構及分支機構間傳輸的數據近吸頂燈加密保護的時候,可以在部署DSVPN的同事綁定IPSec安全框架,實現分支間同時動態建立mGRE隧道和IPSec隧道。
控制報文在DSVPN網絡中經過IPSec加密的封裝格式:
IP | IPSec | GRE | NHRP
數據報文在DSVPN網絡中經過IPSec加密的封裝格式(傳輸模式):
IP | IPSec | GRE | IP | Payload
Sopke與Spoke間建立mGRE隧道並啓用IPSec後的報文封裝格式:
相對於傳統Hub-Spoke組網的IPSec技術,DSVPN與IPSec聯合部署具有如下優勢:
- 傳統IPSec技術使用ACL識別待加密的單播流量,需進行復雜的ACL定義,配置和維護困難。而DSVPN中只需將mGRE隧道接口與IPSec安全框架綁定,無需再定義複雜的ACL,網絡部署更加簡單。
- 由於動態建立了分支間的IPSec隧道,分支Spoke間交互的IPSec數據不用通過總部Hub進行解密和加密操作,降低了數據傳輸時延。
DSVPN抓包分析
DSVPN 非Shortcut/normal模式抓包分析:
Spoke的註冊報文流程:
在Spoke端配置nhrp後,會主動向Hub端發送NHRP註冊報文。報告自己的公網地址和隧道地址。Hub端收到後會給於迴應。
站點之間的通信報文都是通過GRE隧道來封裝的。
spoke端會向hub端發送註冊報文,通告自己的公網地址和隧道地址。用來建立mGRE隧道。
在響應報文中的Responder中的Client Information entry中會攜帶Hub端的公網地址和隧道地址。
Spoke之間建立mGRE隧道通信過程報文交互:
- 當Spoke的一個站點的主機與另一個站點要通信時,首先會查找路由表,會找到下一跳地址爲隧道接口172.16.1.1。
- 因爲此時沒有172.16.1.1端的公網IP地址,會向Hub端發送NHRP_resquest報文,解析172.16.1.1的公網地址。
- 然後Hub端會給於迴應,返回172.16.1.1的公網地址。
- 得到172.16.1.1的公網地址後,以後的通信,就可以直接發給對應的公網地址。
DSVPN Shortcut模式抓包分析:
DSVNP應用場景
DSVPN應用場景分析:
-
基本場景
適用於中小型企業網絡,配置簡單,易於掛盡力,但存在單點故障的隱患。
-
Hub主備備份場景
DSVPN支持部署多臺Hub設備,用以提高總部的可靠性。
-
Hub負載分擔場景
單臺Hub設備受性能制約,其下所能連接的Spoke數量有限,當網絡中Spoke節點較多時,總部需要部署多臺Hub來提高總部的處理能力。
-
級聯場景:
適用於Spoke節點較多且分佈較分散的大型企業網絡,Hub(總部)設備處理性能要求較高,但也存在一定的單點故障隱患。
DSVPN配置示例
DSVPN(非Shortcut/ normal模式)配置:
FW1 爲 Hub,AR1 爲 Spoke1,FW2 爲 Spoke2,配置 DSVPN,使用 normal 模式建立 mGRE。
DSVPN配置思路:
第一步: 配置MGRE
HUB
interface Tunnel1
ip address 172.16.1.10 255.255.255.0
tunnel-protocol gre p2mp
source 202.100.1.10
Spoke
1:
interface Tunnel0/0/1
ip address 172.16.1.1 255.255.255.0
tunnel-protocol gre p2mp
source 202.100.1.1
2:
interface Tunnel1
ip address 172.16.1.2 255.255.255.0
tunnel-protocol gre p2mp
source 202.100.1.11
第二步:配置NHRP
HUB Spoke 統一network-id
interface Tunnel 1
nhrp network-id 123
配置映射關係
HUB
interface Tunnel 1
nhrp entry multicast dynamic
Spoke
interface Tunnel 1
nhrp entry multicast dynamic
nhrp entry 172.16.1.10 202.100.1.10 register
第三步:配置路由
動態路由 OSPF
ospf 1 router-id 10.10.10.10
area 0.0.0.0
network 172.16.1.0 0.0.0.255
network 10.1.3.0 0.0.0.255
注意點:
默認TUNNEL運行OSPF以後,默認網絡類型爲P2P,需要改變網絡類型
interface Tunnel1
ospf network-type broadcast
同時調整OSPF的優先級,確保HUB就是DR
interface Tunnel1
ospf dr-priority 0
第五步:DMVPN完成,可以檢查測試
第六步:配置IPSEC --------DSVPN OVER IPSEC
階段一:
ike proposal 10
authentication-algorithm sha2-256
integrity-algorithm hmac-sha2-256
#
ike peer dsvpn_peer v2
pre-shared-key simple Huawei@123
ike-proposal 10
#
階段二:
ipsec proposal 10
esp authentication-algorithm sha2-256
#
ipsec profile ipsec_dsvpn
ike-peer dsvpn_peer
proposal 10
interface Tunnel1
ipsec profile ipsec_dsvpn
如果是在防火牆配置,需要放行安全策略
security-policy rule name GRE source-zone local source-zone untrust destination-zone local destination-zone untrust service gre action permit rule name OSPF source-zone local source-zone vpn destination-zone local destination-zone vpn service OSPF action permit rule name VPN source-zone trust source-zone vpn destination-zone trust destination-zone vpn action permit
如果配置IPSec後,需要放行的策略:
安全策略 security-policy rule name GRE source-zone local source-zone untrust source-zone vpn destination-zone local destination-zone untrust destination-zone vpn service gre service ISAKMP service esp action permit
Hub端的完整配置示例:
[Hub]dis current-configuration
[V200R003C00]
#
sysname Hub
#
ipsec proposal 10
#
ike proposal 10
#
ike peer dsvpn_peer v2
pre-shared-key simple Huawei@123
ike-proposal 10
#
ipsec profile ipsec_dsvpn
ike-peer dsvpn_peer
proposal 10
ipsec profile ipsec_q
#
interface GigabitEthernet0/0/0
ip address 202.100.1.10 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 10.1.3.10 255.255.255.0
#
interface Tunnel0/0/0
ip address 172.16.1.10 255.255.255.0
tunnel-protocol gre p2mp
source 202.100.1.10
ospf network-type broadcast
ipsec profile ipsec_dsvpn
nhrp entry multicast dynamic
nhrp network-id 123
#
ospf 1 router-id 10.10.10.10
area 0.0.0.0
network 10.1.3.0 0.0.0.255
network 172.16.1.0 0.0.0.255
檢查測試:
當Spoke端配置成shortcut模式時:
配置shortcut模式命令
Hub端:
interface Tunnel0/0/0
ip address 172.16.1.10 255.255.255.0
tunnel-protocol gre p2mp
source 202.100.1.10
ospf network-type broadcast
nhrp redirect //開啓Hub端重定向
nhrp entry multicast dynamic
nhrp network-id 123
Spoke端:
interface Tunnel0/0/0
ip address 172.16.1.2 255.255.255.0
tunnel-protocol gre p2mp
source GigabitEthernet0/0/0
ospf network-type broadcast
ospf dr-priority 0
nhrp shortcut //Spoke端配置爲shortcut模式
nhrp entry multicast dynamic
nhrp network-id 123
nhrp entry 172.16.1.10 202.100.1.10 register
與非shortcut模式的主要配置區別是:
nhrp redirect //開啓Hub端重定向
nhrp shortcut //Spoke端配置爲shortcut模式
檢查測試:
shortcut模式的路由表目的地址直接是私網地址。而非shortcut模式目的地址是Tunnel地址
normal
必須是明細路由
spoke可以主動發起
得到NHRP映射關係是 tunnle-公網地址shortcut
必須是彙總路由
spoke被動發起
得到NHRP映射關係是 私網地址----公網地址
參考文檔:華爲HedEx文檔。