NAT穿透详解

1.引言

​ 要实现两台内网主机进行通信,常规的方案如下:

客户端A<------------>服务端<------------>客户端B

​ 服务端提供转发监听服务,需要有固定公网IP和端口。客户端A和B分别连接服务端,数据通过服务端进行转发。典型的应用包括FRP和NGINX的反向代理。

​ 但这样的问题:所有数据都需要经过服务端进行转发,当数据过大时,服务端压力会特别大。

2.NAT穿透原理

​ 所有TCP/UDP通信,都存在以下几个要素源MAC、目的MAC、源IP地址、目的

​ 想知道内网穿透实现原理,先弄清楚我们平时在网络冲浪的时候,数据是如何发到服务器的又是如何接受到数据的?我相信大家都知道,我们客户端在发送数据给服务器的时候,首先服务器的ip地址和端口我们是事先知道的,服务器接收到客户端的数据请求的同时也获取到了客户端的公网ip地址和端口,然后服务器根据客户端的公网ip地址和端口返回数据。
​ 因为IPV4的地址太少了,不可能每个设备都有一个固定的公网IP地址,所以运营商会在一个固定区域内设置NAT网关服务器(拥有公网IP地址)。

例子:

网络结构:客户端A<->Nat网关A(10.2.6.4.1)<->服务端(182.154.3.21)<->Nat网关B(10.3.5.7.8)<->客户端B

结构说明:
	服务端的182.154.3.21为固定公网IP地址;
	客户端A连接服务端:客户端A内网192.168.10.2:5125,经过Nat网关A被映射为公网10.2.6.4.1:52145
	客户端B连接服务端:客户端B内网192.168.20.3:8547,经过Nat网关B被映射为公网10.3.5.7.8:68541
传输说明:
	当服务端发送数据给10.2.6.4.1:52145,就会被转发到192.168.10.2:5125,最后由客户端A接收。同样适用于客户端N。

​ 按上面例子的原理,NAT穿透的步骤如下:

  • 客户端A和客户端B分别主动和服务端建立好连接;
  • 服务端分别告诉客户端A和客户端B对端的公网IP和端口;
  • 客户端A和客户端B分别将数据送往对方的公网IP和端口,从而实现了互相通信,这也是P2P网络的经典实现方法

3.NAT

3.1.工作原理

​ NAT缓解了IPV4地址不够用的问题,同时也带了限制:那就是NAT外部的主机无法主动跟位于NAT内部的主机通信。NAT内部主机想要通信,必须主动和公网的一个IP通信,路由器负责建立一个映射关系,从而实现数据的转发, 这就是NAT的工作原理。

3.2.NAT分类

3.2.1 基础型NAT

​ 仅将内网主机的私有IP地址转换成公网的IP地址,并不将TCP/UDP端口信息进行转换,分为静态NAT和动态NAT。

3.2.2 NAPT

​ NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。

3.3.2.1.锥型NAT

1.Full Cone NAT(全锥型)
内网主机和外网建立socket时,NAT会给其分配一个外网地址(IP:端口)。任何主机想要发送数据给这个内网主机,只要知道这个外网地址(IP:端口)就可以了。

扫描二维码关注公众号,回复: 16157217 查看本文章

2.Restricted Cone NAT(地址限制圆锥型NAT)
内网主机和外网建立socket时,NAT会给其分配一个外网地址(IP:端口)。任何主机想要发送数据给这个内网主机,需要知道这个外网地址(IP:端口),且内网主机之前用这个外网地址(IP:端口)曾向这个外部主机IP发送过数据。需要同时满足这两个条件,这个外部主机就可以发送数据给内网主机。

3.Port Restricted Cone NAT(端口限制圆锥型NAT)
与地址限制圆锥型类似,与之不同的是还要指定端口号。

3.3.2.2.对称NAT

​ NATSymmetric NAT(对称型NAT),对不同的外网IP地址都会分配不同的端口号。

​ 内网主机和外网主机1建立socket时,NAT会给其分配一个外网地址1(IP:端口),如果内网主机同时用这个socket给外部主机2发送数据,NAT会给其分配一个外网地址2(IP:端口)。

​ 如果NAT有多于一个外网IP,则外网IP-1和外网IP-2可能不同;如果NAT只有一个外网IP,则端口-1和端口-2肯定不同。

​ 此外,任何外部主机想要发送数据给这个内网主机,那么它首先应该收到内网主机发给他的数据,然后才能往回发送,否则即使他知道内网主机的一个(PublicIP,Port)也不能发送数据给内网主机,这种NAT无法实现UDP-P2P通信。

3.3.2.3.锥型和对称的区别

​ 对称NAT是一个请求对应一个外网地址1(IP:端口),非对称NAT是多个请求对应一个外网地址1(IP:端口)。

3.3.2.4.安全系数

​ 对称型 > 端口受限锥型 > 受限锥型 > 全锥型

3.3.NAT组合的穿透属性

​ 分别定义Full Cone NAT(完全圆锥型NAT)、Restricted Cone NAT(地址限制圆锥型NAT)、 ort Restricted Cone NAT(端口限制圆锥型NAT)、Symmetric NAT(对称型NAT)的值为1、2、3、4,如下:

1	Full Cone NAT(完全圆锥型NAT)
2	Restricted Cone NAT(地址限制圆锥型NAT)
3	Port Restricted Cone NAT(端口限制圆锥型NAT)
4	Symmetric NAT(对称型NAT)

穿透关系:

​ N为序列号相加,则N<=6可穿透。也就是只有3 和 4 ,以及4和4不可穿透。

3.4.例子:UDP打洞

​ 该例子根据端口限制圆锥型Nat设计一个穿透过程:

网络结构:客户端A<->Nat网关A<->服务端<->Nat网关B<->客户端B
  • 客户端A 和 客户端B分别通过Nat与服务器进行通信,服务端只存储两个客户端的公网IP地址信息;
  • 服务端接收到数据时,分别将户端A 和 客户端B的IP地址信息发送给对方;
  • 客户端A先发送一个探测数据给客户端B的公网IP,客户端B此时接收不到数据。因为根据协议,NatB中的映射没有这条规则,也就是说NatB并没有发送过数据给NatA,那就接收不到来自NatA的数据,但此时NatA添加了一条NatB信息的映射规则。
  • NatB发送一条探测数据给NatA, NatA收到了。因为NatA在上一步骤中发送数据给NatB了,有了这条映射规则;
  • NatA 再发送一条探测数据给NatB,NatB此时也能收到了;
  • 现在,UDP隧道建立成功,可以进行数据传输了。这个过程也叫做UDP打洞;

猜你喜欢

转载自blog.csdn.net/weixin_35804181/article/details/131359449
今日推荐