快捷搜索:  汽车  科技

nat类型哪种更安全(NAT详解与网络穿透原理分析)

nat类型哪种更安全(NAT详解与网络穿透原理分析)在图7-4中,对称型NAT会将内网地址{X:y}转换成公网地址{A:b}并绑定为{X=Y}|{A:b}<一>{P:q}。这就意味着NAT只允许地址{A:b}接收来自{P:q}的分组,将它转给{X:y} 。当客户机请求一个不同的公网地址{M:n}时,NAT会新分配一个外部端口{C:d} .​ 对称型NAT把从同一内网地址和端口到相同日的地址和端口的所有请求,都映射到同一个公网地址和端口。如果同一个内网主机,用相同的内网地址和端口向另一个目的地址发送分组,则会使用不同的映射,而且公网主机只有在接收到分组后,才能向与发送分组的内网主机进行通信。可见,对称性NAT是所有NAT类型中限制最为严格的口NAPT有4中类型 看下图:1.复用旧的映射关系通信 这就是锥型(Cone) NAT2.创建新的映射关系通信 这就是对称型NAT

NAT原理1.什么是nat?

NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者IP掩蔽。NAT是一种网络地址翻译技术,主要是将内部的私有IP地址(private IP)转换成可以在公网使用的公网IP(public IP)。

2.为什么会有nat?

NAT的本质就是让一群机器公用同一个IP,这样就暂时解决了IP短缺的问题。NAT技术能够兴起的原因还是因为在我们国家公网IP地址太少了,不够用,所以才会采取这种地址转换的策略。

3.实现方式及主要类型

nat类型哪种更安全(NAT详解与网络穿透原理分析)(1)

3.1 静态NAT

也就是静态地址转换。是指一个公网IP对应一个私有IP,是一对一的转换,同时注意,这里只进行了IP转换,而没有进行端口的转换。

3.2 NAPT(端口多路复用技术)

与静态NAT的差别是,NAPT不但要转换IP地址,还要进行传输层的端口转换。具体的表现形式就是,对外只有一个公网IP,通过端口来区别不同私有IP主机的数据。

NAPT有4中类型 看下图:

nat类型哪种更安全(NAT详解与网络穿透原理分析)(2)

3.2.1 对称型(Symmetric)

1.复用旧的映射关系通信 这就是锥型(Cone) NAT

2.创建新的映射关系通信 这就是对称型NAT

​ 对称型NAT把从同一内网地址和端口到相同日的地址和端口的所有请求,都映射到同一个公网地址和端口。如果同一个内网主机,用相同的内网地址和端口向另一个目的地址发送分组,则会使用不同的映射,而且公网主机只有在接收到分组后,才能向与发送分组的内网主机进行通信。可见,对称性NAT是所有NAT类型中限制最为严格的口

在图7-4中,对称型NAT会将内网地址{X:y}转换成公网地址{A:b}并绑定为{X=Y}|{A:b}<一>{P:q}。这就意味着NAT只允许地址{A:b}接收来自{P:q}的分组,将它转给{X:y} 。当客户机请求一个不同的公网地址{M:n}时,NAT会新分配一个外部端口{C:d} .

nat类型哪种更安全(NAT详解与网络穿透原理分析)(3)

3.2.2 全锥型(Full Cone)

​ 完全圆锥型的NAT 将从同一内部IP地址和端口来的所有请求,都映射到相同的外部IP地址和端口。而且,任何外部主机通过向映射的外部地址发送报文,可以实现和内部主机进行通信。这是一种比较宽松的策略,只要建立了内部网络的IP地址和端口与公网IP地址和端口的映射关系,则所有Internet上的主机都可以访问该NAT之后的主机。

在图7-1中,NAT会将内网地址{X:y} (x代表内网主机的IP地址,Y代表端口)映射成公网地址{A:b}(A代表映射的公网IP地址,b代表映射的端口)并绑定。任何数据分组都可以通过地址麦{A:b}送到此内网主机。

nat类型哪种更安全(NAT详解与网络穿透原理分析)(4)

3.2.3 IP受限锥型(Restricted Cone)

受限圆锥型NAT也是将从相同的内部IP地址和端口来的所有请求,映射到相同的公网IP地址和端口。但是与完全圆锥型NAT不同,当且仅当内网主机之前己经向公网主机(假设IP地址为P)发送过分组,此公网主机才能够向内网主机发送分组。

在图7-2中,NAT会将内网地址{x:y}映射成公网地址{A:b〕并绑定,只有源地址为P的分组才能和此内网主机通信。

nat类型哪种更安全(NAT详解与网络穿透原理分析)(5)

3.2.4 端口受限锥型(Port Restricted Cone)

类似于受限圆锥型NAT,但更严格。增加了端口号的限制,当内网主机之前已经向公网主机发送了分组,公网主机才能和此内网主机通信。

在图7-3中,NAT会将内网地址{X:y}映射成公网地址{A:b}并绑定,由于内网主机之前己经分别与地址为M 端口为n的主机以及地址为P 端口为q的主机通信,所以只有来自这两个公网地址和端口的分组才能到达内网主机。

nat类型哪种更安全(NAT详解与网络穿透原理分析)(6)

网络穿透原理1.STUN简介

STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。

1.1 探测过程

​ 假设有如下UAC(B),NAT(A),SERVER(C),UAC的IP为IPB,NAT的IP为 IPA ,SERVER的 IP为IPC1 、IPC2。请注意,服务器C有两个IP来探测NAT类型.

1.1.1 第一步:

​ B向C的IPC1的port1端口发送一个UDP包。C收到这个包后,会把它收到包的源IP和port写到UDP包中,然后把此包通过IPC1和port1发还给B。这个IP和port也就是NAT的外网IP和port,也就是说你在STEP1中就得到了NAT的外网IP。

​ 熟悉NAT工作原理的朋友可以知道,C返回给B的这个UDP包B一定收到。如果在你的应用中,向一个STUN服务器发送数据包后,你没有收到STUN的任何回应包,那只有两种可能:

​ 1、STUN服务器不存在,或者你弄错了port。

​ 2、你的NAT设备拒绝一切UDP包从外部向内部通过(对称性NAT)。

​ 当B收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网,下步NAT将去探测防火墙类型。如果不一样,说明有NAT的存在,系统进行STEP2的操作。

1.1.2 第二步:

​ B向C的IPC1发送一个UDP包,请求C通过另外一个IPC2和PORT向B返回一个UDP数据包.

我们来分析一下,如果B收到了这个数据包,那说明什么?说明NAT来着不拒,不对数据包进行任何过滤,这也就是STUN标准中的全锥形NAT。遗憾的是,full cone nat太少了,这也意味着你能收到这个数据包的可能性不大。如果没收到,那么系统进行STEP3的操作。

1.1.3 第三步:

​ B向C的IPC2的port2发送一个数据包,C收到数据包后,把它收到包的源IP和port写到UDP包中,然后通过自己的IPC2和port2把此包发还给B。

​ 和step1一样,B肯定能收到这个回应UDP包。此包中的port是我们最关心的数据,下面我们来分析:

如果这个port和step1中的port一样,那么可以肯定这个NAT是个锥形NAT,否则是对称NAT。道理很简单:根据对称NAT的规则,当目的地址的IP和port有任何一个改变,那么NAT都会重新分配一个port使用,而在step3中,和step1对应,我们改变了IP和port。因此,如果是对称NAT 那这两个port肯定是不同的。

​ 如果在你的应用中,到此步的时候PORT是不同的,恭喜你,你的STUN已经死了。如果不同,那么只剩下了restrict cone 和port restrict cone。系统用step4探测是是那一种。

1.1.4 第四步:

​ B向C的IP2的一个端口PD发送一个数据请求包,要求C用IP2和不同于PD的port返回一个数据包给B。

我们来分析结果:如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是ip受限锥形NAT。如果没收到,端口受限锥形NAT.

2.TURN简介

​ 在使用STUN协议不能做穿透时 需要使用TURN协议做转发(中继).这个转发的协议就被定义为TURN。TURN和其他中继协议的不同之处在于,它允许客户端使用同一个中继地址(relay address)与多个不同的peer进行通信。

1.转发原理

在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到达公网,TURN服务器架设在公网中,不同的客户端以TURN服务器为中继和其他peer进行通信,如下图所示:

nat类型哪种更安全(NAT详解与网络穿透原理分析)(7)

​ 在上图中,左边的TURN Client是位于NAT后面的一个客户端(内网地址是10.1.1.2:49721),连接公网的TURN服务器(默认端口3478)后,服务器会得到一个Client的反射地址(Reflexive Transport Address 即NAT分配的公网IP和端口)192.0.2.1:7000,此时Client会通过TURN命令创建或管理ALLOCATION,allocation是服务器上的一个数据结构,包含了中继地址的信息。
​ 服务器随后会给Client分配一个中继地址,即图中的192.0.2.15:50000,另外两个对等端若要通过TURN协议和Client进行通信,可以直接往中继地址收发数据即可,TURN服务器会把发往指定中继地址的数据转发到对应的Client,这里是其反射地址。

​ Server上的每一个allocation都唯一对应一个client,并且只有一个中继地址,因此当数据包到达某个中继地址时,服务器总是知道应该将其转发到什么地方。
​ 但值得一提的是,一个Client可能在同一时间在一个Server上会有多个allocation,这和上述规则是并不矛盾的。

猜您喜欢: