越来越多的企业希望利用公共网络组建VPN(Virtual Private Network,虚拟私有网络),连接地理位置不同的多个分支机构。然而,企业分支机构通常采用动态地址接入公共网络,通信一方无法事先知道对端的公网地址,这就为组建VPN提出了一个难题。
DVPN(Dynamic Virtual Private Network,动态虚拟私有网络)通过VAM(VPN Address Management,VPN地址管理)协议收集、维护和分发动态变化的公网地址等信息,解决了无法事先获得通信对端公网地址的问题。DVPN可以在企业网各分支机构使用动态地址接入公网的情况下,在各分支机构间建立VPN。
DVPN把连接到公网上的各节点组成的网络看作VPN网络,公网作为VPN网络的链路层,DVPN隧道作为企业内部子网之间的虚通道,相当于网络层。企业各分支设备动态接入到公网中,其公网地址对于通信的另一端来说是未知的,而对于建立端到端的安全隧道,公网地址是必须的条件之一。DVPN通过VAM获取通信对端的公网地址。
VAM协议是DVPN方案的主要协议,负责收集、维护、分发公网地址等信息,帮助用户快捷、方便的建立起内部的安全隧道。企业内部子网之间转发的数据报文通过路由协议得到其私网下一跳,通过VAM协议查询到私网下一跳对应的公网地址,并利用该公网地址做为隧道的目的地址进行封装,最后交给已建立起的安全隧道发送到目的端用户。
DVPN方案中有几个关键的角色:
DVPN节点为动态VPN隧道两端的设备,可以是网络设备或主机。DVPN节点参与隧道的建立,需要实现VAM的客户端功能。
VAM Server是接受DVPN节点向其注册信息的服务器,负责管理、维护各DVPN节点的信息。目前VAM Server一般运行在较高性能的路由器设备上。
VAM Client向VAM Server注册自己的私网地址、公网地址、VAM标识等信息,向VAM Server查询其它VAM Client的信息。DVPN节点上需要实现VAM Client功能。文中涉及到VAM Client的地方,如果不是特别说明,是指对Hub和Spoke的统称。
Hub是一种VAM Client,一个VPN网络的中心设备,它是路由信息交换的中心。在Hub-Spoke组网中,它也是数据转发的中心。
Spoke是一种VAM Client,通常是企业分支机构的网关设备,该节点不会转发收到的其它DVPN节点的数据。
AAA(Authentication, Authorization and Accounting,认证、授权和计费)服务器,用于对用户进行认证和计费管理。
DVPN采用Client/Server模式,工作在TCP/IP协议栈的应用层,使用UDP作为传输协议。按照工作方式的不同,可将一个VPN域中的设备划分为一个Server和多个Client,Server的公网地址为静态地址,Client的公网地址既可以静态配置也可以动态获取,而Client的私网地址则需要按照规划静态分配。在同一个VPN域内,要求所有节点的私网地址在同一个网段内。
每一个Client向Server注册自己的公网地址和私网地址的对应关系。Client向Server注册成功之后,其他Client可以从Server查询到该Client的公网地址,以便在Client之间建立DVPN隧道。Server与Client间通过VAM协议进行消息传递,Client之间通过DVPN隧道协议进行隧道的建立、维护和删除。任何节点退出或加入VPN都能自动通知Server。
DVPN具有两种典型的组网结构:
l Full-Mesh(全互联)网络:Spoke之间可以建立隧道直接通信;Hub主要作为路由信息交换的中心。如图 1所示,作为Spoke的Client节点在向VAM Server注册后获得该VPN域中Hub的信息,并与Hub建立永久的隧道连接;任意的两个Spoke之间也可以直接建立隧道,但该隧道是动态的,当在一段规定时间(Spoke-Spoke隧道空闲超时时间)内没有数据报文交互时,则删除该隧道。
图 1 Full-Mesh组网示意图
l Hub-Spoke网络:Spoke之间不能建立隧道直接通信,只能通过Hub转发数据;Hub即作为路由信息交换的中心,又作为数据转发的中心。如图 2所示,Spoke与Hub建立永久的隧道连接,Spoke之间的数据通过Hub转发。
图 2 Hub-Spoke组网示意图
DVPN的工作过程分为连接初始化、注册和隧道建立三个阶段,下面对这三个阶段做简单说明。
Client在第一次与Server连接时,首先进行连接的初始化,双方协商决定是否需要对VAM协议报文进行保护。如果需要保护,则协商出报文加密和完整性验证算法及生成加密密钥和完整性验证密钥,并对协商出的结果作出确认。只有连接初始化完成后,才能进入注册阶段。
如图 3所示,连接初始化的过程为:
(1) Client通过连接请求报文将自s己支持的完整性验证算法、加密算法等发送给Server。
(2) Server按照优先级从高到低的顺序从自己支持的算法列表中依次选择算法,与Client发送的算法列表进行匹配。如果匹配成功,则使用该算法,Server通过连接响应报文将算法协商结果发送给Client,同时,Server和Client生成加密密钥和完整性验证密钥。
(3) Client和Server分别利用初始化完成报文验证算法和密钥协商是否成功。
如图 4所示,注册阶段的具体过程为:
(1) Client向Server发送注册请求报文,注册请求报文中包括DVPN节点的信息。
(2) Server收到注册请求报文后,根据配置决定是否对该Client进行身份认证。如果配置为不认证,则直接注册Client信息并向Client发送注册成功响应,身份认证步骤省略;如果配置为认证,Server向Client回应身份认证请求,并指明需要的认证方法(CHAP认证时还返回一个随机数)。
(3) Client向Server提交自己的身份信息。
(4) Server收到Client的身份认证信息后向AAA服务器发起认证,收到AAA认证成功的响应后再发送计费请求,当Server收到计费成功响应后,向Client发送注册成功响应报文,注册成功报文会携带下发给Client的Hub信息。
当Spoke注册成功后,要和Hub建立永久隧道,一个Spoke最多和两个Hub建立永久隧道。如果在一个VPN域中有两个Hub,则Hub之间需要建立永久隧道。具体隧道建立流程如图 5所示:
l Hub-Spoke:Spoke注册成功后,要与所在VPN中的Hub建立永久隧道。Spoke只要收到Server下发的Hub信息,就会检查与这些Hub地址之间是否有对应的隧道存在。如果隧道不存在则向Hub发送隧道建立报文;如果隧道存在则不建立隧道。
l Hub-Hub隧道:Hub注册成功后,Server会将所在VPN中已注册成功的Hub地址添加到注册响应报文中下发给Hub。Hub检查这些地址与其之间是否有对应的隧道存在。如果隧道不存在则向其发送隧道建立报文;如果隧道存在则不建立隧道。
l Spoke-Spoke隧道:在Full-Mesh组网中,Spoke收到某个数据报文后,若没有查到相应的能够转发该报文的隧道,则会向Server发送地址解析请求,根据得到的地址解析响应向对端Spoke发起建立隧道的请求。
(2) 隧道接收方收到建立隧道的请求后,保存相应的隧道连接信息,并向发起方发送建立隧道响应报文。如果隧道发起方收到隧道建立成功的响应报文,表示隧道建立成功,否则表示隧道建立失败。
当隧道发起方在NAT网关后侧时,则可以建立穿越NAT的Spoke-Spoke隧道;如果隧道接收方在NAT网关后侧,则数据包要由Hub转发,直到接收方发起隧道建立请求。如果双方都在NAT网关后侧,则它们都无法与对方建立隧道,所有的数据包都只能从Hub转发。
隧道两端的Tunnel接口不需要配置隧道目的地址,VAM Client在VAM Server上注册自己的公/私网地址,当需要建立隧道时,可以从VAM Server获取对端Client的公网地址,从而动态的建立隧道。当VAM Client的IP地址改变时,会向VAM Server重新注册,从而实现了对动态IP地址的支持。
初始化过程完成之后,VAM Client要向VAM Server注册,注册过程中可以要求对VAM Client进行身份认证,VAM支持PAP和CHAP两种认证方式。VAM Server通过AAA对加入到VPN域的客户端进行身份认证,认证通过后VAM Client才能接入到VPN网络。
VAM Client和VAM Server必须配置统一的预共享密钥,用于生成加密/完整性验证的密钥。VAM Client/VAM Server通过报文解密、完整性验证是否成功,判断二者的预共享密钥是否相同,从而实现对VAM Server/VAM Client的身份认证。
可以选择对VAM协议报文进行加密,加密算法支持AES-128、DES和3DES算法。
DVPN隧道的数据报文可以由IPsec安全框架保护,采用ESP安全协议,通过IKE协商安全策略。
VAM Server对整个VPN域的策略进行统一的管理。
VAM Server上可以配置多个VPN域,每台VAM Server上最多可以配置10个VPN域。