OpenNHRP实现安全的多云互联

背 景:

在今天这个云计算的时代,基于云计算理念、构建在计算、存储、网络等基础资源之上的云平台逐步大行其道;而随着多种云平台技术路线的发展,多个云平台开始出现在企业IT市场,需要一种统一的构建在云平台之上的管理平台进行统一管控,而且在大型企业内部,异构复杂的基础架构带来的统一管理需求也在进一步发展,因此云管理平台以前所未有的速度成功深入到企业级云市场。多云竞比、跨云部署是企业在面临云计算特别是公有云冲击下的考量点之一,与之带来的跨云管理则是我们无法回避的问题。

针对多云CMP,市场上已经有多家产品,做的都挺不错的,比如:行云管家,FIT2CLOUD,TiOps等,但大都只是实现了多云管理,却无法实现多云的互通。由于多家公有云的竞争,导致多云很难实现互通互管。

有些数据中心有着天然的优势,因为他们同时对接了阿里云,腾讯云,华为云等,但这毕竟是资源上优势,价格昂贵,对大多小微企业是一笔比较大的支出。

当然也可以使用云平台自带的IPSec VPN服务。但是如果只有2个云平台互通还好,如果扩展到3个,5个甚至更多的话,两两之间都需要隧道。这样无论是在管理上,还是效率上都会大打折扣。所以就迫切需要一种可以实现多站点之间高效互通的方式。

OpenNHRP实现安全的多云互联

01.下一跳解析协议(NHRP)

下一跳解析协议(NHRP)用于连接到非广播多路访问(NBMA)式子网络的源站(主机或路由器)决定到达目标站间的 “ NBMA 下一跳 ”的互联网络层地址和 NBMA 子网地址。如果目的地与 NBMA 子网连接, NBMA 下一跳就是目标站;否则, NBMA 下一跳是从 NBMA 子网到目标站最近的出口路由器。

NHRP 被设计用于 NBMA 子网下的多重协议互联网络层环境中。

NHRP:下一跳解析协议(NHRP:Next Hop Resolution Protocol)

在到达要生成响应的站之前, NBMA 子网内的 NHRP 解析请求经过一个甚至更多的跳。包括源站在内的每个站选择一个它要转发 NHRP 解析请求所去的邻近 NHS 。

NHS 选择过程是:在能返回路由决定的协议层路由表上应用目的协议层地址。这种路由选择决定用于转发 NHRP 请求给下游的 NHS 。先前提到的目标协议层地址存放在 NHRP 解析请求包中。注意:即使一个协议层地址被用来获取路由选择决定, NHRP 包不会被封装于协议层头,而是通过由它自己的头描述的封装形式存放于 NBMA 层。

现在大部分的网络设备都支持NHRP协议,但是在公有云上,平台并不提供NHRP设备。感谢万能的开源,OpenNHRP作为NHRP的开源实现,功能完善,性能强。

02.MGRE、IPSec、NHRP 的概念及相互关系

GRE是一个在任意一种网络层协议上封装任意一个其它网络层协议的协议,DMVPN中是将IP包封装进另一个IP包并加上新的IP头。它有两种形式:Point-to-point(GRE),Point-to-multipoint(MGRE)。

IPSec是一种安全隧道技术,但不支持组播和广播的加密。在DMVPN中,要用到动态路由协议,动态路由协议用组播和广播宣告路由信息,所以不能直接使用IPSec加密。GRE隧道支持组播和广播,所以DMVPN中采用GRE隧道,但是GRE隧道的数据是没有加密的,在因特网上传送不安全。因为GRE隧道的数据包是单播的,所以GRE隧道的数据包采用IPSec加密,即GRE Over IPSec。GRE隧道的配置已经包括了GRE隧道对端的地址,这个地址同时也是IPSec隧道的对端地址,通过将GRE隧道与IPSec绑定,GRE隧道一旦建立,立刻触发IPSec加密。

MGRE是将GRE点对点隧道扩展成一点与多点建立隧道。一个MGRE接口包括一个IP地址、一个隧道源、一个隧道密钥,与GRE隧道不同,它没有隧道目的。因为MGRE隧道不定义隧道目的地,所以它依赖NHRP,NHRP告诉MGRE向哪里发送数据包。NHRP协议的作用是将隧道的IP地址映射到NBMA地址,可以是静态映射和动态映射。

MGRE怎样使用NHRP呢?当转发一个IP数据包时,总是沿着下一跳地址将数据包传给MGRE接口,下一跳地址就是对端的隧道IP地址。MGRE在NHRP表中查找下一跳地址映射的对端NBMA地址。然后MGRE将数据包封装为另一个IP包的净负荷,新的IP包目的地址就是对端的NBMA地址。组播包的地址由NHRP配置中指定。

OpenNHRP实现安全的多云互联

03.OpenNHRP – 安装 配置(Ubuntu)

安装比较简单,本处为编译,实际环境是有对应的deb或者rpm安装包的。

OpenNHRP实现安全的多云互联

OpenNHRP实现安全的多云互联

通用配置mGRE + IPsec(所有节点)

OpenNHRP实现安全的多云互联

通用配置IKE + IPsec(所有节点)

OpenNHRP实现安全的多云互联

Hub 配置 (OpenNHRP daemon)

OpenNHRP实现安全的多云互联

Spoke配置(OpenNHRP daemon)

OpenNHRP实现安全的多云互联

节点路由配置

OpenNHRP实现安全的多云互联

开启所有节点服务

OpenNHRP实现安全的多云互联

OpenNHRP实现安全的多云互联

命令查看

OpenNHRP实现安全的多云互联

spoke之间的通信在第一次流量被重定向后,以后所有的流量都不在走hub核心,会直接互通。top如下:

结 语:

最后,总结下DMVPN的整体解决方案

DMVPN是通过多点GRE(mGRE)和下一跳解析协议(NHRP)与IPSec相结合实现的。在DMVPN解决方案中,利用IPSec实现加密功能,利用GRE或多点GRE(mGRE)建立隧道,利用NHRP解决分支节点的动态地址问题。DMVPN只要求中心节点必须申请静态的公共IP地址。(如果用 DNS 的话,中心节点不是也可以动态了吗?)

GRE隧道支持多播或广播(multicast/broadcast)IP包在隧道内传输。因此,DMVPN网络支持在IPSec和mGRE隧道之上运行动态路由协议。需要指出的是,NHRP必须被配置为动态多播映射,这样,当分支路由器在NHRP服务器(中心路由器)上注册单播映射地址时,NHRP会同时为这个分支路由器建立一个多播/广播(multicast/broadcast)映射

通过DMVPN,分支之间可动态建立隧道传输数据,当两个分支在同一城市,而中心在另一城市时,分支之间直接发送数据可以减小延时,降低对中心路由器资源消耗,并且更经济;增加分支不用改变中心和其他分支的配置,维护工作量成倍降低;分支节点可使用动态IP地址,节约了公网IP地址资源;动态隧道的特点使它的网络规模可以很大。它的这些优势使它特别适合于分支机构点多面广的企业和公司做安全互联。

本次配置是主要是手工安装OpenNHRP,开源路由系统VyOS原生支持OpenNHRP,各大云厂商的镜像市场也有VyOS镜像,所以完全可以使用VyOS替换。同时VyOS也可以选择Debian镜像手工安装配置,大大减少维护管理时间。

作者:祝祥 新钛云服运维架构师

七年私有云运维和架构经验,曾任刻通云运维工程师、微烛云和某互联网金融平台首席运维架构师。拥有OpenStack、CCIE、阿里云、ZStack等技术认证。有上万台云主机,PB级别分布式存储运维经验。熟悉各种虚拟化技术,软硬件,网络,容器编排等技术,拥有python开发经验。热爱各种开源技术。