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配置思路:
1 | 第一步: 配置MGRE |
如果是在防火墙配置,需要放行安全策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 > 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后,需要放行的策略:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 > 安全策略
> 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端的完整配置示例:
1 | [Hub]dis current-configuration |
检查测试:
当Spoke端配置成shortcut模式时:
配置shortcut模式命令
1 | Hub端: |
与非shortcut模式的主要配置区别是:
1 | nhrp redirect //开启Hub端重定向 |
检查测试:
shortcut模式的路由表目的地址直接是私网地址。而非shortcut模式目的地址是Tunnel地址
normal
必须是明细路由
spoke可以主动发起
得到NHRP映射关系是 tunnle-公网地址shortcut
必须是汇总路由
spoke被动发起
得到NHRP映射关系是 私网地址—-公网地址
参考文档:华为HedEx文档。