本发明涉及移动通信技术,尤其涉及一种网络地址转换(nat,networkaddresstranslation)穿越方法、装置、电子设备和存储介质。
背景技术:
第二层隧道协议(l2tp,layertwotunnelingprotocol)技术是一种使用十分广泛的虚拟专用网络(vpn,virtualprivatenetwork)技术,l2tp用户首先通过接入网络连接到l2tp访问集中器(lac,l2tpaccessconcentrator)设备,再通过下层网络的l2tp隧道连接到远端的l2tp网络服务器(lns,l2tpnetworkserver)设备上。其中,lac和lns都具有用户管理功能,lns集中管理一个vpn对应的所有l2tp用户,l2tp隧道在lac与lns之间,经过下层网络设备。
相关技术中运行在公网上的l2tp隧道,两端必须至少一端具有公网地址,否则,l2tp隧道无法建立。
技术实现要素:
有鉴于此,本发明的主要目的在于提供一种nat穿越方法、装置、电子设备和存储介质。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供了一种网络地址转换nat穿越方法,所述方法应用于第一客户前置设备(cpe,customerpremiseequipment);所述方法包括:
确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;
基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。
上述方案中,所述确定第二nat设备的类型,包括:
接收服务器发送的第二nat设备的类型。
上述方案中,相应于所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或网络地址端口转换(napt,networkaddressporttranslation)的情况;确定相应于第二cpe的经nat后的公网地址信息,包括:
接收第二cpe发送的包括相应于第二cpe的经nat后的公网地址信息的l2tp报文。
上述方案中,所述方法还包括:
向服务器发送第一测试报文;所述第一测试报文用于所述服务器确定相应于第一cpe的经nat后的公网地址信息,以及请求所述服务器发送第一结果报文;
接收所述服务器发送的第一结果报文,基于所述第一结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给所述服务器。
上述方案中,所述方法还包括:
发送目标地址为任意地址的l2tp报文;所述目标地址为任意地址的l2tp报文,用于在第一nat设备打洞。
上述方案中,相应于所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况,确定相应于第二cpe的经nat后的公网地址信息,包括:
接收服务器发送的相应于第二cpe的经nat后的公网地址信息。
上述方案中,所述方法还包括:
向服务器发送第二测试报文;所述第二测试报文用于请求所述服务器发送第二结果报文;
接收所述第二服务器发送的第二结果报文,基于所述第二结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给服务器。
上述方案中,所述方法还包括:
向所述第二cpe发送包括相应于第一cpe的经nat后的公网地址信息的l2tp报文。
上述方案中,所述napt,包括以下至少之一:对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
上述方案中,所述隧道地址信息,包括以下至少之一:
第一cpe的私网地址信息、相应于第二cpe的经nat后的公网地址信息。
上述方案中,所述公网地址信息,包括:公网地址和端口号。
本发明实施例还提供了一种网络地址转换nat穿越方法,所述方法应用于服务器,所述方法包括:
确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;
向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;
在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;
在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;
其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。
上述方案中,所述确定第一nat设备的类型和第二nat设备的类型,包括:
接收第一cpe发送的第一测试报文;基于所述第一测试报文发送第一结果报文;所述第一结果报文用于所述第一cpe确定所述第一nat设备的类型;接收第一cpe发送的所述第一nat设备的类型;
接收第二cpe发送的第二测试报文;基于所述第二测试报文发送第二结果报文;所述第二结果报文用于所述第二cpe确定所述第二nat设备的类型;接收所述第二cpe发送的所述第二nat设备的类型。
上述方案中,所述napt,包括以下至少之一:
对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
上述方案中,所述公网地址信息,包括:公网地址和端口号。
本发明实施例又提供了一种网络地址转换nat穿越装置,所述装置应用于第一cpe,所述装置包括:第一处理模块和第二处理模块;
所述第一处理模块,用于确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;
所述第二处理模块,用于基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。
上述方案中,所述第一处理模块,用于接收服务器发送的第二nat设备的类型。
上述方案中,相应于所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况;所述第一处理模块,用于接收第二cpe发送的包括相应于第二cpe的经nat后的公网地址信息的l2tp报文。
上述方案中,所述第一处理模块,还用于向服务器发送第一测试报文;所述第一测试报文用于所述服务器确定相应于第一cpe的经nat后的公网地址信息,以及请求所述服务器发送第一结果报文;
接收所述服务器发送的第一结果报文,基于所述第一结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给所述服务器。
上述方案中,所述第二处理模块,还用于发送目标地址为任意地址的l2tp报文;所述目标地址为任意地址的l2tp报文,用于在第一nat设备打洞。
上述方案中,相应于所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况,所述第一处理模块,用于接收服务器发送的相应于第二cpe的经nat后的公网地址信息。
上述方案中,所述第一处理模块,还用于向服务器发送第二测试报文;所述第二测试报文用于请求所述服务器发送第二结果报文;
接收所述第二服务器发送的第二结果报文,基于所述第二结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给服务器。
上述方案中,所述第一处理模块,还用于向所述第二cpe发送包括相应于第一cpe的经nat后的公网地址信息的l2tp报文。
具体来说,所述napt,包括以下至少之一:对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
上述方案中,所述隧道地址信息,包括以下至少之一:
第一cpe的私网地址信息、相应于第二cpe的经nat后的公网地址信息。
上述方案中,所述公网地址信息,包括:公网地址和端口号。
本发明实施例还提供了一种nat穿越装置,所述装置包括:第三处理模块、第四处理模块和第五处理模块;其中,
所述第三处理模块,用于确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;
所述第四处理模块,用于向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;
所述第五处理模块,用于在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;
在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;
其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。
上述方案中,所述第三处理模块,用于接收第一cpe发送的第一测试报文,所述第一测试报文包括所述第一cpe的地址信息;基于所述第一测试报文发送第一结果报文;所述第一结果报文用于所述第一cpe确定所述第一nat设备的类型;
接收第二cpe发送的第二测试报文,所述第二测试报文包括所述第二cpe的地址信息;基于所述第二测试报文发送第二结果报文;所述第二结果报文用于所述第一cpe确定所述第二nat设备的类型。
上述方案中,所述napt,包括以下至少之一:
对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
上述方案中,所述公网地址信息,包括:公网地址和端口号。
本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现第一cpe侧任一项所述nat穿越方法的步骤;或者,
所述处理器执行所述程序时实现服务器侧任一项所述nat穿越方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现第一cpe侧任一项所述nat穿越方法的步骤;或者,
所述处理器执行所述程序时实现服务器侧任一项所述nat穿越方法的步骤。
本发明实施例所提供的一种nat穿越方法、装置、电子设备和存储介质,确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息;如此,在两端均不具有公网地址的场景下,也可建立l2tp隧道。
附图说明
图1为现有l2tp隧道建立的一种架构图;
图2为现有l2tp隧道建立的另一种架构图
图3为本发明实施例提供的一种nat穿越方法的流程示意图;
图4为本发明实施例提供的另一种nat穿越方法的流程示意图;
图5为本发明实施例提供的一端穿越nat的场景示意图;
图6为本发明实施例提供的再一种nat穿越方法的流程示意图;
图7为本发明实施例提供的一种第二l2tp报文的结构示意图;
图8为本发明实施例提供的一种第三l2tp报文的结构示意图;
图9为本发明实施例提供的一种nat穿越装置的结构示意图;
图10为本发明实施例提供的另一种nat穿越装置的结构示意图;
图11为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
在结合实施例对本发明作进一步详细的说明之前,先对l2tp隧道进行说明。
运行在公网上的l2tp隧道,两端必须至少一端具有公网地址,否则l2tp隧道无法建立。图1为现有l2tp隧道建立的一种架构图;如图1所示的两种隧道至少一端具有公网地址(未连接有nat设备),即可以建立l2tp隧道。
图2为现有l2tp隧道建立的另一种架构图,如图2所示,两端均不具有公网地址,实际无法建立l2tp隧道。
下面结合实施例对本发明再作进一步详细的说明。
图3为本发明实施例提供的一种nat穿越方法的流程示意图;如图3所示,所述nat穿越方法应用于第一cpe;所述方法包括:
步骤301、确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;
步骤302、基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。
具体地,所述确定第二nat设备的类型,包括:接收服务器发送的第二nat设备的类型。
这里,所述第二nat设备的类型可以由与第二nat设备连接的cpe确定,并将确定的类型发送给服务器;由所述服务器将所述第二nat设备的类型发送给所述第一cpe。
在一实施例中,相应于第一cpe连接的所述第一nat设备的类型为基本nat,且第二cpe连接的所述第二nat设备的类型为基本nat或napt的情况;所述确定相应于第二cpe的经nat后的公网地址信息,包括:
接收第二cpe发送的包括(或携带)相应于第二cpe的经nat后的公网地址信息的l2tp报文。
即所述第一cpe基于接收的上述l2tp报文,确定相应于第二cpe的经nat后的公网地址信息。
这里,可以理解为第二cpe发送l2tp报文,发送的所述l2tp报文包括或携带有地址,所述l2tp报文经nat后由第一cpe接收,显示的地址即为相应于第二cpe的经nat后的公网地址信息,即所述第一cpe基于接收的l2tp报文可以确定相应于第二cpe的经nat后的公网地址信息。
这里,所述第二cpe发送的l2tp报文的源地址为第二cpe自身的私网地址,目标地址为相应于第一cpe的经nat后的公网地址信息(包括公网地址和端口号)。
具体地,所述方法还包括:
向服务器发送第一测试报文;所述第一测试报文用于所述服务器确定相应于第一cpe的经nat后的公网地址信息,以及请求所述服务器发送第一结果报文;
接收所述服务器发送的第一结果报文,基于所述第一结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给所述服务器。
这里,所述第一测试报文包括所述第一cpe的地址信息。
具体地,所述方法还包括:
发送目标地址为任意地址的l2tp报文;所述目标地址为任意地址的l2tp报文,用于在第一nat设备打洞。
这里,相应于第一cpe连接的所述第一nat设备的类型为基本nat,且第二cpe连接的所述第二nat设备的类型为基本nat或napt的情况;所述第一cpe可以为lns,所述第二cpe可以为个人电脑(pc,personalcomputer)等设备。
在一实施例中,相应于所述第一cpe连接的第一nat设备的类型为基本nat或napt,且所述第二cpe连接的第二nat设备的类型为基本nat的情况,所述确定相应于第二cpe的经nat后的公网地址信息,包括:
接收服务器发送的相应于第二cpe的经nat后的公网地址信息。
具体地,所述方法还包括:
向服务器发送第二测试报文;所述第二测试报文用于请求所述服务器发送第二结果报文;
接收所述第二服务器发送的第二结果报文,基于所述第二结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给服务器。
具体地,所述方法还包括:向第二cpe发送包括相应于第一cpe的经nat后的公网地址信息的l2tp报文。
这里,相应于所述第一cpe连接的第一nat设备的类型为基本nat或napt,且所述第二cpe连接的第二nat设备的类型为基本nat的情况,所述第二cpe可以为lns,所述第一cpe为个人电脑(pc,personalcomputer)等设备。
具体地,所述napt,包括以下至少之一:对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
具体地,所述隧道地址信息,包括以下至少之一:
第一cpe的私网地址信息、相应于第二cpe的经nat后的公网地址信息。
具体地,所述私网地址信息,包括:私网地址和端口号。
所述公网地址信息,包括:公网地址和端口号。
图4为本发明实施例提供的一种nat穿越方法的流程示意图;如图4所示,所述nat穿越方法应用于服务器,所述方法包括:
步骤401、确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;
步骤402、向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;
步骤403、在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;
在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;
其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。
这里,在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,对应第一cpe为lns,所述第二cpe为pc等设备。
相反的,在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,即对应第一cpe为pc等设备,第二cpe为lns。
具体地,所述确定第一nat设备的类型和第二nat设备的类型,包括:
接收第一cpe发送的第一测试报文;基于所述第一测试报文发送第一结果报文;所述第一结果报文用于所述第一cpe确定所述第一nat设备的类型;接收第一cpe发送的所述第一nat设备的类型
接收第二cpe发送的第二测试报文;基于所述第二测试报文发送第二结果报文;所述第二结果报文用于所述第二cpe确定所述第二nat设备的类型;接收所述第二cpe发送的所述第二nat设备的类型。
这里,所述第一测试报文可以包括所述第一cpe的地址信息;所述第二测试报文可以包括所述第二cpe的地址信息。
具体地,在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,所述确定相应于第一cpe的经nat后的公网地址信息,包括:
基于接收的所述第一测试报文确定相应于第一cpe的经nat后的公网地址信息。
具体地,所述napt,包括以下至少之一:
对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
具体地,所述公网地址信息,包括:公网地址和端口号。
以下结合上述图3和图4所示方法对两端进行nat穿越做详细说明。
例如,所述两端包括cpea(如lns)和cpeb(如pc),所述cpea连接第一nat设备、且所述第一nat设备的类型仅可为基本nat;所述cpeb连接第二nat设备,所述第二nat设备的类型可以为基本nat或napt;所述两端进行nat穿越的方法,包括:
步骤01、cpea与服务器进行交互(具体指发送第一测试报文,接收相应结果报文),以确定第一nat设备的类型,并发送给服务器;以及,cpeb与服务器进行交互(具体指发送第二测试报文,接收相应结果报文),以确定第二nat设备的类型,并发送给服务器;
步骤02、服务器向所述cpea发送所述第二nat设备的类型;向所述cpeb发送所述第一nat设备的类型;
步骤03、所述服务器基于所述第一测试报文,确定相应于cpea的经nat后的公网地址信息,向cpeb发送所述相应于cpea的经nat后的公网地址信息;
步骤04、cpea配置并发送目标地址为任意地址的l2tp报文,用于在第一nat设备打洞;
步骤05、cpeb向cpea发l2tp报文;
这里,cpeb发送的l2tp报文的源地址为本端私网地址,目的地址为相应于cpea的经nat后的公网地址信息(包括相应于cepa的经nat后的公网地址和端口);
步骤06、cpea接收cpeb发送的l2tp报文,确定相应于cpeb的经nat后的公网地址信息;
这里,所述cpea接收到l2tp报文后,显示的地址为相应于cpeb的经nat后的公网地址信息(包括相应于cpeb的经nat后的公网地址和端口号);可以理解为所述l2tp报文包括或携带有地址,当cpea接收后,显示的地址即为相应于cpeb的经nat后的公网地址信息。
步骤07、cpea和cpeb间进行常规l2tp隧道报文的交互和转发。
以下针对l2tp隧道的场景做进一步说明,所述l2tp隧道一般具有以下两类场景:
1、l2tp常规场景,即只需一端穿越nat的场景;
l2tp一端穿越nat的场景,主要是移动办公场景,l2tp隧道源端在pc端,无l2tp访问集中器(lac,l2tpaccessconcentrator)设备。pc端的l2tp报文采用用户数据报协议(udp,userdatagramprotocol)1701端口作为目的端口。具体参考图5所示的一端穿越nat的场景示意图。
2、l2tp隧道两端穿越nat,即本发明实施例所述方法适所应用的场景;
1)l2tp两端穿越nat的场景,采用l2tp作为承载隧道;
2)一端cpe为lns,用于收目的端口为1701的报文,另一端cpe为pc等设备。
这里,图3和图4所示方法中,可以与类型为基本nat或napt的nat设备连接的cpe为上述pc等设备,仅可与类型为基本nat的nat设备连接的cpe为lns。
这里,针对图3和图4所示方法中的各类nat分别进行说明。
nat主要可以分为两类:基本nat、napt(networkaddressporttranslation);其中,
所述基本nat,一般适用于nat设备拥有多个公网网际互连协议(ip,internetprotocol)地址(以下简称公网地址)的情形下,将公网地址与内网主机进行静态绑定,这种类型的nat设备较少。
所述napt是常用nat类型,所述napt类型的nat设备可以将内部地址映射到外部网络中的一个单独ip地址上,同时在该地址上加上一个由nat设备选定的端口号。根据映射方式不同,napt可以分为对称性nat和圆锥型nat,其中,圆锥型nat包括:完全圆锥型nat、地址限制圆锥型nat和端口限制圆锥型nat。
具体来说,napt为公网中最常用nat种类,分为以下四种:
1、对称型nat(symmetricnat)
所述对称型nat,将从同一内网地址和端口到相同目的地址和端口的所有请求,都映射到同一个公网地址和端口。如果同一个内网主机,用相同的内网地址和端口向另外一个目的地址发送报文,则会用不同的映射。与端口限制型nat不同,端口限制型nat是所有请求映射到相同的公网ip地址和端口,而对称型nat是不同的请求有不同的映射。
2、完全圆锥型nat(fullconenat)
所述完全圆锥型nat,将从一个内部ip地址和端口来的所有请求,都映射到相同的外部ip地址和端口。并且,任何外部主机通过向映射的外部地址发送报文,都可以实现和内部主机进行通信。这是一种比较宽松的策略,只要建立了内部网络的ip地址和端口与公网ip地址和端口的映射关系,所有的internet上的主机都可以访问该nat设备之后的主机。
3、地址限制圆锥型nat(addressrestrictedconenat)
所述地址限制圆锥型nat也是将从相同的内部ip地址和端口来的所有请求映射到相同的公网ip地址和端口。但是与完全圆锥型nat不同,当且仅当内部主机之前已经向公网主机地址发送过报文,此时公网主机地址才能向内网主机发送报文。
4、端口限制圆锥型nat(portrestrictedconenat)
所述端口限制圆锥型nat,类似于地址限制圆锥型nat,但是更严格。所述端口限制圆锥型nat增加了端口号的限制,仅当内网主机之前已经向公网主机地址和端口号发送了报文,公网主机地址和端口号才能和此内网主机通信。
图6为本发明实施例提供的再一种nat穿越方法的流程示意图;如图6所示,为实现l2tp隧道两端穿越nat,本发明实施例提供的nat穿越方法,包括:探测nat设备的类型;确定nat设备的类型后,根据nat设备的类型,配置l2tp隧道和相关地址信息。
所述探测nat设备的类型,包括:与其他协议(指与nat探测server、即上述服务器交互所需的涉及到的协议,如ip协议等)组合,客户侧网关cpea和客户侧网关cpeb分别通过用于nat探测的server(相当于图3、图4所示方法中的服务器,可采用公网免费服务器或者由网络的控制器兼任)进行报文交互,探测cpea和cpeb分别需要穿越的nat设备的类型,即cpea连接的nat设备的类型、cpeb连接的nat设备的类型。
所述l2tp隧道和相关地址信息,包括:
配置l2tp采用隧道模式;
配置隧道地址信息;针对各cpe来说,所述隧道地址信息包括:本端私网地址,对端经nat后的公网地址。
以下对采用不同类型的nat设备,对上述本发明实施例的方法进行说明。
实施例一、经过与nat探测server进行报文交互后,确定cpea连接的nat设备的类型为基本nat,cpeb连接的nat设备的类型为基本nat。
所述nat穿越方法,包括:
步骤001、所述nat探测server向所述cpeb发送第一l2tp报文,以告知所述nat探测server记录的相应于cpea的经nat后的公网地址;
步骤002、所述cpea配置发送第二l2tp报文;配置的第二l2tp报文的源地址信息包括本端私网地址和端口号(例如端口号为上述图5中的1701,基本nat映射后端口仍旧是1701),目的地址为任意地址;这里,配置目的地址为任意地址的报文用于在cpea连接的nat打洞);
图7为本发明实施例提供的一种第二l2tp报文的结构示意图;如图7所示,所述第二l2tp报文至少包括以下之一:外部以太网报头(outerethernetheader)、外部ip头(outeripheader)、外部udp头(outerudpherder);所述第二l2tp报文的源地址包括:本端私网端口(1701),目的地址为任意地址。
步骤003、所述cpeb配置第三l2tp报文,所述第三l2tp报文的源地址为本端私网地址,目的地址为相应于cpea的经nat后的公网地址和端口(也即1701);所述cpeb向cpea发送所述第三lt2p报文,以使cpea接收到所述第三l2tp报文后,基于第三l2tp报文获得相应于cpeb的经nat后的公网地址和端口。
图8为本发明实施例提供的一种第三l2tp报文的结构示意图;如图8所示,所述第三l2tp报文至少包括以下之一:外部以太网报头、外部ip头、外部udp头;所述第三l2tp报文的目的地址为相应于cpea的经nat后的公网地址和端口1701。
步骤004、经过上述配置,cpea和cpeb间建立l2tp隧道,可以进行常规l2tp报文的交互和转发。
实施例二、经过与nat探测server进行报文交互后,确定cpea连接的nat设备的类型为基本nat,cpeb连接的nat设备的类型为完全圆锥型nat:
这里,完全圆锥型nat,同源同端口ip报文nat映射相同,即完全圆锥型nat会将从相同的内部ip地址和端口来的所有请求,映射到相同的外部ip地址和端口。并且,任何外部主机通过向映射的外部地址发送报文,都可以实现和内部主机进行通信。
因此,采用与上述实施例一相同的方法进行处理即可。
实施例三、经过与nat探测server进行报文交互后,确定cpea连接的nat设备的类型为基本nat,cpeb连接的nat设备的类型为地址限制圆锥型:
这里,地址限制圆锥型nat,同源同端口ip报文nat映射相同(即将从相同的内部ip地址和端口来的所有请求,映射到相同的公网ip地址和端口);但是与完全圆锥型nat不同,当且仅当内部主机之前已经向公网主机地址发送过报文,此时公网主机才能向内网主机发送报文。
针对cpeb连接的nat设备为地址限制圆锥型nat的场景,采用与上述实施例一相同的方法进行处理即可。
实施例四、经过与nat探测server进行报文交互后,确定cpea连接的nat设备的类型为基本nat,cpeb连接的nat设备的类型为端口限制圆锥型nat:
这里,端口限制圆锥型nat,也是同源同端口ip报文nat映射相同(即将从相同的内部ip地址和端口来的所有请求,映射到相同的公网ip地址和端口),但是,端口受限圆锥型nat增加了端口号的限制,当且仅当内部主机之前已经向公网主机地址发送过报文,公网主机才能和此内网主机通信。
针对cpeb连接的nat设备为端口限制圆锥型nat的场景,采用与上述实施例一相同的方法进行处理即可。
实施例五、经过与nat探测server进行报文交互后,确定cpea连接的nat设备的类型为基本nat,cpeb连接的nat设备的类型为对称型nat。
这里,对称型nat会将从相同的内部ip地址和端口来的所有请求,映射到相同的公网ip地址和端口。如果同一个内网主机,用相同的内网地址和端口向另外一个目的地址发送报文,则会用不同的映射。
即cpeb发送的目的地址始终是相应于cpea的经nat后的公网地址和端口号1701。因此,针对cpeb连接的nat设备为对称型nat的场景,采用与上述实施例一相同的方法进行处理即可。
以下针对探测nat设备的类型做进一步说明。
以cpea连接的nat设备为例(cpeb连接的nat设备的检测方法相同,因此此处仅以其中之一为例进行说明),所述nat探测server接收cpea发送的第一测试报文;所述第一测试报文包括cpea的地址信息(ip地址和端口),所述nat探测server确定接收到第一测试报文后执行以下步骤。
第一步:检测cpe是否位于nat设备后;
cpea的客户端建立udp套接字(socket),用建立的udpsocket向服务器的(ip-1,port-1)发送数据包(即上述第一测试报文)要求服务器返回cpe的地址信息(包括ip和port),客户端发送请求后立即开始接收数据包,可以设定sockettimeout(300ms),防止无限堵塞;重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明cpea无法进行udp通信,可能是防火墙或nat设备阻止udp通信。
当cpea的客户端能够接收到服务器的回应时,需要把服务器返回的(ip,port)和cpesocket的(localip,localport)比较,如果完全相同,则确定cpea不在nat设备后;如果不相同,则确定cpea在nat设备后,需进一步检测nat设备的类型。
第二步:检测nat设备是否是完全圆锥型nat;
cpea的客户端建立udpsocket,用建立的udpsocket向服务器的(ip-1,port-1)发送数据包要求服务器用另一对(ip-2,port-2)响应客户端,服务器响应请求返回一个数据包,客户端发送请求后立即开始接收数据包,可以设定sockettimeout(300ms),防止无限堵塞,重复这个过程若干次。如果能够接受到服务器从(ip-2,port-2)返回的应答udp包,则说明nat是一个完全圆锥型nat;如果每次都超时,无法接受到服务器的回应,则说明cpea连接的nat设备不是一个完全圆锥型nat,具体类型有待下一步检测,进入下一步骤。
第三步:检测nat设备是否为对称型nat;
cpea的客户端建立udpsocket,用建立的udpsocket向服务器的(ip-1,port-1)发送数据包,要求服务器返回客户端的ip和port,客户端发送请求后立即开始接收数据包,可以设定sockettimeout(300ms),防止无限堵塞;重复这个过程直到收到回应;
用同样的方法用另一个socket向服务器的(ip-2,port-2)发送数据包要求服务器返回ip和port。
比较上面两个过程从服务器返回的(ip,port),如果两个过程返回的(ip,port)有一对不同则说明为对称型nat,否则是限制圆锥型nat,具体是否为端口限制圆锥型nat进入下一步检测;
第四步:检测nat设备为地址限制圆锥型nat或端口限制圆锥型nat;
cpea的客户端建立udpsocket,用建立的udpsocket向服务器的(ip-1,port-1)发送数据包,要求服务器用ip-1和一个不同于port-1的端口发送一个udp数据包进行响应,客户端发送请求后立即开始接收数据包,设定sockettimeout(300ms),防止无限堵塞;重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明是一个端口限制圆锥型nat,如果能够收到服务器的响应则说明是一个地址限制圆锥型nat。
以上所述的cepa的客户端发送的数据包,即上述第一测试报文,相应的,所述服务器发送的数据包即为反馈的第一结果报文。
本发明实施例中的所述nat穿越方法应用于的服务器,可以采用公网免费服务器或者由公网控制器兼任,即对公网免费服务器或者由公网控制器进行功能扩展,以实现上述方案即可。
需要说明的是,上述检测nat设备的类型的方法仅仅是一种实施例,本发明实施例中还可以采用其他方式进行检测,检测后确定连接的nat设备类型后,将结果发送给服务器,通过服务器发送给对端cpe。例如:cpea通过与服务器进行交互确定连接的nat设备的类型后,将结果发送给所述服务器,所述服务器可以将结果发送给cpeb;反之相同。
图9为本发明实施例提供的一种nat穿越装置的结构示意图;如图9所示,所述nat穿越装置,应用于第一cpe,所述装置包括:第一处理模块和第二处理模块;
所述第一处理模块,用于确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;
所述第二处理模块,用于基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。
具体地,所述第一处理模块,用于接收服务器发送的第二nat设备的类型。
在一实施例中,相应于所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况;所述第一处理模块,用于接收第二cpe发送的包括相应于第二cpe的经nat后的公网地址信息的l2tp报文。
具体地,所述第一处理模块,还用于向服务器发送第一测试报文;所述第一测试报文用于所述服务器确定相应于第一cpe的经nat后的公网地址信息,以及请求所述服务器发送第一结果报文;
接收所述服务器发送的第一结果报文,基于所述第一结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给所述服务器。
具体地,所述第二处理模块,还用于发送目标地址为任意地址的l2tp报文;所述目标地址为任意地址的l2tp报文,用于在第一nat设备打洞。
在一实施例中,相应于所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况,所述第一处理模块,用于接收服务器发送的相应于第二cpe的经nat后的公网地址信息。
具体地,所述第一处理模块,还用于向服务器发送第二测试报文;所述第二测试报文用于请求所述服务器发送第二结果报文;
接收所述第二服务器发送的第二结果报文,基于所述第二结果报文确定自身连接的nat设备的类型,将确定的自身连接的nat设备的类型发送给服务器。
具体地,所述第一处理模块,还用于向第二cpe发送包括相应于第一cpe的经nat后的公网地址信息的l2tp报文。
具体来说,所述napt,包括以下至少之一:对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
所述隧道地址信息,包括以下至少之一:
第一cpe的私网地址信息、相应于第二cpe的经nat后的公网地址信息。
所述公网地址信息,包括:公网地址和端口号。
图10为本发明实施例提供的另一种nat穿越装置的结构示意图;如图10所示,所述nat穿越装置应用于服务器,所述装置包括:第三处理模块、第四处理模块和第五处理模块;其中,
所述第三处理模块,用于确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;
所述第四处理模块,用于向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;
所述第五处理模块,用于在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;
在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;
其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。
具体地,所述第三处理模块,用于接收第一cpe发送的第一测试报文;基于所述第一测试报文发送第一结果报文;所述第一结果报文用于所述第一cpe确定所述第一nat设备的类型;接收第一cpe发送的所述第一nat设备的类型
接收第二cpe发送的第二测试报文;基于所述第二测试报文发送第二结果报文;所述第二结果报文用于所述第二cpe确定所述第二nat设备的类型;接收所述第二cpe发送的所述第二nat设备的类型。
具体地,所述napt,包括以下至少之一:
对称型nat、完全圆锥型nat、地址限制圆锥型nat、端口限制圆锥型nat。
所述公网地址信息,包括:公网地址和端口号。
图11为本发明实施例提供的一种电子设备的结构示意图;如图11所示,所述装置110包括:处理器1101和用于存储能够在所述处理器上运行的计算机程序的存储器1102;其中,所述电子设备应用于第一cpe时,所述处理器1101用于运行所述计算机程序时,执行:
在一实施例中,所述处理器1101还用于运行所述计算机程序时,执行:确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;
基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。
具体来说,所述电子设备执行如图3所示的方法,与图3所示的nat穿越方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
作为另一种实施例,所述电子设备应用于服务器时,所述处理器1101用于运行所述计算机程序时,执行:确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;
向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;
在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;
在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;
其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。
具体来说,所述电子设备执行如图4所示的方法,与图4所示的nat穿越方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
实际应用时,所述装置110还可以包括:至少一个网络接口1103。电子设备110中的各个组件通过总线系统1104耦合在一起。可理解,总线系统1104用于实现这些组件之间的连接通信。总线系统1104除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图11中将各种总线都标为总线系统1104。其中,所述处理器1101的个数可以为至少一个。网络接口1103用于电子设备110与其他设备之间有线或无线方式的通信。
本发明实施例中的存储器1102用于存储各种类型的数据以支持电子设备110的操作。
上述本发明实施例揭示的方法可以应用于处理器1101中,或者由处理器1101实现。处理器1101可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1101中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1101可以是通用处理器、数字信号处理器(dsp,digitalsignalprocessor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器1101可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器1102,处理器1101读取存储器1102中的信息,结合其硬件完成前述方法的步骤。
在示例性实施例中,电子设备110可以被一个或多个应用专用集成电路(asic,applicationspecificintegratedcircuit)、dsp、可编程逻辑器件(pld,programmablelogicdevice)、复杂可编程逻辑器件(cpld,complexprogrammablelogicdevice)、现场可编程门阵列(fpga,field-programmablegatearray)、通用处理器、控制器、微控制器(mcu,microcontrollerunit)、微处理器(microprocessor)、或其他电子元件实现,用于执行前述方法。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行:确定第一nat设备的类型、第二nat设备的类型和相应于第二cpe的经nat后的公网地址信息;所述第一nat设备连接所述第一cpe,所述第二nat设备连接第二cpe;基于所述第一nat设备的类型、所述第二nat设备的类型和所述相应于第二cpe的经nat后的公网地址信息,配置l2tp隧道和隧道地址信息。具体来说,所述计算机程序被处理器运行时,执行如图3所示的方法,与图3所示的nat穿越方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本发明实施例提供的一种计算机可读存储介质,其上存储有计算机程序,作为另一种实施方式,所述计算机程序被处理器运行时,执行:确定第一nat设备的类型和第二nat设备的类型;所述第一nat设备连接第一cpe,所述第二nat设备连接第二cpe;向所述第一cpe发送所述第二nat设备的类型;向所述第二cpe发送所述第一nat设备的类型;在所述第一nat设备的类型为基本nat,且所述第二nat设备的类型为基本nat或napt的情况下,确定相应于第一cpe的经nat后的公网地址信息,向第二cpe发送所述相应于第一cpe的经nat后的公网地址信息;在所述第一nat设备的类型为基本nat或napt,且所述第二nat设备的类型为基本nat的情况下,确定相应于第二cpe的经nat后的公网地址信息,向第一cpe发送所述相应于第二cpe的经nat后的公网地址信息;其中,所述公网地址信息用于配置l2tp隧道和隧道地址信息。具体来说,所述计算机程序被处理器运行时,可以执行如图4所示的方法,与图4所示的nat穿越方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。