背景技术
越来越多的企业希望利用公共网络组建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方案中有以下几个关键的角色:
1、DVPN节点
DVPN节点为动态VPN隧道两端的设备,可以是网络设备或主机。DVPN节点参与隧道的建立,需要实现VAM的客户端功能。
2、VAM Server(服务器)
VAM Server是接受DVPN节点向其注册信息的服务器,负责管理、维护各DVPN节点的信息。目前VAM Server一般运行在较高性能的路由器设备上。
3、VAM Client(客户端)
VAM Client向VAM Server注册自己的私网地址(DVPN隧道的接口地址)、公网地址等信息,向VAM Server查询其它VAM Client的信息。DVPN节点上需要实现VAM Client功能。
4、Hub节点
Hub节点是一种VAM Client,一个VPN网络的中心设备,它是路由信息交换的中心。在Hub-Spoke组网中,它也是数据转发的中心。
5、Spoke节点
Spoke节点是一种VAM Client,通常是企业分支机构的网关设备,该节点不会转发收到的其它DVPN节点的数据。
DVPN采用Client/Server模式,工作在TCP(Transmission Control Protocol,传输控制协议)/IP(Internet Protocol,互联网协议)协议栈的应用层。DVPN支持UDP(User Datagram Protocol,用户数据报协议)和GRE(Generic RoutingEncapsulation,通用路由封装)两种隧道封装类型。按照工作方式的不同,可将一个VPN域中的设备划分为一个Server和多个Client,Server的公网地址为静态地址,Client的公网地址既可以静态配置也可以动态获取,而Client的私网地址则需要按照规划静态分配。在同一个VPN域内,要求所有节点的私网地址在同一个网段内。
每一个Client向Server注册自己的公网地址和私网地址(DVPN隧道的接口地址)的对应关系。Client向Server注册成功之后,其他Client可以从Server查询到该Client的公网地址,以便在Client之间建立DVPN隧道。Server与Client间通过VAM协议进行消息传递,Client之间通过DVPN隧道协议进行隧道的建立、维护和删除。任何节点退出或加入VPN都能自动通知Server。
参见图1和图2,现有技术中DVPN具有两种典型的组网结构:
Full-Mesh(全互联)网络:Spoke节点之间可以建立隧道直接通信;Hub节点主要作为路由信息交换的中心。作为Spoke节点的Client节点在向VAMServer注册后获得该VPN域中Hub节点的信息,并与Hub节点建立永久的隧道连接;任意的两个Spoke节点之间也可以直接建立隧道。
Hub-Spoke网络:Spoke节点之间不能建立隧道直接通信,只能通过Hub节点转发数据;Hub节点既作为路由信息交换的中心,又作为数据转发的中心。如图2所示,Spoke节点与Hub节点建立永久的隧道连接,Spoke节点之间的数据通过Hub节点转发。
VAM协议采用Client-Server结构,工作在TCP/IP协议栈的应用层,使用UDP作为传输协议。Server监听端口号为18000,Client端口号可选用未使用的任意端口。
VAM报文用于VAM Client和VAM Server之间的通信。VAM报文被封装在UDP中,其内容由以下两个部分组成:
固定头:该部分长度是固定的,且每个报文中必须携带;
属性部分:该部分由一系列属性组成,每个属性由TLV形式表示。每个报文中包括的属性由固定头中的报文类型决定。
VAM报文固定头格式如表1所示:
表1
其中,各字段说明如下:
Version:版本号。
Type:消息的类型。例如:
05------注册请求
06------注册响应
13------Keepalive
Length:报文的总长度,从Version字段开始。
Sequence Number:报文序列号,用于防重放。
Flags:标志位。
Code:代表是错误码。
ExtFlags:扩展标志位。
VAM报文属性部分以TLV的形式表示,其格式如表2所示:
表2
其中,各字段说明如下:
Type:属性类型代码。
Length:属性的Value字段的字节数,不包括Type和Length字段。
Value:属性的值。一个空属性只有一个属性头,没有Value字段。
在现有技术中,通过DVPN技术,使分布在不同分支的私有网络,连接成一个互通的、大的私有网络。DVPN隧道建立以后,路由协议通过隧道进行邻居发现、路由更新,并建立路由表。
目前,DVPN客户端支持的路由协议为OSPF(Open Shortest Path FirstInterior Gateway Protocol,开放式最短路径优先)和BGP(Border GatewayProtocol,边界网关协议),也可以使用静态路由;
采用OSPF路由协议时,如果是Full-Mesh网络,OSPF接口的网络类型需要配置为broadcast(广播);如果是Hub-Spoke网络,OSPF接口的网络类型需要配置为P2MP(Point to Multiple Point,点对多点)。
采用BGP路由协议时,如果是Full-Mesh网络,Hub和Spoke之间需要配置IBGP(Internal Border Gateway Protocol,内部边界网关协议),并将Hub配置为路由反射器;如果是Hub-Spoke网络,Hub和Spoke之间需要配置EBGP(External Border Gateway Protocol,外部边界网关协议)。
当一个网络上存在大量分支的时候,手工配置路由协议的过程比较繁琐;而当一个网络存在大量分支的时候,网段比较多的时候,如果使用动态路由协议,路由协议运行、协议状态的维护会给设备带来大量的资源消耗,会消耗很多的***资源。
如果使用静态路由,手工配置过程是一个繁琐的过程,特别是分支比较多的时候。对于Hub节点来说,因为配置比较多,也容易出现错误。
当需要DVPN网络中部分Spoke分支使用Hub-Spoke方式,部分Spoke分支采用Full-Mesh的组网方式时,无法通过OSPF实现;且使用BGP方式也很复杂。
发明内容
本发明的目的在于提供一种路由自动生成方法及其装置,以简化DVPN网络中的路由配置,提高DVPN网络中的路由生成效率,为此,本发明采用如下技术方案:
一种路由自动生成方法,应用于包含虚拟专用网络地址管理服务器VAMServer和VAM客户端Client的动态虚拟专用网络DVPN网络;该方法包括:
VAM Client向VAM Server发送注册请求,由所述VAM Server获取所述注册请求中携带的所述VAM Client的私网地址以及对应的网段;
当所述VAM Client接收到所述VAM Server响应的确认消息时,所述VAMClient从所述VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段,并根据获取到的所述其他已注册的VAM Client的私网地址和对应的网段生成到所述其他已注册的VAM Client的路由。
其中,当所述VAM Client为Hub节点时,
所述VAM Client从所述VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段,并根据获取到的所述其他已注册的VAM Client的私网地址和对应的网段生成到所述其他已注册的VAM Client的路由,具体为:
所述VAM Client从所述VAM Server中获取所述DVPN网络中各Spoke节点的私网地址和对应的网段,并分别生成到各Spoke节点的路由;其中,所述VAM Client到Spoke节点的路由的目的地址是该Spoke节点对应的网段,下一跳是该Spoke节点的私网地址。
其中,当所述VAM Client为Spoke节点时,所述VAM Client发送的注册消息中还携带自身的节点属性;
所述VAM Client从所述VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段,具体为:
所述VAM Client从所述VAM Server中获取所述DVPN网络中Hub节点的私网地址和对应的网段,并获取所述DVPN网络中其他Spoke节点的私网地址、对应的网段以及节点属性。
其中,所述VAM Client根据获取到的所述其他已注册的VAM Client的私网地址和对应的网段生成到所述其他已注册的VAM Client的路由,具体为:
当所述其他已注册的VAM Client为Hub节点时,所述VAM Client生成目的地址为该Hub节点对应的网段,下一跳为该Hub的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述VAM Client的节点属性为Hub-Spoke时,所述VAM Client生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述VAM Client以及所述其他已注册的VAM Client的节点属性均为Full-Mesh时,所述VAM Client生成目的地址为该Spoke节点对应的网段,下一跳为该Spoke节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述VAM Client的节点属性为Full-Mesh,所述其他已注册的VAM Client的节点属性为Hub-Spoke时,所述VAM Client生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由。
其中,还包括:
当VAM Client中DVPN的相关配置被删除时,所述VAM Client删除自身生成的路由;或,
当VAM Client在预设时间内未接收到所述VAM Server对keepalive报文的响应时,所述V AM Client删除自身生成的路由;或,
当VAM Client接收到删除特定VAM Client的消息时,所述VAM Client删除自身生成的目的地址为该特定VAM Client对应的网段的路由;或,
当VAM Client接收到增加特定VAM Client的消息时,所述VAM Client生成目的地址为该特定VAM Client对应的网段的路由;或,
当VAM Client接收到修改特定VAM Client的节点属性的消息时,所述VAM Client根据自身的节点属性和该特定VAM Client修改后的节点属性更新到目的地址为该特定VAM Client对应的网段的路由。
其中,还包括:
当VAM Client为Spoke节点时,所述VAM Client判断自身生成的路由中是否存在下一跳相同,且目的地址相互包含的路由,并当判断为是时,将所述路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。
其中,还包括:
当VAM Client为Spoke节点,且生成了一条新的路由时,所述VAM Client判断自身记录的生效路由中是否存在下一跳与该新生成的路由的下一跳相同,且目的地址与该新生成的路由的目的地址相互包含的生效路由;
若不存在,则将该新生成的路由设置为生效路由;
若存在,则当任一生效路由与该新生成的路由的下一跳相同,且目的地址包含该新生成的路由的目的地址时,将该新生成的路由设置为未生效路由;当任一生效路由与该新生成的路由的下一跳相同,且目的地址被该新生成的路由的目的地址包含,将该生效路由设置为未生效路由,将该新生成的路由设置为生效路由。
其中,还包括:
当所述VAM Client为Spoke节点,且接收到删除特定生效路由的指示消息时,所述VAM Client删除该特定生效路由,并将自身记录的与该特定生效路由下一跳相同,且目的地址被该特定生效路由的目的地址包含的未生效路由设置为生效路由;
所述VAM Client判断自身记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由,并当判断为是时,将所述生效路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。
其中,所述VAM Server中记录有对应VAM Client注册信息变化的事件,并记录有相应事件已下发的VAM Client;
该方法还包括:
VAM Client向VAM Server发送keepalive报文,并当接收到所述VAMServer返回的响应报文时,获取该响应报文中携带的事件;其中,VAM Server接收到VAM Client发送的keepalive报文后,将自身记录的未下发给该VAMClient的事件携带在响应报文中通知给该VAM Client;
所述VAM Client根据获取到的事件更新生成的路由。
一种路由交换设备,可应用为虚拟专用网络地址管理VAM客户端Client,应用于包含VAM服务器Server的动态虚拟专用网络DVPN网络,该路由交换设备包括:
发送模块,用于向VAM Server发送注册请求,由所述VAM Server获取所述注册请求中携带的所述应用为VAM Client的路由交换设备的私网地址以及对应的网段;
获取模块,用于当所述应用为VAM Client的路由交换设备接收到所述VAM Server响应的确认消息时,从所述VAM Server中获取其他已注册的VAMClient的私网地址和对应的网段;
路由生成模块,用于根据获取到的所述其他已注册的VAM Client的私网地址和对应的网段生成到所述其他已注册的VAM Client的路由。
其中,所述获取模块具体用于,当所述应用为VAM Client的路由交换设备为Hub节点时,从所述VAM Server中获取所述DVPN网络中各Spoke节点的私网地址和对应的网段;
所述路由生成模块具体用于,分别生成到所述各Spoke节点的路由;其中,所述应用为VAM Client的路由交换设备到Spoke节点的路由的目的地址是该Spoke节点对应的网段,下一跳是该Spoke节点的私网地址。
其中,所述发送模块还用于,当所述应用为VAM Client的路由交换设备为Spoke节点时,在所述注册消息中携带自身的节点属性;
所述获取模块具体用于,从所述VAM Server中获取所述DVPN网络中Hub节点的私网地址和对应的网段,并获取所述DVPN网络中其他Spoke节点的私网地址、对应的网段以及节点属性。
其中,所述路由生成模块具体用于,
当所述其他已注册的VAM Client为Hub节点时,生成目的地址为该Hub节点对应的网段,下一跳为该Hub的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备的节点属性为Hub-Spoke时,生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备以及所述其他已注册的VAM Client的节点属性均为Full-Mesh时,生成目的地址为该Spoke节点对应的网段,下一跳为该Spoke节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备的节点属性为Full-Mesh,所述其他已注册的VAM Client的节点属性为Hub-Spoke时,生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由。
其中,还包括:
路由管理模块,用于当所述应用为VAM Client的路由交换设备中DVPN的相关配置被删除时,删除所述路由生成模块生成的路由;或,
当所述应用为VAM Client的路由交换设备在预设时间内未接收到所述VAM Server对keepalive报文的响应时,删除所述路由生成模块生成的路由;或,
当所述应用为VAM Client的路由交换设备接收到删除特定VAM Client的消息时,删除所述路由生成模块生成的目的地址为该特定VAM Client对应的网段的路由;或,
当所述应用为VAM Client的路由交换设备接收到修改特定VAM Client的节点属性的消息时,根据所述应用为VAM Client的路由交换设备的节点属性和该特定VAM Client修改后的节点属性更新到目的地址为该特定VAM Client对应的网段的路由;
所述路由生成模块还用于,当所述应用为VAM Client的路由交换设备接收到增加特定VAM Client的消息时,生成目的地址为该特定VAM Client对应的网段的路由。
其中,还包括:
判断模块,用于当所述应用为VAM Client的路由交换设备为Spoke节点时,判断所述应用为VAM Client的路由交换设备生成的路由中是否存在下一跳相同,且目的地址相互包含的路由;
所述路由管理模块还用于,当所述判断模块判断为是时,将所述路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。
其中,其特征在于,
所述判断模块还用于,当所述应用为VAM Client的路由交换设备为Spoke节点,且所述路由生成模块生成了一条新的路由时,判断所述应用为VAMClient的路由交换设备记录的生效路由中是否存在下一跳与该新生成的路由的下一跳相同,且目的地址与该新生成的路由的目的地址相互包含的生效路由;
所述路由管理模块具体用于,若所述判断模块的判断结果为不存在,则将所述新生成的路由设置为生效路由;若所述判断模块的判断结果为存在,则当任一生效路由与所述新生成的路由的下一跳相同,且目的地址包含该新生成的路由的目的地址时,将所述新生成的路由设置为未生效路由;当任一生效路由与该新生成的路由的下一跳相同,且目的地址被该新生成的路由的目的地址包含,将该生效路由设置为未生效路由,将该新生成的路由设置为生效路由。
其中,所述路由管理模块还用于,当所述应用为VAM Client的路由交换设备为Spoke节点,且接收到删除特定生效路由的指示消息时,删除该特定生效路由,并将所述应用为VAM Client的路由交换设备记录的与该特定生效路由下一跳相同,且目的地址被该特定生效路由的目的地址包含的未生效路由设置为生效路由;通过所述判断模块判断所述应用为VAM Client的路由交换设备记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由,并当所述判断模块判断为是时,将所述生效路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由;
所述判断模块还用于,判断所述应用为VAM Client的路由交换设备记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由。
其中,所述VAM Server中记录有对应VAM Client注册信息变化的事件,并记录有相应事件已下发的VAM Client;
所述发送模块还用于,向所述VAM Server发送keepalive报文;
所述获取模块还用于,当所述应用为VAM Client的路由交换设备接收到所述VAM Server返回的响应报文时,获取该响应报文中携带的事件;其中,VAM Server接收到应用为VAM Client的路由交换设备发送的keepalive报文后,将自身记录的未下发给该应用为VAM Client的路由交换设备的事件携带在响应报文中通知给该VAM Client;
所述路由管理模块还用于,根据获取到的事件更新所述路由生成模块生成的路由。
本发明具有如下有益效果:
在本发明实施例中,当VAM Client向VAM Server进行注册时,在注册请求中携带自身的私网地址以及网段信息,并当接收到VAM Server响应的注册确认消息时,从VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段,并根据获取到的其他已注册的VAM Client的私网地址和对应的网段生成到其他已注册的VAM Client的路由,实现了DVPN网络中各节点路由的自动生成,提高了DVPN网络路由生成效率。
具体实施方式
针对现有技术存在的上述问题,本发明实施例提供了一种DVPN网络中路由自动生成的技术方案。在该技术方案中,当VAM Client向VAM Server进行注册时,在注册请求中携带自身的私网地址(即DVPN隧道接口地址)以及网段信息,并当接收到VAM Server响应的注册确认消息时,从VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段,并根据获取到的其他已注册的VAM Client的私网地址和对应的网段生成到其他已注册的VAMClient的路由,实现了DVPN网络中各节点路由的自动生成,提高了DVPN网络路由生成效率。
其中,当VAM Client为Spoke节点时,VAM Client向VAM Server发送的注册请求中还需携带自身的节点属性(Hub-Spoke或Full-Mesh)。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图3所示,为本发明实施例提供的一种路由自动生成方法的流程示意图,可以包括以下步骤:
步骤301、VAM Client向VAM Server发送注册请求,由所述VAM Server获取该注册请求中携带的VAM Client的私网地址以及对应的网段。
具体的,在本发明实施例中,VAM Client向VAM Server发送的注册请求中可以携带自身的私网地址、公网地址以及自身对应的网段,VAM Server在接收到该注册请求后,可以获取并记录相应信息。
步骤302、当VAM Client接收到VAM Server响应的确认消息时,VAMClient从VAM Server中获取其他已注册的VAM Client的私网地址以及其对应的网段,并根据获取到的其他已注册的VAM Client的私网地址和对应的网段生成到其他已注册的VAM Client的路由。
具体的,在本发明实施例中,当VAM Client需要生成路由时(完成注册之后),VAM Client可以从VAM Server中获取其他已注册的VAM Client的私网地址和对应的网段。其中,对于Hub节点,其他已注册的VAM Client包括DVPN网络中的各Spoke节点;对于Spoke节点,其他已注册的VAM Client包括DVPN网络中的Hub节点和其他Spoke节点,且对于Spoke节点,当其他已注册的VAM Client是Spoke节点时,其还需从VAM Server中获取该其他已注册的VAM Client的节点属性。
VAM Client获取到生成路由的相关信息之后,根据获取到的信息生成路由的具体方式可以分为如下几种情况:
情况一、VAM Client为Hub节点
具体的,当VAM Client为Hub节点时,需要生成到各Spoke节点的路由;其中,对于Hub节点到某一Spoke节点的路由,其目的地址为该Spoke节点对应的网段,下一跳是Spoke节点的私网地址。
情况二、VAM Client为Spoke节点
具体的,当VAM Client为Spoke节点时,需要生成到Hub节点以及其他Spoke节点的路由;其中:
当对端节点为Hub节点时,该VAM Client到对端Hub节点的路由的目的地址为该Hub节点对应的网段,下一跳是Hub节点的私网地址;
当对端节点为Spoke节点,且VAM Client自身的节点属性为Hub-Spoke,则VAM Client到对端Spoke节点的路由的目的地址为对端Spoke节点对应的网段,下一跳是Hub节点的私网地址;
当对端节点为Spoke节点,且VAM Client自身的节点属性和对端Spoke节点的节点属性均为Full-Mesh时,则VAM Client到对端Spoke节点的路由的目的地址为对端Spoke节点对应的网段,下一跳为对端Spoke节点的私网地址;
当对端节点为Spoke节点,且VAM Client自身的节点属性为Full-Mesh,对端Spoke节点的节点属性为Hub-Spoke时,则VAM Client到对端Spoke节点的路由的目的地址为对端Spoke节点对应的网段,下一跳为Hub节点的私网地址。
在本发明实施例中,从一个节点到另一个节点的路由数量与该另一个节点对应的网段的数量相关。例如,在DVPN网络中,节点B对应的网段数量为3(如192.168.1.0、192.168.2.0、192.168.3.0),则当节点A生成到节点B的路由时,共需要生成3条路由,目的地址分别为192.168.1.0、192.168.2.0、192.168.3.0。若节点A和节点B均为节点属性为Full-Mesh的Spoke节点,则对应的下一跳均为节点B的私网地址。其中,在本发明实施例中,为了便于描述,以网段对应的子网掩码表示相应的网段。
进一步地,在本发明实施例中,当VAM Server中的VAM Client的注册信息发生变化时,如:节点(VAM Client)新增或删除,VAM Client对应的网段发生变化、VAM Client的节点属性发生变化,VAM Server需要通知所有已注册的VAM Client,以使相应的VAM Client修改对应的路由。
具体的,在本发明实施例中,当VAM Server中VAM Client的注册信息发生变化时,VAM Server中产生对应的事件。如,VAM Client1对应的网段发生变化(如由192.168.1.0变为192.168.2.0),则VAM Server中产生对应的事件:VAM Client1的网段由192.168.1.0变为192.168.2.0。同时,对于所产生的事件,VAM Server需要记录该事件是否已经下发给各VAM Client。
当VAM Server接收到VAM Client发送的keeplive报文时,VAM Server查询所有事件,并将未通知给该VAM Client的事件携带在响应报文中发送给该VAM Client。其中,在一个响应消息中可以携带多个事件。
为了防止VAM Server发送给VAM Client的响应报文丢失,VAM Client收到响应报文后,需要通过keepalive报文回复。VAM Server收到该回复报文后,记录相应事件已经通知给该VAM Client。
需要注意的是,在本发明实施例,并不限于通过在keeplive报文的响应报文中携带事件通知VAM Client相应的注册信息变化,VAM Server也可以在VAM Client的注册信息发生变化时,主动通知所有注册的VAM Client,其具体实现在此不再赘述。
其中,在VAM Server上,当一个事件已经下发给所有注册的VAM Client后,VAM Server可以删除该事件。
相应地,VAM Client获知到VAM Server中注册信息发生变化后,可以对自身生成的路由进行相应的更新。
具体的,当VAM Client接收到删除某个VAM Client的消息时,删除自身生成的目的地址为该被删除的VAM Client对应的网段的路由;
当VAM Client接收到增加某个VAM Client的消息时,生成目的地址为该新增的VAM Client对应的网段的路由;
当VAM Client接收到某个VAM Client的节点属性发生变化的消息时,根据自身的节点属性和发生节点属性变化的VAM Client变化后的节点属性更新到目的地址为该发生节点属性变化的VAM Client对应的网段的路由。
例如,VAM Client1为节点属性为Full-Mesh的Spoke节点,VAM Client1接收到已注册的VAM Client2的节点属性由Full-Mesh变为Hub-Spoke的消息,则VAM Client1将自身生成的目的地址为VAM Client2对应的网段的路由的下一跳由VAM Client2的私网地址修改为Hub节点的私网地址。
需要注意的是,在本发明实施例中,VAM Client修改自身生成的路由的情况还包括:当VAM Client中DVPN的相关配置被删除,或VAM Client与VAMServer失去联系(如VAM Client在预设时间内未接收到VAM Server发送的keepalive报文的相应报文)时,VAM Client删除自身生成的路由。
进一步地,为了减少DVPN网络中Spoke节点中存储的转发表中路由的数量,提高转发效率,在本发明实施例中,Spoke节点可以判断自身生成的路由中是否存在下一跳相同,且目的地址相互包含的路由,并当判断为是时,将该路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。其中,生效路由下发给转发表,以指导报文转发;未生效路由则从转发表中删除。
例如,Spoke1生成的路由中包含如下4条路由,其下一跳均为Hub节点,目的地址分别为网段192.168.0.0、192.168.1.0、192.168.2.0以及192.168.3.0,由于网段192.168.1.0、192.168.2.0以及192.168.3.0均包含在网段192.168.0.0中,因此,Spoke1可以仅将目的地址为网段192.168.0.0的路由设置为生效路由,并下发给转发表,而其他三条路由则均设置为未生效路由。
当Spoke节点新生成一条路由时,Spoke节点判断自身记录的生效路由中是否存在下一跳与该新生成的路由的下一跳相同,且目的地址与该新生成的路由的目的地址相互包含的生效路由,若不存在,则将该新生成的路由设置为生效路由;若存在,则当任一生效路由与该新生成的路由的下一跳相同,且目的地址包含该新生成的路由的目的地址,将该新生成的路由设置为未生效路由;当任一生效路由与该新生成的路由的下一跳相同,且目的地址被该新生成的路由的目的地址包含时,将该生效路由设置为未生效路由,并将该新生成的路由设置为生效路由。
参见图4,为本发明实施例提供的一种路由聚合的流程示意图,可以包括以下步骤:
步骤401、当Spoke节点生成一条新的路由时,查询自身记录的生效路由。
步骤402、Spoke节点选择一条未被选择的生效路由,并判断该生效路由与新生成的路由的下一跳是否相同。若判断为是,则转至步骤403;否则,转至步骤405。
步骤403、Spoke节点判断该生效路由的目的地址是否包含了新生成的路由的目的地址,若判断为是,则将该新生成的路由设置为未生效路由,并结束流程;否则,转至步骤404;
步骤404、Spoke节点判断新生成的路由的目的地址是否包含了该生效路由的目的地址,若判断为是,则将该生效路由设置为未生效路由,并转至步骤405;否则,转至步骤405。
步骤405、Spoke节点判断是否还存在未被选择的生效路由,若判断为是,则转至步骤402;否则,将该新生的路由设置为生效路由,并结束流程。
相应地,当Spoke节点接收到VAM Server的消息,要删除某条路由时,如果该路由为生效路由,则Spoke节点在删除该路由后,还需要将自身生成的与该被删除的生效路由下一跳相同,且目的地址被该被删除路由的目的地址包含的未生效路由设定为生效路由;进一步地,Spoke节点需要判断自身记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由,并当判断为是时,将生效路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。
参见图5,为本发明实施例提供的一种删除路由的流程示意图,可以包括以下步骤:
步骤501、Spoke节点接收VAM Server发送的删除路由的指示消息。
步骤502、Spoke节点删除所请求删除的路由,并判断该路由是否为生效路由;若判断为是,则转至步骤503;否则,结束流程。
步骤503、Spoke节点将自身记录的下一跳与该被删除的路由相同,且目的地址被该被删除的路由包含的未生效路由设置为生效路由。
步骤504、Spoke节点判断生效路由中是否存在下一跳相同,且目的地址相互包含的路由,若判断为是,则转至步骤505;否则,结束流程。
步骤505、Spoke节点将下一跳相同,且目的地址相互包含的生效路由中目的地址被包含的路由设置为未生效路由,并结束流程。
其中,当Spoke节点修改了某条路由时,则相当于删除了一条路由后,又生成了一条新的路由,其具体实现在此不再赘述。
增加了以上聚合机制后,对于Hub-Spoke组网,在Hub节点进行网段注册的时候,可以注册几个大的网段,这些网段可以既包含Hub节点本地地址网段,也可以包含Spoke节点的地址网段。这样在Spoke上可能会聚合成几条路由,减少了转发表路由的数量,提高了转发效率。
为了使本发明实施例提供的技术方案进行更易理解,以下对本发明实施例提供的技术方案中的VAM报文进行详细说明。
VAM报文包含固定头和属性两个部分,固定头中Type字段决定了报文类型,每个报文类型包含不同的属性,属性以TLV形式表示。
参见图6,为本发明实施例提供的一种VAM报文属性部分格式的示意图,其中各字段的具体含义如下:
ModifyFlag:修改标志,最高的6、7两位(共8位,6、7两位即为第7位和第8位)用于标志修改连接的子网网段的方式:
00---不修改;01-增加;10---减少;11----保留;
第5位,修改节点类型属性;00---不修改,1---修改;
第4位,0---保留节点,1---删除节点;
NodeStyle:节点类型,使用最高的6、7位(共8位,6、7两位即为第7位和第8位);
00--保留;01--Full-Mesh;10--Hub-Spoke;11---保留;
Num of Subnet:本地连接网络的数目;
Len of VPN ID:VPN标识的长度。VPN标识以字符串表示;
Public Address Type:公网地址类型;
0x01------IPv4:4字节IPv4地址;
0x03------IPv6:16字节的IPv6地址;
Private Address Type:私网地址类型,定义同公网地址类型;
Public Address:公网地址,其结构和长度由Public Address Type指定;
Private Address:私网地址,其结构和长度由Private Address Type指定;公网地址和私网地址唯一标识号了一个VAM Client;
VPN Identity:VPN标识,以字符串表示,长度由Len of VPN ID指定;
Event ID:32bit,事件ID,VAM Server内部按事件来处理Client信息修改。VAM Server发送给VAM Client时携带该信息,是为了VAM Client回复确认消息的时候,也携带该信息,便于VAM Server查找对应事件;
Network Address和Network Address Mask:携带的本地网段信息。
在本发明实施例中,在VAM Client的注册请求报文中,可以携带该属性,以注册本地连接的网段信息和节点类型。
VAM Client可能会修改自己的信息,可以定义VAM Client属性更改报文(具体实现在此不再描述,只是在固定头中定义新的Type即可),在该属性更改报文中携带该属性,以进行相应修改。
在VAM Server通过keepalive报文,下发给VAM Client其它VAM Client信息改变的时候,可以携带该属性。而且可以携带多个,来表示多个VAM Client信息改变。
通过以上流程可以看出,在本发明实施例中,各Spoke节点和Hub节点之间自动生成路由,提高了路由的生成效率,简化了路由配置过程;在VAM Client上,相对于动态路由,本发明的技术方案节省了运行和维护路由协议消耗的***资源;同时可以方便地实现部分Spoke节点采用Hub-Spoke方式,而部分Spoke节点采用Full-Mesh方式的组网方式;此外,通过本发明实施例提供的路由聚合技术,减少了Spoke节点的路由数目,提高了转发效率。
基于上述方法实施例相同的技术构思,本发明实施例还提供了一种路由交换设备,可以应用为上述方法实施例中的VAM Client。
如图7所示,为本发明实施例提供的路由交换设备的结构示意图,可以包括:
发送模块71,用于向VAM Server发送注册请求,由所述VAM Server获取所述注册请求中携带的所述应用为VAM Client的路由交换设备的私网地址、公网地址以及对应的网段;
获取模块72,用于当所述应用为VAM Client的路由交换设备接收到所述VAM Server响应的确认消息时,从所述VAM Server中获取其他已注册的VAMClient的私网地址和对应的网段;
路由生成模块73,用于根据获取到的所述其他已注册的VAM Client的私网地址和对应的网段生成到所述其他已注册的VAM Client的路由。
其中,所述获取模块72可以具体用于,当所述应用为VAM Client的路由交换设备为Hub节点时,从所述VAM Server中获取所述DVPN网络中各Spoke节点的私网地址和对应的网段;
相应地,所述路由生成模块73可以具体用于,分别生成到所述各Spoke节点的路由;其中,所述应用为VAM Client的路由交换设备到Spoke节点的路由的目的地址是该Spoke节点对应的网段,下一跳是该Spoke节点的私网地址。
其中,所述发送模块71还可以用于,当所述应用为VAM Client的路由交换设备为Spoke节点时,在所述注册消息中携带自身的节点属性;
相应地,所述获取模块72可以具体用于,从所述VAM Server中获取所述DVPN网络中Hub节点的私网地址和对应的网段,并获取所述DVPN网络中其他Spoke节点的私网地址、对应的网段以及节点属性。
其中,所述路由生成模块73可以具体用于,
当所述其他已注册的VAM Client为Hub节点时,生成目的地址为该Hub节点对应的网段,下一跳为该Hub的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备的节点属性为Hub-Spoke时,生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备以及所述其他已注册的VAM Client的节点属性均为Full-Mesh时,生成目的地址为该Spoke节点对应的网段,下一跳为该Spoke节点的私网地址的路由;或,
当所述其他已注册的VAM Client为Spoke节点,且所述应用为VAM Client的路由交换设备的节点属性为Full-Mesh,所述其他已注册的VAM Client的节点属性为Hub-Spoke时,生成目的地址为该Spoke节点对应的网段,下一跳为Hub节点的私网地址的路由。
其中,本发明实施例提供的VAM Client还可以包括:
路由管理模块74,用于当所述应用为VAM Client的路由交换设备中DVPN的相关配置被删除时,删除所述路由生成模块生成的路由;或,
当所述应用为VAM Client的路由交换设备在预设时间内未接收到所述VAM Server对keepalive报文的响应时,删除所述路由生成模块生成的路由;或,
当所述应用为VAM Client的路由交换设备接收到删除特定VAM Client的消息时,删除所述路由生成模块生成的目的地址为该特定VAM Client对应的网段的路由;或,
当所述应用为VAM Client的路由交换设备接收到修改特定VAM Client的节点属性的消息时,根据所述应用为VAM Client的路由交换设备的节点属性和该特定VAM Client修改后的节点属性更新到目的地址为该特定VAM Client对应的网段的路由;
所述路由生成模块73还可以用于,当所述应用为VAM Client的路由交换设备接收到增加特定VAM Client的消息时,生成目的地址为该特定VAM Client对应的网段的路由。
其中,本发明实施例提供的VAM Client还可以包括:
判断模块75,用于当所述应用为VAM Client的路由交换设备为Spoke节点时,判断所述应用为VAM Client的路由交换设备生成的路由中是否存在下一跳相同,且目的地址相互包含的路由;
相应地,所述路由管理模块74还可以用于,当所述判断模块75判断为是时,将所述路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由。
其中,所述判断模块75还可以用于,当所述应用为VAM Client的路由交换设备为Spoke节点,且所述路由生成模块生成了一条新的路由时,判断所述应用为VAM Client的路由交换设备记录的生效路由中是否存在下一跳与该新生成的路由的下一跳相同,且目的地址与该新生成的路由的目的地址相互包含的生效路由;
所述路由管理模块74可以具体用于,若所述判断模块的判断结果为不存在,则将所述新生成的路由设置为生效路由;若所述判断模块的判断结果为存在,则当任一生效路由与所述新生成的路由的下一跳相同,且目的地址包含该新生成的路由的目的地址时,将所述新生成的路由设置为未生效路由;当任一生效路由与该新生成的路由的下一跳相同,且目的地址被该新生成的路由的目的地址包含,将该生效路由设置为未生效路由,将该新生成的路由设置为生效路由。
其中,所述路由管理模块74还可以用于,当所述应用为VAM Client的路由交换设备为Spoke节点,且接收到删除特定生效路由的指示消息时,删除该特定生效路由,并将所述应用为VAM Client的路由交换设备记录的与该特定生效路由下一跳相同,且目的地址被该特定生效路由的目的地址包含的未生效路由设置为生效路由;通过所述判断模块74判断所述应用为VAM Client的路由交换设备记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由,并当所述判断模块判断为是时,将所述生效路由中目的地址范围最大的路由设定为生效路由,其余路由设定为未生效路由;
所述判断模块74还可以用于,判断所述应用为VAM Client的路由交换设备记录的生效路由中是否存在下一跳相同,且目的地址相互包含的路由。
其中,所述VAM Server中记录有对应VAM Client注册信息变化的事件,并记录有相应事件已下发的VAM Client;
相应地,所述发送模块71还可以用于,向所述VAM Server发送keepalive报文;
所述获取模块72还可以用于,当所述应用为VAM Client的路由交换设备接收到所述VAM Server返回的响应报文时,获取该响应报文中携带的事件;其中,VAM Server接收到应用为VAM Client的路由交换设备发送的keepalive报文后,将自身记录的未下发给该应用为VAM Client的路由交换设备的事件携带在响应报文中通知给该应用为VAM Client的路由交换设备;
所述路由管理模块还用于,根据获取到的事件更新所述路由生成模块生成的路由。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。