掌桥专利:专业的专利平台
掌桥专利
首页

一种实现云电脑NAT网关TCP连接状态同步的方法

文献发布时间:2024-04-18 20:02:18


一种实现云电脑NAT网关TCP连接状态同步的方法

技术领域

本发明涉及NAT网关TCP连接状态同步的方法技术领域,尤其涉及一种实现云电脑NAT网关TCP连接状态同步的方法。

背景技术

在Openstack云管理平台中,网络虚拟化组件neutron原生的NAT网关默认是能够支持主备模式的,这样的高可用确实能实现网络级的高可用,主备切换不会造成长时间的断网,但还是不够精细,不足之处在于它不支持TCP连接会话状态同步。

OpenStack neutron原生的NAT网关默认是能够支持主备模式的,但是不支持会话状态同步,如果主节点出现故障了,数据报文将经过备节点,但是对TCP这种有会话连接状态的协议来说,因为NAT网关备节点并没有之前的会话状态,会导致有些连接需要重连的情况出现,影响用户的使用体验。

发明内容

本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。

鉴于上述现有一种实现云电脑NAT网关TCP连接状态同步的方法存在的问题,提出了本发明。

因此,本发明目的是提供一种实现云电脑NAT网关TCP连接状态同步的方法,其适用于解决OpenStack neutron原生的NAT网关默认是能够支持主备模式的,但是不支持会话状态同步,如果主节点出现故障了,数据报文将经过备节点,但是对TCP这种有会话连接状态的协议来说,因为NAT网关备节点并没有之前的会话状态,会导致有些连接需要重连的情况出现,影响用户的使用体验的问题。

为解决上述技术问题,本发明提供如下技术方案:一种实现云电脑NAT网关TCP连接状态同步的方法,包括:NAT网关、VPC、TCP连接状态会话表,

所述VPC内包含路由器和多组虚拟机,所述NAT网关可分为主用NAT网关和备用NAT网关,所述虚拟机通过路由器向主用NAT网关获取互联网内部信息,所述主用NAT网关出现故障时切换至备用NAT网关,

所述NAT网关切换时需同步TCP连接状态会话表内部信息,所述TCP连接状态会话表内包含部分TCP连接状态字段。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述TCP连接状态字段内包含时间戳、消息类型、源ip、源端口、协议、目的ip、目的端口、nat转换后的源ip、nat转换后的源port和会话超时时间,且会话超时时间计量单位为秒。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述主用NAT网关切换至备用NAT网关时可被Keepalived检测,且Keepalived检测到主备NAT网关切换时调用脚本程序同步NAT网关TCP连接状态。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述NAT网关主备发生切换的时候将主节点的TCP连接会话状态同步到备节点,所述NAT网关节点出现故障时能够及时自动检测和自动切换。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述NAT网关获取TCP连接状态流程:

S1.注册一个socket用于用户态内核态通信;

S2.获取系统当前的nat会话表;

S3.注册回调函数data_cb用于接收、处理收到的nat会话状态表。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述nat会话状态表内包含协议类型、源ip端口、做了nat转换后的源ip端口、目的ip端口。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:更新系统TCP连接状态会话表接口:

S1.通过socket接收到主节点发的消息;

S2.解释socket消息;

S3.建立新的socket用于和内核通信,设置属性;

S4.构造消息;

S5.发送消息给内核、更新TCP连接状态会话表。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述NAT网关维护有一张TCP连接状态会话状态表,里面是一条一条的TCP连接状态会话记录,并且Linux系统提供了这样的接口,可在用户态编写程序调用接口获取、修改NAT会话表项。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法的一种优选方案,其中:所述NAT网关在创建时,会开两个NAT网关互为主备,并且在正常情况下,流量都走主节点,当主节点出现故障时,切换至备节点。

作为本发明所述一种实现云电脑NAT网关TCP连接状态同步的方法,其中:S1.主备NAT网关节点之间通过keepalived进行主备竞选,当主设备TCP连接状态会话表发生变化时,调用相应脚本程序进行TCP连接状态会话表的同步;

S2.在NAT网关-1节点上面建立socket1,调用程序从内核TCP/IP网络协议栈获取TCP连接状态会话表的状态;

S3.在NAT网关-1节点上面建立socket2,用于和备节点通信,目的是给NAT网关-2节点发送TCP连接状态会话表消息;

S4.在NAT网关-2节点上建立socket3,用于和主节点通信,目的是用于接收NAT网关-1节点发送过来的TCP连接状态会话表消息;

S5.NAT网关-1节点获取到TCP连接状态会话表以后,发送相应消息到NAT网关-2备节点的socket3;

S6.在NAT网关-2节点上建立socket4,NAT网关-2节点收到消息后,进行相应的处理,通过socket4将TCP连接状态会话表状态同步到本节点内核TCP/IP网络协议中。

本发明的有益效果:

获取TCP连接状态的机制高效快捷:直接从系统拿到TCP连接状态然后进行同步,而不是使用上网流量牵引的办法将同一条分别经过主节点、备节点来获取到同一条流的TCP连接状态;

NAT网关节点故障的自动检测和自动切换:NAT网关节点出现故障时能够及时自动检测和自动切换;

同步时机灵活高效实时:NAT网关主节点的TCP连接状态变更的条目才会同步到备节点,提高了处理效率。达到了主备节点TCP连接状态近乎实时的同步;

流量路径简单:流量只会也只需经过主节点,避免使用上网流量牵引的办法将同一条分别经过主节点、备节点,这样的流量路径很冗长、繁杂,影响设备性能;

方案简单可靠:整个同步流程清晰简单,无需借助其他额外设备如交换机,也不需要LACP聚合,总体上实现容易,部署简单,维护调试方便。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。其中:

图1为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的OpenStack NAT网关主备模式架构图;

图2为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的NAT网关故障切换示意图;

图3为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的TCP会话状态同步流程图;

图4为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的TCP连接状态格式示意图;

图5为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的获取TCP连接状态会话流程图;

图6为本发明提出的一种实现云电脑NAT网关TCP连接状态同步的方法的更新TCP连接状态会话表流程图。

具体实施方式

为使本发明的上述目的特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细地说明。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独地或选择性地与其他实施例互相排斥的实施例。

再其次,本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度宽度及深度的三维空间尺寸。

参照图1-6,为本发明的一个实施例,提供了一种实现云电脑NAT网关TCP连接状态同步的方法,包括NAT网关、VPC、TCP连接状态会话表,

VPC内包含路由器和多组虚拟机,NAT网关可分为主用NAT网关和备用NAT网关,虚拟机通过路由器向主用NAT网关获取互联网内部信息,主用NAT网关出现故障时切换至备用NAT网关,

NAT网关切换时需同步TCP连接状态会话表内部信息,TCP连接状态会话表内包含部分TCP连接状态字段。

进一步,TCP连接状态字段内包含时间戳、消息类型、源ip、源端口、协议、目的ip、目的端口、nat转换后的源ip、nat转换后的源port和会话超时时间,且会话超时时间计量单位为秒。

进一步,主用NAT网关切换至备用NAT网关时可被Keepalived检测,且Keepalived检测到主备NAT网关切换时调用脚本程序同步NAT网关TCP连接状态。

进一步,NAT网关主备发生切换的时候将主节点的TCP连接会话状态同步到备节点,NAT网关节点出现故障时能够及时自动检测和自动切换。

进一步,nat会话状态表内包含协议类型、源ip端口、做了nat转换后的源ip端口、目的ip端口。

进一步,NAT网关维护有一张TCP连接状态会话状态表,里面是一条一条的TCP连接状态会话记录,并且Linux系统提供了这样的接口,可在用户态编写程序调用接口获取、修改NAT会话表项。

进一步,NAT网关在创建时,会开两个NAT网关互为主备,并且在正常情况下,流量都走主节点,当主节点出现故障时,切换至备节点。

实施例一:

NAT网关里面的TCP连接状态会话表,NAT网关主备节点会话状态同步总体流程:

S1.主备NAT网关节点之间通过keepalived进行主备竞选,当主设备TCP连接状态会话表发生变化时,调用相应脚本程序进行TCP连接状态会话表的同步;

S2.在NAT网关-1节点上面建立socket1,调用程序从内核TCP/IP网络协议栈获取TCP连接状态会话表的状态;

S3.在NAT网关-1节点上面建立socket2,用于和备节点通信,目的是给NAT网关-2节点发送TCP连接状态会话表消息;

S4.在NAT网关-2节点上建立socket3,用于和主节点通信,目的是用于接收NAT网关-1节点发送过来的TCP连接状态会话表消息;

S5.NAT网关-1节点获取到TCP连接状态会话表以后,发送相应消息到NAT网关-2备节点的socket3;

S6.在NAT网关-2节点上建立socket4,NAT网关-2节点收到消息后,进行相应的处理,通过socket4将TCP连接状态会话表状态同步到本节点内核TCP/IP网络协议中。

实施例二:

NAT网关获取TCP连接状态流程:

S1.注册一个socket用于用户态内核态通信;

S2.获取系统当前的nat会话表;

S3.注册回调函数data_cb用于接收、处理收到的nat会话状态表。

更新系统TCP连接状态会话表接口:

S1.通过socket接收到主节点发的消息;

S2.解释socket消息;

S3.建立新的socket用于和内核通信,设置属性;

S4.构造消息;

S5.发送消息给内核、更新TCP连接状态会话表。

实施例三:

基于Linux系统给出一个简易的实例

S1.获取NAT网关TCP连接状态;

大概流程如下:

#注册一个socket用于用户态内核态通信

nl=mnl_socket_open(NETLINK_NETFILTER);

#t获取系统当前的nat会话表

nlh->nlmsg_flags=NLM_F_REQUEST[NLM_F_DUMP;

ret=mnl_socket_recvfrom(nl,buf,sizeof(buf));while(ret>0){

#注册回调函数data_cb用于接收、处理收到的nat会话状态表ret=mnl_cb_run(buf,ret,seq,portid,data_cb,NULL);if(ret<=MNL_CB_STOP)

break;

ret=mnl_socket_recvfrom(nl,buf,sizeof(buf));

}

#回调函数用于接收、处理收到的nat会话状态表

static int data_cb(const struct nlmsghdr*nlh,void*data){

struct nf_conntrack*ct;

char buf[4096];

ct=nfct_new();

if(ct==NULL)

return MNL_CB_OK;

nfct_nlmsg_parse(nlh,ct);

#协议类型

nfct get_attr_u8(ct,ATTR_ORIG_L4PROTO)

#源ip端口

nfct_get_attr_u32(ct,ATTR_ORIG_IPV4_SRC)

nfct_get_attr_u16(ct,ATTR_ORIG_PORT_SRC)

#做了nat转换后的源ip端口

nfct_get_attr_u32(ct,ATTR_REPL_IPV4_DST)

nfct_get_attr_u16(ct,ATTR_REPL_PORT_DST)

#目的ip端口

nfct_get_attr_u32(ct,ATTR_ORIG_IPV4_DST)

nfct_get_attr_u16(ct,ATTR_ORIG_PORT_DST)

S2.更新NAT网关TCP连接状态;

建立新的socket用于和内核通信,设置属性,代码如下:

nl=mnl_socket_open(NETLINK_NETFILTER);

nlh->nlmsg_flags=NLM_F_REQUEST|NLM_F_CREATE|NLM_F_EXCL|NLM_F_ACK;

构造消息,代码如下;

nfct_set_attr_u8(ct,ATTR_L3PROTO,AF_INET);

nfct_set_attr_u32(ct,ATTR_IPV4_SRC,源ip);

nfct_set_attr_u32(ct,ATTR_IPV4_DST,目的ip);

nfct_set_attr_u8(ct,ATTR_L4PROTO,协议);

nfct_set_attr_u16(ct,ATTR_PORT_SRC,源端口);

nfct_set_attr_u16(ct,ATTR_PORT_DST,目的端口);

#做了nat转换后的源ip端口

nfct_set_attr_u32(ct,ATTR_REPL_IPV4_DST)

nfct_set_attr_u16(ct,ATTR_REPL_PORT_DST)

ret=nfct nlmsg build(nlh,ct);

进而发送消息给内核、更新NAT网关tcp连接状态会话表,代码如下:

ret=mnl socket sendto(nl,uf,len)。

应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

技术分类

06120116581197