`

NAT穿透技术原理浅谈

阅读更多

今天我们来看看NAT方面的技术,提起NAT技术,我们大家可能并不陌生,就真实的存在我们身边,只不过我们很少关注它.NAT是一种网络地址翻译 技术,将内部私有IP地址改变成可以在公网上使用的:公网IP.其出现背景就是因为我们国家公网IP地址太少了不够用,才使NAT技术兴起.这里我就不具 体和大家细说NAT是怎么转换IP地址了,技术原理不太难.NAT技术的使用从技术角度讲是有利也有弊的.我们可以同时让多个计算机同时联网,同时也隐藏 了内部地址,NAT对来自外部的数据查看其NAT映射记录,对没有相应记录的数据包进行拒绝,无非提高了网络的安全性.从另一个方面来看,NAT设备对数 据包进行编辑修改操作,降低了发送数据的数率.由于技术的复杂性,排错也变的困难了,我们在内部对外发布一个服务器,还得考虑这个端口映射问题等.这也到 罢了,网络盛行的今天,各种应用不断,其协议应用也各有不同,有的根本无法通过NAT.这是最为头疼的事.目前为了解决这些问题,已多现多种穿透技术.一 会我们细谈.

NAT三种实现方式

静态地址转换: 一个公网IP对应一个内部IP,一对一转换

动态地址转换: N个公网IP对应M个内部Ip,不固定的一对一IP转换关系.同一时间,有M-N个主机无法联网.

端口多路复用: 对外只有一个公网IP,通过端口来区别不同内部IP主机的数据.

IP转换策略

对于静态与动态地址转换;其数据包出站的时候,进行源地址转换.我们称之为 SNAT[SOURCE ADDRESS].其内部源IP变公网源IP.数据包入站的时候,进行目标地址转换DNAT[DESTINATION ADDRESS],其外部公网宿IP变内部宿IP.静态与动态不进行端口转换.而端口多路复用技术.不但要转换其IP地址,还要进行其传输层的端口转换. 通过这唯一的端口号来区别不同的内部数据[在通信过程中会建立一张内部到外部映射表].我们称之NATP[NAT PORT]技术.在我们家用网络中,大部分用的是端口多路复用技术. 在端口多路复用技术中,对数据的处理还分这么两类:锥形NAT与对称型NAT.锥形NAT又分完全锥形NAT[FULL CONE]|受限锥形NAT[RESTRICTED CONE]|端口受限锥形NAT[PORT RESTRICTED CONE].

全完锥形NAT: 将来自内部同一个IP地址同一个端口号的主机监听/请求,映射到公网IP某个端口的监听.任意外部IP地址与端口对其自己公网的IP这个映射后的端口访问,都将重新定位到内部这个主机.个人认为在内部发布服务器到外网,此技术原理完全否合该技术原理,当然某些 P2P中也可能利用该技术.该技术中,基于C/S架构的应用可以在任何一端发起连接.

受限锥形NAT:与 完全NAT不同的是,在公网映射端口后,并不允许所有IP进行对于该端口的访问,要想通信必需内部主机对某个外部IP主机发起过连接,然后这个外部IP主 机就可以与该内部主机通信了.但端口不做限制.如出站源IP为A端口为B,对于外部IP回复,宿IP为A宿端口可以是任意.NAPT设备都将成功转发到内 部主机.NAPT设备根据映射记录做出判断.该技术中只能内部主机先发起连接通信才可成功.

端口受限锥形NAT:该技术与受限锥形NAT相比更为严格.除具有受限锥形NAT特性.对于回复主机的源端口也有要求.哪我用端口B访问你,对于外部主机的回复信宿端口也只能是B.否折通信失败.该技术中只能内部主机先发起连接通信才可成功.

对称型NAT:内部主机用同一IP与同一端口与外部多IP通信.NAPT设备为每个会话转换了不同的源端口.不在转换成相同的源端口.对于回复的数据包,只有信宿IP地址与端口完全吻合才可进入.当然源IP也是要检测的,不可能随意外部IP都能进入的.

NAT穿透技术

为何会出现NAT穿 透技术?我们知道在NAPT技术应用中,要想实现通信,端口是必需的.IP地址修改是必需的.现在是残酷的.FTP应用协议分控制端口与数据端口,悲剧的 是数据端口不是固定的,协商成功后告知对方数据端口内容是承载于应用层之中.NAT设备无法对其进行分析,做出相应的映射,从而导致通信失败.VPN协议 中的PPTP协议,在数据连接中协议部分根本没有端口这一概念.要NAT如何做出决策?ipsec安全协议本身就是保证数据的安全并认证通信源而发明,对 其网络层进行IP效验,对传输入层进行加密,对数据进行加密.对于NAT来说让其通信这更是无稽之谈.当然无法穿过NAT的还有很多,如语音VOIP中的 H.323与SIP协议.为了能让这些协议成功应用,出现了五花八门的穿透NAT技术.其技术有UPNP技术.ALG[应用层网关识别技术]SBC[会话 边界控制]ICE[交互式连接建立]MIDCOM[中间盒技术]TURN[中继NAT穿越]STUN技术.TCP/UDP hole punching[TCP/UDP打洞技术]NAT-T技术…总之很多,原理各不相同,我也没有时间一个一个学习和分析.在此说几个应用比较多点的例子.

ALG技术:传统的 NAT技术只能检测网络层与传输层地址,你FTP不是在应用层传送端口地址吗?所以ALG技术就是一种应用层地址识别技术,根据不同的协议进行检测,然后 将发现的地址时行修改并通知NAT做相应的映射记录,从而实现成功通信.对于该技术,对于互联网每一种新的协议支持都要更新其设备要不无法识别.扩展性 差.对于个别协议该技术无法解决问题,如IPSEC协议.

STUN技术:通过STUN协议与第三方服务器建立连接,推测出客户端的NAT类型.进而通信. RFC3489/STUN协议过程[摘自cr0_3百度空间].STUN协议定义了三类测试过程来检测NAT类型,如下所述:

Test1:STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-s1:Port-s1}把它所看到的STUN Client的IP和端口{IP-m1,Port-m1}作为Binding Response的内容回送给STUN Client。

Test1#2:STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s2:Port-s2}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m1#2,Port-m1#2}作为Binding Response的内容回送给STUN Client。

Test2:STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(设置了Change IP和Change Port属性)。STUN Server收到该请求后,通过端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m2,Port-m2}作为Binding Response的内容回送给STUN Client。

Test3:STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(设置了Change Port属性)。STUN Server收到该请求后,通过端口{IP-s1:Port-s2}把它所看到的STUN Client的IP和端口{IP-m3,Port-m3}作为Binding Response的内容回送给STUN Client。

NAT类型检测过程如下

1. 进行Test1。如果STUN Client不能够收到STUN Server的应答(重复多次确认),那么说明该STUN Client是UDP Blocked类型(也有可能是STUN Server不可到达,这里不考虑这种情形);否则,STUN Client把返回的{IP-m1,Port-m1}和本地的{IP-c1:Port-c1}进行比较(只需要比较IP即可),如果相同,说明本机直接连 接于公网,否则本机位于NAT之后,但还需要进一步判断具体类型。

1.1. 如果本机直接连接于公网,进行Test2。如果STUN Client不能够收到STUN Server的应答(重复多次确认),那么说明该STUN Client是Symmetric Firewall类型;否则,该STUN Client是Open Internet类型。

1.2. 如果本机位于NAT之后,进行Test2。如果STUN Client能够收到STUN Server的应答,那么说明该STUN Client是Full Cone NAT;否则,需要进一步进行测试。

1.2.1. 进行Test1#2。STUN Client比较IP-m1和IP-m1#2是否相同,如果不相同,那么说明该STUN Client是Symmetric NAT类型;否则,需要进一步进行测试。

1.2.1.1 进行Test3。如果STUN Client能够收到STUN Server的应答,那么说明该STUN Client是Restricted Cone NAT类型;否则,该STUN Client是Port Restricted Cone NAT类型。

该技术大部分是针对P2P应用环境中.

NAT-T技术:其思想就是在ESP隧道模式下,在外IP包头与ESP报头中间加入8个字节的UDP报关,使其NAT成功映射.

IPSec提供了端到端的IP通信的安全性,但在NAT环境下对IPSec的支持有 限,AH协议是肯定不能进行NAT的了,这和AH设计的理念是相违背的;ESP协议在NAT环境下最多只能有一个VPN主机能建立VPN通道,无法实现多 台机器同时在NAT环境下进行ESP通信。

NAT穿越(NAT Traversal,NAT -T)就是为解决这 个问题而提出的,RFC3947,3948中定义,在RFC4306中也加入了NAT-T的说明,但并没废除RFC3947,3948,只是不区分阶段1 和阶段2。该方法将ESP协议包封装到UDP包中(在原ESP协议的IP包头外添加新的IP头和UDP头),使之可以在NAT环境下使用的一种方法,这样 在NAT的内部网中可以有多个IPSec主机建立VPN通道进行通信。

 AH封装:AH封装的校验从IP头开始,如果NAT将IP的头部改动,AH的校验就会失败,因此我们得出结论,AH是无法与NAT共存的。ESP 封装的传输模式:对于NAT来说,ESP封装比AH的优势在于,无论是加密还是完整性的校验,IP头部都没有被包括进去。但是还是有新的问题,对于ESP 的传输模式,NAT 无法更新上层校验和。TCP 和 UDP 报头包含一个校验和,它整合了源和目标 IP 地址和端口号的值。当 NAT 改变了某个包的 IP 地址和(或)端口号时,它通常要更新 TCP 或 UDP 校验和。当 TCP 或 UDP 校验和使用了 ESP 来加密时,它就无法更新这个校验和。由于地址或端口已经被 NAT 更改,目的地的校验和检验就会失败。虽然 UDP 校验和是可选的,但是 TCP 校验和却是必需的。

  ESP封装的隧道模式:从ESP隧道模式的封装中,我们可以发现,ESP隧道模式将整个原始的IP包整个进行了加密,且在ESP的头部外面新加了一层IP 头部,所以NAT如果只改变最前面的IP地址对后面受到保护的部分是不会有影响的。因此,IPsec只有采用ESP的隧道模式来封装数据时才能与NAT共 存。ESP的传输模式,因为TCP部分被加密,NAT无法对TCP校验和进行修改,不兼容。ESP的隧道模式,由于NAT改动外部的IP而不能改动被加密 的原始IP,使得只有这种情况下才能与NAT共存。

分享到:
评论

相关推荐

    基于TCP协议的NAT穿透技术在P2P中的研究与实现

    NAT穿透技术是实现P2P网络通信中的关键技术,尤其是在NAT设备普及的环境下。NAT(网络地址转换)设备被广泛部署在互联网中,用以节省公网IP资源并提供安全隔离。NAT设备会改变内网主机与外部通信时的IP地址和端口号...

    NAT穿透解决方案

    这个问题在对等网络(P2P)通信模式中尤为突出,尤其是在VoIP(语音通话)应用中,NAT穿透问题已成为技术发展的瓶颈。 NAT技术最初是为了应对IPv4地址不足的问题而产生的。IPv4体系中,理想的情况是每个设备拥有一...

    nat穿透测试工具

    nat穿透辅助测试工具,方便侦察自身nat类型,便捷好用。

    Java实现UDP穿透NAT技术

    UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了快速、简单、不可靠的数据报服务。在处理网络通信时,NAT(Network ...通过理解这些原理和Java中的实现细节,你可以构建自己的NAT穿透解决方案。

    PLC单片机局域网嵌入式NAT穿透技术研究.pdf

    标题:“PLC单片机局域网嵌入式NAT穿透技术研究.pdf”指明本文的研究主题聚焦于在局域网内利用PLC单片机实现NAT(网络地址转换)穿透技术的应用研究。描述:“PLC单片机局域网嵌入式NAT穿透技术研究.pdf”补充说明...

    XMPP协议及NAT穿透介绍文档

    1. **NAT原理**:NAT的主要作用是在公共IP地址有限的情况下,允许多个私有IP地址的设备共享一个公网IP。然而,这也导致了设备之间的直接通信难题,因为每个设备在公网看起来都是一样的IP地址。 2. **NAT穿透类型**...

    NAT穿透 P2P通信

    NAT穿透与P2P通信是互联网通信领域中的关键技术,特别是在多点通信、实时互动以及设备间的直接连接中。NAT(网络地址转换)技术在保护网络安全和解决IP地址稀缺问题的同时,也对P2P(对等网络)通信带来了挑战。当...

    NAT穿透之NAT类型检测.pdf

    了解这些不同类型的NAT的特点及其工作原理对于成功实现NAT穿透至关重要。 #### 不同类型的NAT 1. **Full Cone NAT(完全圆锥型NAT)** - **特点**:当内部主机首次通过UDP Socket发送数据到外部主机时,NAT会为...

    基于TCP,UDP NAT穿透资料附源码

    **NAT原理** NAT工作原理主要在于,当内部网络的设备向外部网络发送数据时,NAT设备会将内部IP和端口号替换为对外的IP和端口号,并记录这个映射关系。当外部数据返回时,NAT设备根据记录的映射关系,将数据转发给...

    真正好用的nat穿透源代码,附送STUN检测代码

    NAT(网络地址转换)穿透技术就是为了在NAT环境下实现设备间的直接通信而设计的。本文将深入探讨NAT穿透的基本原理以及提供的源代码。 NAT是一种普遍应用于家庭和企业网络的技术,它允许一个或多个设备共享一个...

    UDP协议P2P NAT穿透技术实例

    在实际应用中,开发P2P NAT穿透技术需要深入理解网络协议、NAT工作原理以及对等体之间的交互逻辑。同时,为了提高通信的稳定性和效率,通常还需要配合拥塞控制、错误检测和恢复等机制。通过以上知识点的实践和优化,...

    UDP穿透NAT的原理与实现

    本文将深入探讨UDP穿透NAT的原理以及其实现方法。 NAT工作原理: NAT的主要作用是将内部网络的私有IP地址映射为外部网络的公共IP地址,从而解决IP地址短缺的问题。当内部主机向外部发送数据时,NAT会记录源IP和端口...

    NAT穿透 MFC界面版

    NAT穿透技术是一种在网络地址转换(Network Address Translation)环境下实现设备间通信的技术。在现代互联网中,许多家庭或企业网络使用NAT来共享一个公网IP地址,这在提高地址使用效率的同时,也对设备直接通信...

    NAT穿透java

    标题“NAT穿透Java”指的是在Java编程环境中实现网络地址转换(NAT)穿透的技术,主要针对UDP协议。NAT穿透对于实现内网设备之间的通信至关重要,因为常规的NAT设置会阻止直接的端对端连接。在此场景下,描述中提到...

    P2PUDP,NAT穿透技术

    **P2PUDP与NAT穿透技术详解** 在互联网通信中,P2P(Peer-to-Peer)技术是一种网络架构,其中每个参与者既是...通过分析和运行这个实验,开发者可以深入理解P2PUDP和NAT穿透的工作原理,并为实际项目开发积累经验。

    基于STUN协议的NAT穿透技术通讯效率优化研究

    ### 基于STUN协议的NAT穿透技术通讯效率优化研究 #### 一、引言 随着互联网的快速发展,用户对于高速、稳定的P2P通信需求日益增长。然而,NAT(Network Address Translation,网络地址转换)技术作为解决IP地址...

    NAT穿透内网资料和源代码

    **NAT穿透内网技术详解** 在现代网络环境中,NAT(Network Address Translation,网络地址转换)技术被广泛应用于家庭和企业网络中,以解决IPv4地址短缺的问题。然而,NAT的存在对需要进行端到端通信的应用造成了...

    UDP实现的NAT穿透

    NAT穿透,又称为端口映射或者打洞技术,是为了让两个位于NAT后的设备能够直接通信而设计的一种技术。 NAT的工作原理是将内部网络中的私有IP地址与外部网络的公共IP地址进行映射,这样内部网络的设备可以通过一个...

    UDP不同网段内网NAT穿透实列(经本人测试成功穿透)

    UDP 在外网环境中不同网段的NAT穿透,网上很多的 资料,但是基本上都是理论知识,而且java的代码很少。 我光是找资料就花了100多积分,经过这些天的努力, 终于被我解决了这个问题。现将完整项目共享给大家。 在test...

Global site tag (gtag.js) - Google Analytics