NAT及NAT打洞技术
打洞原理的应用
打洞原理的应用引言打洞原理是一种常见的网络通信技术,在网络安全和软件开发中具有重要的应用。
本文将介绍打洞原理的基本概念和原理,并介绍其在实际应用中的一些典型案例。
打洞原理概述打洞原理,也称为NAT穿越技术,是通过一系列技术手段实现在网络环境中突破防火墙、NAT和代理等设备的限制,建立两个位于不同私有网络中的主机之间的直接通信。
通过打洞原理,可以实现点对点的直接连接,跨越了传统网络中的限制,大大提升了网络通信的效率和便利性。
打洞原理的基本原理1.NAT设备的穿越:在私有网络中,通常会使用NAT设备来将内部IP地址和端口映射到公共网络上,这会导致两个位于不同私有网络中的主机无法直接通信。
打洞原理通过一系列技术手段,绕过NAT设备,使得两个私有网络中的主机能够直接通信。
2.UDP通信的特性:打洞原理通常使用UDP协议进行通信,因为UDP协议相比于TCP协议,具有更好的穿透性。
UDP协议与TCP协议不同,不需要经过三次握手等繁琐的过程,而是直接发送数据包,因此能够更容易地穿越网络设备。
3.中间服务器的协助:在打洞原理中,通常会借助第三方的服务器进行协助。
这个服务器在两个私有网络中的主机之间起到中转的作用,帮助建立直接的通信通道。
通过合理的协议设计和中转服务器的存在,打洞原理能够实现两个私有网络中的主机之间的直接通信。
打洞原理的应用场景1.P2P文件共享:在P2P文件共享中,通常会涉及到直接点对点的通信。
打洞原理能够帮助不同私有网络中的用户建立直接的通信通道,加快文件传输的速度和效率。
2.实时语音视频通话:在实时语音视频通话中,需要实现低延迟和高质量的通信。
打洞原理可以帮助不同私有网络中的用户建立直接的通信通道,提升通话质量和稳定性。
3.远程桌面控制:在远程桌面控制中,需要实现即时响应和快速传输。
打洞原理可以帮助远程主机与客户端建立直接的通信通道,提供更流畅的使用体验。
4.多人网络游戏:在多人网络游戏中,需要实现实时的数据交互和同步。
NAT穿透技术穿透原理和方法详解
NAT穿透技术穿透原理和方法详解NAT(Network Address Translation)是一种将私有网络中的IP地址转换为公网IP地址的技术。
它的主要作用是解决了IPv4地址资源不足的问题,同时也提供了一定程度的网络安全保护。
然而,NAT也带来了一些问题,其中最显著的就是它在一些情况下会阻碍对私有网络中主机的远程访问。
为了解决NAT对远程访问的限制,出现了NAT穿透技术。
NAT穿透技术允许位于私有网络中的主机与公网上的主机建立直接的连接,从而使得私有网络中的主机可以被公网上的主机访问到。
下面详细介绍NAT穿透技术的实现原理和具体方法。
一、NAT穿透的原理:私有网络中的主机首先与穿透服务器建立连接,并将本地IP和端口号发送给穿透服务器。
穿透服务器将这些信息记录下来并分配一个公网IP和端口号。
对于公网上的主机来说,私有网络中的主机就像一个虚拟的公网主机一样可直接访问。
同时,私有网络中的主机也可以主动发起连接到公网上的主机。
私有网络中的主机相当于是通过穿透服务器将自己的通信请求“穿透”了NAT 防火墙,直接到达公网上的主机。
二、NAT穿透的方法:1.端口映射:端口映射是最常见和简单的NAT穿透方法之一、私有网络中的主机将本地的端口号映射到公网IP的一些端口上,然后通过穿透服务器将请求转发到该端口上,从而实现私有网络中主机的远程访问。
2.中继服务器:中继服务器是一种在公网上与私有网络中的主机建立连续连接的方法。
私有网络中的主机首先连接到中继服务器,然后公网上的主机也连接到中继服务器,中继服务器将两端的请求进行转发,从而实现私有网络中的主机和公网上的主机直接通信。
3.UDP打洞:UDP打洞是一种通过UDP协议来穿透NAT防火墙的方法。
私有网络中的主机先向公网主机发送一个UDP数据包,公网主机也向私有网络的主机发送UDP数据包,通过这两个数据包的发送和接收,NAT防火墙会记录下私有网络中主机的IP和端口号,从而实现两者之间的直接通信。
p2p通信 nat打洞设计文档
P2P设计文档1.1 系统总体架构及关键流程1.客户端服务器分布打洞方案一P2P穿越nat可以分为两步:(1)识别通信双方是哪种类型的nat。
需要得到NAT的类型和以下一些数据:1.UDP是否通过:UDP是否被防火墙干掉了?2.本机在公网上还是在NA T之后(局域网)?3.通信双方是否在同一局域网内4.不同目的IP的映射是否相同:映射相同则为Cone NAT,否则就是对称型5.IP是否受限:如果是Cone NA T,那么是否存在受限IP的特性6.PORT是否受限:如果是Cone NA T,那么是否存在受限端口的特性(2)针对不同类型的nat,进行nat打洞。
设通信双方为A、B,NAT分别是Na和Nb,S是服务器。
NA T类型简写对应:全锥形->FC,限制锥形->RC,端口限制锥形->PC,对称型->SN1.其中一个具有公网地址的情况:假设具有公网地址的为A,那么,A通知S:A希望与B建立通信,然后S转告B,让B主动连接A的公网地址,当B连接到A之后,A就可以通过B向A打的洞与B进行通信了,而无论B是何种类型的NA T2.其中一个是全锥形nat的情况:假设Na是FC,由于FC的特性:内网中同主机同端口与外部的所有通信都使用同一个洞,当这个洞被打开后,所有外部主机都可以使用这个洞向这个内网地址(IP:PORT)发送数据。
所以只要其中一方是FC,就可以实现双方的直接通信。
这些组合的打洞流程如下:A通知S,让S通知B向A已经存在的那个洞发送数据。
那么A是肯定可以收到B发来的这个包的,这时A再回复B,则AB间的链路成功建立。
而不论Nb是什么类型(原因同“其中一个具有公网地址的情况“)。
3.其中一个是RC的情况:RC->FC属于“其中一个属于FC的情况“,上面已经证明过,跳之。
RC->RC:令B发包给A(锥形NA T对于所有会话都使用同一个端口,所以现在他们是互相知道彼此在NA T上映射的外网地址的),此时将会被Na丢掉,因为在这个时候Na之上的洞认为:此洞为S而开(此洞在A登陆S的时候就打好了),只有S的端口可以往此洞发包(Na是受限型NAT)。
【免费下载】TCP打洞技术
我们先假设一下:有一个服务器 S 在公网上有一个 IP,两个私网分别由 NAT-A 和 NAT-B 连接到公网,NAT-A 后面有一台客户端 A,NAT-B 后面有一台客户端 B,现在,我们需要借助 S 将 A 和 B 建立直接的 TCP 连接,即由 B 向 A 打一个洞, 让 A 可以沿这个洞直接连接到 B 主机,就好像 NAT-B 不存 在一样。 实现过程如下(请参照源代码): 1、 S 启动两个网络侦听,一个叫【主连接】侦听,一个叫【协助打洞】的侦 听。 2、 A 和 B 分别与 S 的【主连接】保持联系。 3、 当 A 需要和 B 建立直接的 TCP 连接时,首先连接 S 的【协助打洞】端口, 并发送协助连接申请。同时在该端口号上启动侦听。注意由于要在相同的网络 终端上绑定到不同的套接字上,所以必须为这些套接字设置 SO_REUSEADDR 属 性(即允许重用),否则侦听会失败。 4、 S 的【协助打洞】连接收到 A 的申请后通过【主连接】通知 B,并将 A 经过 NAT-A 转换后的公网 IP 地址和端口等信息告诉 B。 5、 B 收到 S 的连接通知后首先与 S 的【协助打洞】端口连接,随便发送一些 数据后立即断开,这样做的目的是让 S 能知道 B 经过 NAT-B 转换后的公网 IP 和 端口号。 6、 B 尝试与 A 的经过 NAT-A 转换后的公网 IP 地址和端口进行 connect,根据 不同的路由器会有不同的结果,有些路由器在这个操作就能建立连接(例如我 用的 TPLink R402),大多数路由器对于不请自到的 SYN 请求包直接丢弃而导 致 connect 失败,但 NAT-A 会纪录此次连接的源地址和端口号,为接下来真正 的连 接做好了准备,这就是所谓的打洞,即 B 向 A 打了一个洞,下次 A 就能直 接连接到 B 刚才使用的端口号了。 7、 客户端 B 打洞的同时在相同的端口上启动侦听。B 在一切准备就绪以后通 过与 S 的【主连接】回复消息“我已经准备好”,S 在收到以后将 B 经过 NAT-B 转换后的公网 IP 和端口号告诉给 A。 8、 A 收到 S 回复的 B 的公网 IP 和端口号等信息以后,开始连接到 B 公网 IP 和端口号,由于在步骤 6 中 B 曾经尝试连接过 A 的公网 IP 地址和端口,NAT-A
端口限制锥形打洞过程_概述说明以及概述
端口限制锥形打洞过程概述说明以及概述1. 引言1.1 概述在计算机网络通信中,端口限制锥形打洞是一种用于解决NAT(Network Address Translator)设备限制下的双向通信问题的技术。
NAT设备常常会对传入和传出的网络数据包进行过滤和修改,导致内部主机无法直接与外部主机建立双向通信连接。
而通过端口限制锥形打洞过程,可以绕过这个限制,实现双方之间的直接通信。
1.2 文章结构本文将围绕端口限制锥形打洞过程展开讨论。
首先介绍该过程的概念和背景,并解释它对计算机网络通信的重要性。
然后深入分析端口限制锥形打洞的具体流程,包括请求源地址检查、端口映射、握手以及数据传输等环节。
接下来,我们将详细介绍各个环节中所涉及到的技术原理和算法,并探讨其应用情景与限制条件。
最后,通过案例研究或实验结果验证该方法在实际网络环境中的可行性和效果。
1.3 目的本文旨在提供一个全面而清晰的端口限制锥形打洞过程概述说明,以便读者能够了解并应用该技术解决NAT设备带来的通信限制问题。
通过阅读本文,读者将对端口限制锥形打洞的原理和流程有一个深入的理解,并能在需要时灵活应用该技术,确保网络通信的顺畅和安全。
2. 正文:在本节中,我们将详细介绍端口限制锥形打洞的相关信息。
首先要了解的是,端口限制锥形打洞是一种用于网络通信的技术。
2.1 端口限制锥形打洞技术端口限制锥形打洞是一种将本地网络与公共互联网连接起来的方法。
它通过在本地计算机上开启一个端口,并在防火墙或路由器上对该端口进行配置,允许外部网络通过该端口与本地网络进行通信。
2.2 打洞过程概述2.2.1 验证用户身份在进行端口限制锥形打洞之前,首先需要验证用户身份。
这可以通过用户名和密码等方式进行验证。
2.2.2 开放一个可用端口为了进行打洞操作,必须开放一个可用的端口。
通常情况下,建议使用未被其他程序占用的端口。
2.2.3 配置防火墙或路由器需要在防火墙或路由器上配置规则,允许通过指定的端口进行通信。
NAT技术及穿透原理解析
NAT技术及穿透原理解析随着因特⽹规模的飞速发展,联⽹设备数量不断增加,地址空间⼤⼩只有2^32的IPv4地址正⾯临着枯竭,⽽作为下⼀代⽹络层协议的IPv6虽然拥有巨⼤的地址数量,但⾯对庞⼤的历史遗留问题也显得⼒不从⼼。
在这种情况下,NAT(Network Address Translation,⽹络地址转换)技术应运⽽⽣。
NAT的作⽤,是让多个拥有独⽴内⽹IP的设备,能够共⽤⼀个外⽹IP和外部进⾏通信。
由于不同内⽹IP互不⼲涉,不同内⽹下的设备可以使⽤同⼀个内⽹IP,这样⼀来,IP地址的短缺现象就⼤⼤缓解了。
NAT基本原理和⼤致流程NAT技术搭载在路由器上,通过修改经由该路由器转发的数据报来达到⽬的。
众所周知,⽆论是TCP还是UDP传输协议,都涉及到四个属性:源地址、源端⼝、⽬标地址和⽬标端⼝。
假设设备A要向设备B发送数据,它会把⾃⼰的地址,以及设备B的IP地址放⼊IP数据报的⾸部。
在没有NAT存在的情况下,两个设备之间的路由器会根据这个⾸部信息和⾃⾝的路由表,将数据报转发向另⼀个更接近B的路由器,直⾄数据报最终到达设备B。
在这个过程中,虽然数据报经过了多个路由器的转发,但它的⾸部是不变的。
然⽽,使⽤了NAT技术的路由器(以下称它为N)会打破这个规则。
N会把⾃⼰的管理的⽹段分为内外两侧,位于两侧的主机进⾏的⼀切通信都要经过N的转发。
在每个外侧⽹段,N都需要⼀个全球唯⼀的外⽹IP地址(除⾮这个⽹段位于另⼀个NAT的内部,这种情况下,外⽹IP 只需在该⽹段内唯⼀即可),⽽在内侧⽹段,所有主机,包括N⾃⾝的IP都可以任意决定,但为了避免和已有的外⽹IP冲突导致分不清内外侧的主机,⼀般都会是⼀些特殊格式,例如我们常见的“192.168.x.x”。
假设A位于N的内侧,那么在A第⼀次⽤⾃⼰的端⼝X向B发送数据的时候,N⾸先会根据路由表找出B在哪个外侧⽹段上,在对应⽹段上为A 分配⼀个端⼝Y,然后在⾃⾝的内存中新建⼀对映射关系:“外⽹端⼝Y对应内⽹主机A的端⼝X”。
NAT
NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
由于NAT实现是私有IP和NAT的公共IP之间的转换,那么,私有网中同时与公共网进行通信的主机数量就受到NAT 的公共IP地址数量的限制。
为了克服这种限制,NAT被进一步扩展到在进行IP地址转换的同时进行Port的转换,这就是网络地址端口转换NAPT(Network Address Port Translation)技术。
NAPT与NAT的区别在于,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。
这使得多台私有网主机利用1个NAT公共IP就可以同时和公共网进行通信。
NAT的特点是在NAT网关上建立一个NAT映射表,里面记录了每个公网IP对应的私网IP的转换。
NAT的局限就是每个公网IP只能映射到一个私网IP上,所以有多少私网IP要上网,就必须用对应数量的公网IP来转换,所以就限制了数量了而PAT(NAPT)增加了端口的概念,每个私网IP对应同一个公网IP的不同端口号,这样子就能实现多个私网IP共用一个公网IP了。
外网要访问你这个内网主机,目的地址就是公网IP和代表你的端口号(这里也涉及一个映射回去的问题,也就是端口映射)内网一台机器用192.168.0.2:8000上QQ,转成公网就202.3.6.100:8000那内网另一台也要用8000上,但公网的8000已经被占用,所以这台旧上不了了把端口转换为8001就可以上了。
要详细说的话会很长而且比较难理解的,而且我是手打的比较累哦,简单说吧,地址转换分两种1,NAT2,PAT我们平时共享上网其实是应用了PA T((端口地址转换)就是在支持NAT,PAT的路由器或者NA T机上添加对应地址的地址转换表(就是内网IP和公网IP加上端口号的对照表),当有数据从外网或者从内网互相进出的时候,路由就对照一下地址表,找到对应地址的话就把数据包里的目的IP地址从原来的公网地址变成对应的内网地址和端口,这样就可以成功的传到目的主机上了,而当几台电脑同时用同一个公网IP地址发送数据的时候,就根据不同的端口来判断是哪个连接,如果源端口相同就自动更改源端口随着IPv6时代的到来,我也一直怀疑,是不是还有必要再去学习NAT技术——因为网络的资源不再如IPv4时代匮乏,而NAT技术正是为解决IP地址的紧缺而存在的,如此,NAT 便没有存在的必要了。
[p2p]UDP用打洞技术穿透NAT的原理与实现
[p2p]UDP用打洞技术穿透NAT的原理与实现首先先介绍一些基本概念:NAT(Network AddressTranslators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。
NAT分为两大类,基本的NAT和NAPT(NetworkAddress/Port Translator)。
最开始NAT是运行在路由器上的一个功能模块。
最先提出的是基本的NAT,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的)。
那么这个子网中其实只有少数的节点需要全球唯一的IP地址,其他的节点的IP地址应该是可以重用的。
因此,基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。
子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。
如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP 然后发送出去。
(基本的NAT会改变IP包中的原IP地址,但是不会改变IP包中的端口)关于基本的NAT可以参看RFC 1631另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT 不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。
基本NAT的设备可能我们见的不多(呵呵,我没有见到过),NAPT才是我们真正讨论的主角。
看下图:Server S118.181.0.31:1235|^ Session 1 (A-S1) ^ || 18.181.0.31:1235 | |v 155.99.25.11:62000 v ||NAT155.99.25.11|^ Session 1 (A-S1) ^ || 18.181.0.31:1235 | |v 10.0.0.1:1234 v ||Client A10.0.0.1:1234有一个私有网络10.*.*.*,ClientA是其中的一台计算机,这个网络的网关(一个NAT设备)的外网IP是155.99.25.11(应该还有一个内网的IP地址,比如10.0.0.10)。
对称型nat
对称型nat:
4种NAT打洞:完全锥体、IP受限型、(IP和)端口受限型、对称型。
其三种都很好理解,唯独对称型比较不好理解,这里做些自己的理解。
对称型:是指UDP打洞时,一个请求对应一个映射关系。
clientA (x,y) -----------> 网关(A,b)------------>S(m, n)
clinetB(p,q) -----------> 网关(C,d)------------>S(m, n)
clientA向server S发起连接时,告诉S其公网地址和端口为 A,b
clientB向server S发起连接时,告诉S其公网地址和端口为C,d
假设server S分别告知clientA、clientB对方地址,并且clientA、clientB分别发起一条向对方的请求(该请求一定无法到达),按照对称型NAT规则,此时会有这样一个情况:对于A的网关,将会新增一条如下的映射:
clientA (x,y)-----------> 网关(A,t)----------------->clientB (C, d)
对于B的网关,将会新增一条如下的映射:
clientA (p,q)-----------> 网关(C,r)----------------->clientA (A,b)
请注意:clientA (x,y)-----------> 网关(A,t)和clientA (p,q)-----------> 网关(C,r)。
nat类型及打洞原理
nat类型及打洞原理nat 类型分4种1、全锥形 full cone A 与主机B交互,nat转换 A的内部地址及端⼝为 ip1 port1,ip1和port1为对外地址,任何机器能访问。
2、ip 受限制(对B⽽⾔)A 与主机B交互,nat转换 A的内部地址及端⼝为 ip1 port1,B要想访问A,需要A先访问过B(不管是否失败),并且B的ip不能变,但是B的端⼝可以变。
3、端⼝受限制(对B⽽⾔)A 与主机B交互,nat转换 A的内部地址及端⼝为 ip1 port1,B要想访问A,需要A先访问过B(不管是否失败),并且B的ip不能变,B 端⼝也不能变。
4、对称型以上种,再nat转换时,都会转换成ip1 port1的形式,但是这种,访问主机B,转为ip1,port1,访问主机C,转为ip1,port2,或者ip2,port2 A 与主机B交互,nat转换 A的内部地址及端⼝为 ip1 port1,B要想访问A,,需要A先访问过B(不管是否失败),并且B的ip不能变,B端⼝也不能变nat穿透: 局域⽹的A访问⼀个外部主机,这个主机返回A它的nat转换后的ip1 port1。
另⼀个局域⽹B访问外部主机(stun),外部主机返回B被nat 转换后的ip2,port2。
A访问B,就是A去访问ip2,port2。
B访问A,就是访问ip1,port1。
⾮对称与⾮对称:由于A(客户机)⽆论访问哪个主机,A的nat都是将它转换为ip1 port1(ip1 与port1都不会变化),因此A B都去访问stun,得到的ip与port不会变化。
因此可以打洞。
⼀端对称,⼀端⾮对称:A(⾮对称Nat,且只能是ip不变,port变化的那种情况),⼀端⾮对称B,且只能是 full cone 或者ip受限。
⾸先B访问A,B记录A的ip1(只要ip1的信息发过来,就能收到),B的数据必然被A的nat丢掉,但是A就可以访问B了,这⼉假定A的nat转换后的ip 是不变的(A⼀般都是这种)。
tcp打洞原理和实现
tcp打洞原理和实现TCP打洞是一种用于在NAT(Network Address Translation)背后创建直接通信连接的技术。
由于NAT的存在,使得在私有网络中的主机无法直接与公共网络上的主机进行通信。
而TCP打洞则可以通过巧妙的方式绕过NAT,实现私有网络与公共网络之间的直接通信。
TCP打洞的原理是利用NAT的状态维护机制,通过在NAT上创建相同的状态,使公网主机和私网主机能够建立直接的通信连接。
具体的实现步骤如下:1. 首先,私网主机A向公网主机B发送连接请求,由于NAT的存在,请求无法直接到达B。
但是NAT会在自己的状态表中记录下A的请求,并分配一个临时的端口号。
2. 接下来,B向A发起连接请求,由于NAT的状态表中已经有了A 的请求记录,B的请求可以通过NAT到达A。
3. A收到B的请求后,会将自己的响应包发送给B,同时也会在自己的NAT状态表中记录下B的请求,并分配一个临时的端口号。
4. 最后,B收到A的响应包后,会将自己的数据包直接发送给A,通过NAT的状态表中的记录,可以确保数据包能够正确地到达A。
通过以上的步骤,私网主机A和公网主机B就能够建立起直接的通信连接,实现数据的传输。
需要注意的是,TCP打洞的实现需要满足一定的条件。
首先,NAT设备必须支持对TCP连接的状态维护,并且能够正确地处理打洞过程中的请求和响应包。
其次,私网主机和公网主机之间必须能够相互通信,即私网主机必须能够发送请求包到公网主机,并能够接收公网主机的响应包。
总的来说,TCP打洞是一种通过巧妙利用NAT状态维护机制,实现私网主机与公网主机直接通信的技术。
它可以绕过NAT的限制,提供更加灵活和便利的网络通信方式。
通过合理的步骤和条件,TCP 打洞可以在保证数据安全的前提下,实现私网与公网之间的直接连接。
计算机网络打洞技术
Internet的快速发展以及IPv4地址数量的不足使得NAT设备得到了大规模的应用,然而这也给越来越多的端到端通信也带来了不少的麻烦。
一般来说,NAT 设备允许内网内主机主动向公网内主机发送数据,但却禁止内网外的主机主动向内网内的主机传递数据。
由于很多的会话双方处于不同的NAT设备后,它们通信一般通过公网服务器中转,而要建立P2P通信,则必须解决NAT穿越问题才能建立通信。
第三章 NAT穿越模块的设计与实现NAT 是介于内网和公网之间的设备,公网中的IP 地址是全球唯一的,而在内网中的IP 地址可以重复出现,但不能出现在公网中[18]。
NAT的基本功能就是通过一个或几个lP地址,来实现局域网上的所有主机都可以对因特网进行访问[19]。
NAT实现了公网地址和内网地址之间的映射,可从两个方面来概括:(1) 当内网内的IP包经过NAT需要流入公网时,NAT将此IP 包的源IP地址和端口改为NAT接口上的一个公网地址和端口;(2)当公网中的IP包经过NAT 需要访问内网资源时,NAT将此IP 包的目的地址和端口改为内网IP 地址和端口。
图3.1 UDP包经过NAT原理图图 3.1是 UDP包经过NAT后的示意图,可以看出UDP包从内网主机A发出时,到达NAT后它的源端IP和端口都已经改变。
同时从主机B的UDP包发往NAT-A 的公网IP和端口后,NAT将其自动转发给主机A。
3.1 NAT穿越方案分析3.1.1 NAT的类型NAT设备的类型对于穿越NAT,有着十分重要的影响,根据其端口映射方式,NAT可分为如下4类,前3种NAT类型可统称为cone NAT。
(1)全克隆( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。
任何一个外部主机均可通过该映射发送IP包到该内部主机。
(2)限制性克隆(Restricted Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。
NAT爆破-在NAT背后的主机之间建立TCP连接
NAT爆破:在NAT背后的主机之间建立TCP连接摘要防火墙和网络地址转换(NAT)设备变得越来越流行了,它们给使用P2P协议建立连接造成了明显的问题。
适当的进行配置,这些中间箱阻止从局域网以外发起的TCP连接请求。
这篇文章提出一种新颖的机制用于在两台中间箱后面的主机之间创建直接的TCP连接,且需要尽可能少的第三方的帮助。
我们在通常的环境下使用通常的硬件实现了这些解决方案中的两个。
我们可以在两台全部在典型的NAT设备后面的主机之间创建直接的TCP连接,这种NAT设备是为小型网络设计的。
一旦这个连接建立了,应用程序就可以使用标准的TCP 实现而不用任何外部的帮助就可以在彼此之间进行通信了。
分类和主题描述D.4.4【操作系统】:通信管理——网络通信;C.2.5【计算机通信网络】:局域网和广域网——Internet;C.2.2【计算机通信网络】:网络协议——协议架构一般术语算法、设计、可靠性关键字TCP连接;网络地址转换;P2P over NAT;状态防火墙;一致性转换;主动请求过滤;松散的源路由;打洞1介绍网络地址转换作为一种解决IPv432位地址范围用尽问题的方法被引入的,它可以使Internet继续增长。
NAT的第二个功能是向外部实体隐藏网络拓扑。
网络地址转换设备(NATs,也通常被叫做中间箱)通过在内网中使用独立的地址空间将内网和外网隔离。
NAT 为每个网络连接动态在这些地址空间进行转换。
除了进行IP地址转换以外,NAT也必须为内部不同的主机分配不同的端口。
这就允许多个内部主机使用相同的源端口和同一个外部主机进行通信。
NAT的另外一个特征是他们仅仅允许源自内网的连接。
NAT会丢弃外部的主动连接尝试,因为它们无法知道把包转发给内部的哪台主机。
P2P网络变得越来越流行。
尽管一些P2P文件共享程序(例如Napster和KaZaA)产生了一些争论,许多有用的而且合法的P2P应用仍然存在,例如即时通信、工作区共享和文件共享。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NAT及NAT打洞技术一、什么是NAT?为什么要使用NAT?NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址。
NAT的出现完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
二、NAT的分类STUN标准中,根据内部终端的地址(LocalIP:LocalPort)到NAT出口的公网地址(PublicIP:PublicPort)的影射方式,把NAT分为四种类型:1、Full Cone NAT: 内网主机建立一个socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。
此外,任何外部主机只要知道这个(PublicIP:PublicPort)就可以发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。
2、Restricted Cone NAT: 内网主机建立一个socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。
此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机IP发送过数据。
只要满足这两个条件,这个外部主机就可以用自己的(IP,任何端口)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。
3、Port Restricted Cone NAT: 内网主机建立一个socket(LocalIP:LocalPort) 第一次使用这个socket给外部主机发送数据时NAT会给其分配一个公网(PublicIP:PublicPort),以后用这个socket向外面任何主机发送数据都将使用这对(PublicIP:PublicPort)。
此外,如果任何外部主机想要发送数据给这个内网主机,只要知道这个(PublicIP:PublicPort)并且内网主机之前用这个socket曾向这个外部主机(IP,Port)发送过数据。
只要满足这两个条件,这个外部主机就可以用自己的(IP,Port)发送数据给(PublicIP:PublicPort),内网的主机就能收到这个数据包。
4、Symmetric NAT: 内网主机建立一个socket(LocalIP,LocalPort),当用这个socket第一次发数据给外部主机1时,NAT为其映射一个(PublicIP-1,Port-1),以后内网主机发送给外部主机1的所有数据都是用这个(PublicIP-1,Port-1),如果内网主机同时用这个socket给外部主机2发送数据,NAT会为其分配一个(PublicIP-2,Port-2), 以后内网主机发送给外部主机2的所有数据都是用这个(PublicIP-2,Port-2).如果NAT有多于一个公网IP,则PublicIP-1和PublicIP-2可能不同,如果NAT只有一个公网IP,则Port-1和Port-2肯定不同,也就是说一定不能是PublicIP-1等于PublicIP-2且Port-1等于Port-2。
此外,如果任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现P2P通信,但是如果另一方是Full Cone NAT,还是可以实现穿透的,下面我会详细分析各种类型NAT穿透的情况。
NAT 功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。
所以我们大家很少会知道NAT,上面NAT类型的概念描述是比较通俗的,但为了更便于理解,我再举例阐述一下NAT的原理。
现有通信的双方A和B,当A和B都是在公网的时候,通信是不用NAT的。
假设A在内网,内网IP 是192.168.1.3,端口号是5000,A经过NAT后的IP是221.221.221.100,端口号是8000,B的IP是202.105.124.100,端口是8500。
如果B要去主动连接A,即使B知道A经过NAT后的IP和端口也是无法连接成功的,因为A没有向B(202.105.124.100:8500)发送过数据,所以B的数据包会被A的NAT丢弃,于是连接失败。
但是A如果去主动连接B,由于B是在公网,所以会连接成功,通信也就会建立。
这也就是反弹连接木马“反弹”二字的精髓。
当客户端A和B都是处在内网的时候,双方由于都不知道对方的公网IP和端口,就会无从下手,所以要在客户端A和B之间架设一台服务器S来为它们牵线,而且S是处在公网,以保证A和B都能连接到S。
客户端A和B登录时都首先连接S,S就会知道A和B经过NAT后的IP和端口,当A想要连接B时,就像S发出请求,S会把B经过NAT后的IP和端口告诉A,同时S向B发送A经过NAT后的IP和端口,并要求B发送数据给A,B发送数据到达A时会被A的NAT抛弃,但是B的NAT会有B发送数据到A的记录,这是A再向B发送数据时就会被B的NAT放行,因为B曾经向A的外网IP和端口发送过数据。
可能有点乱,下面以故事的形式叙述一下这个情景。
人物:A(男)NAT_A(A家接线员) B(女)NAT_B (B家接线员)S场景介绍:A想认识B,但是不知道B的电话,S跟A、B都是朋友,并且知道A和B的电话。
接线员的职责:对往外转接的电话不做询问,对往内转接的电话则要过滤以免有骚扰电话。
过滤规则:在一定时间内没有拨打过的号码就过滤。
首先A给S打电话:A说:我想认识你朋友B,你把她电话给我呗。
S说:行,她的电话是PublicIP_B,我让她先给你打个电话,要不她家接线员不帮你转接。
A说:好。
S跟B打电话:S说:我有一个朋友A,人挺好的,他想认识你,你给他打个电话,他的电话号码是PublicIP_A。
B说:行,打完告诉你。
S说:好的。
B打电话到A家,B家接线员NET_B看到女主人想往PublicIP_A打电话就转接到A家了,同时把号码PublicIP_A记录下来,A家接线员NAT_A一看号码是个近期没打过的号,就给挂断了。
B给S打电话:B说:我打完电话了S说:好,等着吧,一会他就给你打进来了。
S给A打电话:S说:他给你打完电话了,你快点给她打。
A打电话到B家,A家接线员NET_A看到男主人想往PublicIP_B打电话就转接到B家了,B家接线员NET_B 看到是刚刚拨过的PublicIP_A号码打过来的,就转接给B了,A和B的电话也就打通了。
A和B通话:A说:电话终于打通了,想认识你挺困难的。
B说:是啊。
以上虽然和实际不太一样,但穿透的整体过程基本就是这样。
A往B发送数据的唯一阻碍就是NET_B,所以想要成功发送数据,必须把NET_B穿一个洞,A是无法完成这项工作的,所以就得让B 完成这个打洞操作,也就是让B往A发送数据,这样NET_B就会误以为A发送的数据是上次会话的一部分从而不予阻拦。
但是,由于NAT的类型没有一个统一的标准,所以NAT穿透使用的技术有很多种,穿透的成功率也不一样。
还有些NAT类型的内网之间几乎无法穿透。
下面我们用实例详细分析一下各种NAT类型穿透的可行性。
A机器在私网(192.168.0.3)A侧NAT服务器(221.221.221.100)B机器在另一个私网(192.168.0.5)B侧NAT服务器(210.30.224.70)C机器在公网(210.202.14.36)作为A和B之间的中介A机器连接C机器,假使是A(192.168.0.3:5000)-> A侧NAT(转换后221.221.221.100:8000)-> C (210.202.14.36:2000)B机器也连接C机器,假使是B(192.168.0.5:5000)-> B侧NAT(转换后210.30.224.70:8000)-> C (210.202.14.36:2000)A机器连接过C机器后,A向C报告了自己的内部地址(192.168.0.3:5000),此时C不仅知道了A 的外部地址(C通过自己看到的221.221.221.100:8000)也知道了A的内部地址。
同理C也知道了B的外部地址(210.30.224.70:8000)和内部地址(192.168.0.5:5000)。
之后,C作为中介,把A的两个地址告诉了B,同时也把B的两个地址告诉了A。
假设A先知道了B的两个地址,则A从192.168.0.3:5000处同时向B的两个地址192.168.0.5:5000和210.30.224.70:8000发包,由于A和B在两个不同的NAT后面,故从A(192.168.0.3:5000)到B (192.168.0.5:5000)的包肯定不通,现在看A(192.168.0.3:5000)到B(210.30.224.70:8000)的包,分如下两种情况:1、B侧NAT属于Full Cone NAT则无论A侧NAT属于Cone NAT还是Symmetric NAT,包都能顺利到达B。
如果程序设计得好,使得B主动到A的包也能借用A主动发起建立的通道的话,则即使A侧NAT属于Symmetric NAT,B发出的包也能顺利到达A。
结论1:只要单侧NAT属于Full Cone NAT,即可实现双向通信。
2、B侧NAT属于Restricted Cone或Port Restricted Cone则包不能到达B。
再细分两种情况(1)、A侧NAT属于Restricted Cone或Port Restricted Cone虽然先前那个初始包不曾到达B,但该发包过程已经在A侧NAT上留下了足够的记录:A (192.168.0.3:5000)->(221.221.221.100:8000)->B(210.30.224.70:8000)。
如果在这个记录没有超时之前,B也重复和A一样的动作,即向A(221.221.221.100:8000)发包,虽然A侧NAT属于Restricted Cone 或Port Restricted Cone,但先前A侧NAT已经认为A已经向B(210.30.224.70:8000)发过包,故B向A (221.221.221.100:8000)发包能够顺利到达A。