设为首页收藏本站language 语言切换
查看: 3381|回复: 11
收起左侧

[书籍] 华为DSVPN(动态智能VPN)配置详解

[复制链接]
 成长值: 63505
发表于 2021-7-16 09:38:05 | 显示全部楼层 |阅读模式
DSVPN简介定义
动态智能VPN(Dynamic Smart Virtual Private Network),简称DSVPN,是一种在Hub-Spoke组网方式下为公网地址动态变化的分支之间建立VPN隧道的解决方案。

目的
越来越多的企业希望建立Hub-Spoke方式的IPSec VPN网络将企业总部(Hub)与地理位置不同的多个分支(Spoke)相连,从而加强企业的通信安全、降低通信成本。当企业总部采用静态的公网地址接入Internet,分支机构采用动态的公网地址接入Internet时,使用传统的IPSec、GRE over IPSec等技术构建VPN网络将存在一个问题,即分支之间无法直接通信(源分支无法获取目的分支公网地址,也就无法在分支之间直接建立隧道),所有分支之间的通信数据只能由总部中转,如图4-1所示。
图4-1  企业典型Hub-Spoke组网(配置DSVPN之前)

                               
登录/注册后可看大图

通过总部中转流量的办法来解决分支与分支间的通信会带来如下问题:
  • 总部在中转分支间的数据流时会消耗总部Hub的CPU及内存资源,造成资源紧张。
  • 总部要对分支间的数据流封装和解封装,会引入额外的网络延时。
另外,当IPSec网络规模不断扩展时,为减少路由配置和维护,需要部署动态路由协议。但IPSec和动态路由协议之间存在一个基础问题,动态路由协议依赖于组播报文或广播报文进行路由更新,而IPSec不支持广播协议报文和组播协议报文的传输。
在此背景下,华为提出了DSVPN解决方案,它通过将下一跳解析协议NHRP(Next Hop Resolution Protocol)和mGRE(multipoint Generic Routing Encapsulation)技术与IPSec相结合解决了上述问题:
  • DSVPN通过NHRP协议动态收集、维护和发布各节点的公网地址等信息,解决了源分支无法获取目的分支公网地址的问题,从而可在分支与分支之间建立动态VPN隧道,实现分支与分支间的直接通信,进而减轻总部的负担、避免网络延时。
  • DSVPN借助mGRE技术,使VPN隧道能够传输组播协议报文和广播协议报文,并且一个Tunnel接口可与多个对端建立VPN隧道,减少了配置VPN隧道的工作量;在新增分支或分支公网地址发生变化时,也能自动维护总部与分支之间的隧道关系,而不用调整总部的隧道配置,使得网络维护变得更智能化。


图2所示为一个采用DSVPN解决方案构建的VPN网络。
图4-2  企业Hub-Spoke组网(配置DSVPN之后)

                               
登录/注册后可看大图


受益
  • 降低VPN网络构建成本
    DSVPN可以实现分支和总部以及分支之间的动态全连接,分支不需要单独购买静态的公网地址,节省企业开支。
  • 简化总部Hub和分支Spoke配置
    总部Hub和分支Spoke上配置的Tunnel接口从多个点对点GRE隧道接口变更为一个mGRE隧道接口。当为DSVPN网络添加新的分支Spoke时,企业网络管理员不需要更改总部Hub或任何当前分支Spoke上的配置,只需在新的分支Spoke进行配置,之后新的分支Spoke自动向总部Hub进行动态注册。
  • 降低分支间数据传输时延
    由于分支间可以动态构建隧道,业务数据可以直接转发,不用再经过总部,减少了数据转发的延迟,提升了转发性能和效率。

DSVPN基本概念
DSVPN典型网络架构如图1所示,企业通过公共网络将总部(Hub)与地理位置不同的多个分支(Spoke)相连,Hub使用静态的公网地址,Spoke使用动态的公网地址。
该网络中,当源Spoke需要向目的Spoke发送数据报文时,源Spoke将通过与Hub之间的静态mGRE隧道交互NHRP协议获取目的Spoke的公网地址,并与目的Spoke建立动态mGRE隧道。隧道建立完成后,Spoke与Spoke之间的数据报文将通过该动态mGRE隧道直接发送给对方,不再经过总部Hub中转。
图4-3  DSVPN典型网络架构

                               
登录/注册后可看大图

在DSVPN解决方案中涉及到如下几个概念。
DSVPN节点DSVPN节点为部署DSVPN的设备,包括Spoke和Hub两种形态。
  • Spoke
    Spoke通常是企业分支的网关设备。一般情况下,Spoke使用动态的公网地址。
  • Hub
    Hub通常是企业总部的网关设备,接收Spoke向其注册的信息。DSVPN网络中,Hub既可使用固定的公网地址,也可使用域名。



mGRE、mGRE隧道接口和mGRE隧道
mGRE是在GRE(Generic Routing Encapsulation)基础上发展而来的一种点到多点GRE技术。它将传统GRE隧道点到点(P2P)类型的Tunnel接口扩展成了点到多点(P2MP)类型的mGRE隧道接口。通过改变接口类型,Hub或Spoke上只需要配置一个Tunnel接口便可与多个对端建立隧道,从而减少了配置GRE隧道的工作量。
mGRE隧道接口包含以下元素:
  • 隧道源地址:GRE封装后的报文源地址,即图1中隧道一端的公网地址。
  • 隧道目的地址:GRE封装后的报文目的地址,即图1中隧道另一端的公网地址。与GRE隧道接口手工指定目的地址不同,mGRE隧道目的地址来自于NHRP协议
  • 隧道接口IP地址:隧道接口地址和其他物理接口上的IP地址一样,用于设备之间的通信(例如获取路由信息等),即图1中的Tunnel地址。

                               
登录/注册后可看大图
mGRE隧道接口不支持GRE隧道的Keepalive检测。



采用mGRE隧道接口建立起来的GRE隧道称为mGRE隧道。mGRE隧道分为静态mGRE隧道和动态mGRE隧道两种:
  • 静态mGRE隧道建立于分支Spoke与总部Hub之间,静态mGRE隧道永久存在。
  • 动态mGRE隧道建立于各分支Spoke之间,动态mGRE隧道在一定周期内没有流量转发将自动拆除。


NHRP协议和NHRP映射表
NHRP(Next Hop Resolution Protocol)即下一跳地址解析协议。在DSVPN网络中,NHRP协议的作用是建立和解析Protocol地址(即图1中的Tunnel地址或子网地址)到NBMA(Non-Broadcast Multiple Access)地址(即图1中的公网地址)的映射关系。正是因为这种映射和解析,源Spoke才能够获取目的Spoke的动态公网地址。
Protocol地址和NBMA地址映射生成的表项称为NHRP映射表。按照生成方式的不同,NHRP映射表分为静态表项和动态表项两种:
  • 静态表项:由网络管理员手工配置。Spoke要与Hub建立静态mGRE隧道,管理员就需要在Spoke上手工配置Hub的Tunnel地址和公网地址。
  • 动态表项:它是由NHRP协议动态生成的表项。例如,Hub通过NHRP注册报文提取各Spoke的Tunnel地址和公网地址而生成的NHRP映射表;各Spoke通过NHRP解析报文提取对端Spoke的Tunnel地址/子网地址和公网地址而生成的NHRP映射表。

有关NHRP协议以及NHRP注册报文、NHRP解析报文的详细描述请参见RFC2332,本文不再赘述。

DSVPN基本原理
DSVPN实现分支之间直接通信的关键是在分支之间建立隧道。DSVPN利用mGRE结合NHRP来建立分支之间的隧道。与GRE不同,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注册来实现,其过程如图4-4所示。
图4-4  Spoke到Hub的mGRE隧道建立过程

                               
登录/注册后可看大图

  • Spoke向Hub注册请求
    管理员在Spoke上手工配置Hub的Tunnel地址和公网地址以后,Spoke将定时向Hub发送NHRP注册请求报文,该报文中包含Spoke的Tunnel地址和公网地址。
  • Hub向Spoke注册应答
    Hub从NHRP注册请求报文中提取Spoke的Tunnel地址和公网地址(见图4-4中的红色字体),并生成NHRP映射表,进而建立两者之间的mGRE隧道。

Spoke定时向Hub发送注册消息,这样就使Hub的NHRP映射表在老化时间到来前重新计时,确保分支与总部一直能够维持隧道关系。

分支间路由学习DSVPN支持两种分支间路由学习方式:
  • 分支间相互学习路由(非shortcut方式)
    采用这种方式时,源分支到目的分支子网的路由下一跳为目的分支的Tunnel地址(见图4-5中的路由表),每个分支需要学习到所有对端的路由数据。这种情况下,Spoke会消耗大量的CPU和内存资源,对其路由表容量和性能有较高的要求。而实际应用中,Spoke的性能往往较低,能存放的路由数量有限。因此,这种路由学习方式只适用于网络节点较少、路由信息量小的中小型网络。
  • 分支路由汇聚到总部(shortcut方式)
    采用这种方式时,源分支到目的分支子网的路由下一跳为总部的Tunnel地址(见图4-6中的路由表),Spoke只需存放到Hub的路由。由于Spoke减少了自身的路由数量,所以该路由学习方式适用于那些网络规模大、分支较多的大型网络。



建立Spoke与Spoke之间的mGRE隧道经过上述两个环节后,各分支已经有到对端分支的路由,但还没有对端分支的Tunnel地址/子网地址与公网地址的NHRP映射表。要建立Spoke与Spoke之间的mGRE隧道,就要借助NHRP协议和学习到的路由来生成NHRP映射表。不同的路由学习方式,分支学习到的路由不同,NHRP映射表的生成过程也不同:
  • 非shortcut方式下,源Spoke可以学习到目的Spoke的Tunnel地址。因此,源Spoke可以直接根据目的Spoke的Tunnel地址来查找目的Spoke的公网地址,生成目的Spoke的Tunnel地址与公网地址的NHRP映射表。
  • shortcut方式下,所有Spoke的路由下一跳全部都是Hub的Tunnel地址,源Spoke无法学习到目的Spoke的Tunnel地址。因此,源Spoke只能根据报文的目的地址来查找目的Spoke的公网地址,生成目的Spoke的子网地址与公网地址的NHRP映射表。

具体过程分别如图4-5图4-6所述。
建立Spoke与Spoke之间的mGRE隧道(非shortcut方式)
图4-5所示为采用非shortcut路由学习方式时Spoke与Spoke之间的mGRE隧道建立过程。
图4-5  Spoke与Spoke之间的mGRE隧道建立过程(非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映射表中(见图4-5中的红色字体)。
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。
  • Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的Tunnel地址和公网地址,更新到自己的NHRP映射表中(见图4-5中的红色字体),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与Spoke之间的mGRE隧道(shortcut方式)
图4-6所示为采用shortcut路由学习方式时Spoke与Spoke之间的mGRE隧道建立过程。
图4-6  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域(见nhrp network-id),就构建并向Spoke1发送NHRP重定向报文(携带Hub的Tunnel地址和公网地址,以及需要解析的数据报文的目的地址192.168.2.0)。

  • 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映射表中(见图4-6中的红色字体)。
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的子网地址192.168.2.0、Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。

  • Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的子网地址和公网地址,更新到自己的NHRP映射表中(见图4-6中的红色字体),Spoke1与Spoke2之间的动态mGRE隧道随即建立。
    当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)查找NHRP映射表,找到Spoke2的公网地址2.2.2.2,即可根据公网地址2.2.2.2将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。

当Spoke2下的用户首次访问Spoke1下的用户时,也将触发Spoke2与Spoke1之间建立动态mGRE隧道,其过程类似Spoke1。

游客,如果您要查看本帖隐藏内容请回复


















发表于 2021-7-16 11:23:17 | 显示全部楼层
版主厉害!谢谢分享!
6# 2021-7-16 11:23:17 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-7-18 19:55:59 | 显示全部楼层
谢谢分享                 
7# 2021-7-18 19:55:59 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2021-10-23 15:22:28 | 显示全部楼层
华为DSVPN(动态智能VPN)配置详解
8# 2021-10-23 15:22:28 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-6-10 16:29:49 | 显示全部楼层
谢谢楼主分享609515
10# 2022-6-10 16:29:49 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-6-10 16:32:01 | 显示全部楼层
okokokkkook
11# 2022-6-10 16:32:01 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2022-6-12 11:33:36 | 显示全部楼层
感谢楼主分享
12# 2022-6-12 11:33:36 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-9 13:51 , Processed in 0.106662 second(s), 13 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表