NAT——网络穿透的四种模式


avatar
铭心 2021-07-06 2.99k

NAT实现方式:

静态转换 动态转换 端口多路复用

NAT四种类型:

NAT1完全圆锥型(Full Cone)、NAT2受限锥型(Restricted Cone)、NAT3端口限制圆锥型(Port Restricted Cone)、NAT4对称型(Symmetric);

NAT特性:

宽带分享 安全防护

常用穿透方法(UDP):

STUN、TURN、LCE、UPNP;

优点:

特定情况下可以减轻服务器的压力、节省公有合法IP地址、处理地址重叠、

缺点:

延迟增大、配置和维护的复杂性、不支持某些应用或者服务,需要通过静态映射来避免;

静态转换

       IP地址的对应关系是一对一,而且是不变的,借助静态转换,能实现外部网络对内部网络中某些特设定服务器的访问。

       举例:

       公网IP:111.205.195.103  私网IP:192.168.1.66  NAT网关:192.168.1.1  端口:80(http)

       映射前:访问111.205.195.103:80报错无法正常访问。

       映射后:访问111.205.195.103:80信息传送到192.168.1.66:80端口,网站正常访问。

动态转换

       IP地址的对应关系是不确定的,而是随机的,所有被访问互联网的私有地址可随机转换为任何指定的合法的外部IP地址。

       举例:

       公网IP池:111.205.195.103/24

端口多路复用

       通过改变外出数据包的源IP地址和源端口并进行转换,内部网络的所有主机均可共享一个合法IP地址互联网的访问,节约IP。

       举例:

Client 192.168.1.5  NAT
210.21.12.140  Server1 210.15.27.166  Server2 210.15.27.140

NAT1完全圆锥型(Full
Cone)      来者不拒

       初始状态时,Client与Server1、Client与Server2都没有通讯过。

       当Client通过NAT向Server1发送一个packet后,NAT会生成如下映射:

       Client主机地址:端口 192.168.1.5:5000 NAT公网地址:端口210.21.12.140.8000

       在全锥型网络下,后续当Server1要发送数据到Client时,Server1首先将数据送到NAT,NAT接收到该报文,会将该报文转给Client。

      

NAT2受限圆锥型(Restricted
Cone)   我不给你钥匙你不能进我家门

       初始状态时,Clinet与Server1、Client与Server2都没有通讯过。

       当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映射:

       Client主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

       Server1主机地址:端口 210.15.27.166

       在受限圆锥型NAT下,Server1要发送数据到Client时,Server1首先将数据送到NAT,NAT接收到该报文,会将该报文转发给Client。

但是Server2主机无法与Client主机进行通讯。因为Client从来没有和Server2通信过,NAT将拒绝Server2试图与Client连接的动作。

      

NAT3端口受限圆锥型(Port
Restricted Cone)

初始状态时,Client与Server1、Client与Server2都没有通讯过。

当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映:

Client主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

       Server主机地址:端口 210.15.27.166:80

在端口受限圆锥型NAT下,Server2无法与Client通信,因为Client从来没有和Server2通信过。

并且Server1也只能用它的210.15.27.166:80与Client的192.168.1.5:5000通信,因为Client也从来没有和Server1的其他端口通信过。

NAT4对称NAT(Symmetric)

       初始化状态时,Client与Server1、Client与Server2都没有通信过。

       当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映射:

       Client主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

       Server主机地址:端口 210.15.27.166:80

       接下来Client要使用相同的端口和Server2通信,将会在NAT中生成如下映射:

       Client
192.168.1.5:5000  NAT 210.21.12.140:8000  Server1 210.15.27.166:80

       Client 192.168.1.5:5000
NAT 210.21.12.140:8001  Server2 210.15.27.140:80

Server1只能用它的210.15.27.166:80通过NAT的210.21.12.140:8000与Client的192.168.1.5:5000通信。

Server2也只能用它的210.15.27.140:80通过NAT的210.21.12.140:8001与Client的192.168.1.5:5000通信。

       Server1或者Server2的其他端口则不能和Client的192.168.1.5:5000通信。

安全防护:

STUN定义:

       STUN(Session
Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC5389定义。

STUN穿透:

       STUNml(simple
traversal of UDP over NAT)的原理是通过某种机制预先得到内部私有IP地址对应在出口NAT上的对外公网IP地址,然后在报文负载中所描述的地址信息就直接填写出口NAT上的对外IP地址。其最大的优点是无需对现有NAT/防火墙设备做任何改动。局限性在于需要应用程序支持STUN CLIENT的功能,同时STUN并不适合支持TCP连接的穿越。

STUN报文:

★消息头

所有的STUN消息都包含20个字头的消息头,包括16位的消息类型,16位的消息长度和128位的事务ID。

字节

0                                                     1                                2                                      3

消息类型

消息长度

事务ID

消息许可类型:

0x0001:捆绑请求

0x0101:捆绑响应

0x0111:捆绑错误响应

0x0002:共享私密请求

0x0102:共享私密响应

0x0112:共享私密错误响应

消息长度,是消息大小的字节数,但不包括20字节的头部。

事务ID,128位的标识符,用于随机请求和响应,请求与其相应的所有响应具有相同的标识符。

★消息属性

消息头之后是0个或多个属性,每个属性进行TLV编码,包括16位的属性类型、16位的属性长度和变长属性值。

字节

0                                      1                                                 2                                 3

属性类型

属性长度

属性值

……

属性类型定义:

MAPPED-ADDRESS

MAPPED-ADDRESS属性表示映射过的IP地址和端口。它包括8位的地址族,16位的端口号及长度固定的IP地址。

RESPONSE-ADDRESS

RESPONSE-ADDRESS属性表示响应的目的地址

CHASNGE-REQUEST

客户使用32位的CHANGE-REQUEST属性来请求服务器使用不同的地址或端口号来发送响应。

SOURCE-ADDRESS

SOURCE-ADDRESS属性出现在捆绑响应中,它表示服务器发送响应的源IP地址和端口。

CHANGED-ADDRESS

如果捆绑请求的CHANGE-REQUEST属性中的“改变IP”和“改变端口”标志设置了,则CHANGED-ADDRESS属性表示响应发出的IP地址和端口号。

USERNAME

USERNAME属性用于消息的完整性检查,用于消息完整性检查中标识共享私密。USERNAME通常出现在共享私密响应中,与PASSWORD一起。当使用消息完整性检查时,可有选择地出现在捆绑请求中。

PASSWORD

PASSWORD属性用在共享私密响应中,与USERNAME一起。PASSWORD的值是变长的,用作共享私密,它的长度必须是4字节的倍数,以保证属性与边界对齐。

MESSAGE-INTEGRITY

MESSAGE-INTEGRITY属性包含STUN消息的HMAC-SHA1,它可以出现在捆绑请求或捆绑响应中;MESSAGE-INTEGRITY属性必须是任何STUN消息的最后一个属性。它的内容决定了HMAC输入的Key值。

ERROR-CODE

ERROR-CODE属性出现在捆绑错误响应或共享私密错误响应中。它的响应号数值范围从100到699。

400(错误请求):请求变形了。客户在修改先前的尝试前不应该重试该请求。

401(未授权):捆绑请求没有包含MESSAGE-INTERITY属性。

420(未知属性):服务器不认识请求中的强制属性。

430(过期资格):捆绑请求没有包含MESSAGE-INTEGRITY属性,但它使用过期

的共享私密。客户应该获得新的共享私密并再次重试。

431(完整性检查失败):捆绑请求包含MESSAGE-INTEGRITY属性,但HMAC验

证失败。这可能是潜在攻击的表现,或者客户端实现错误

432(丢失用户名):捆绑请求包含MESSAGE-INTEGRITY属性,但没有

USERNAME属性。完整性检查中两项都必须存在。

433(使用TLS):共享私密请求已经通过TLS(Transport
Layer Security,即安全

传输层协议)发送,但没有在TLS上收到。

500(服务器错误):服务器遇到临时错误,客户应该再次尝试。

600(全局失败):服务器拒绝完成请求,客户不应该重试。

TURN穿透:

TURN即通过Relay方式穿越NAT,也是私网中的SIP终端通过某种机制预先得剑TURN SeI-ver上的公网地址,私网终端发出的报文都要经过TURN Serve:进行Relay转发。这种方式除了具有STUN方式的优点外,还解决了STUN应用无法穿透对称NAT(SymmetricNAT)以及类似的Firewall设备的缺陷,局限性在于需要SIP终端支持TURN Client,并增大了包的延迟和丢包的可能性。

NAT实现方式:

  • 静态转换
  • 动态转换
  • 端口多路复用

NAT四种类型:

  • NAT1 完全圆锥型 (Full Cone)
  • NAT2 受限锥型 (Restricted Cone)
  • NAT3 端口限制圆锥型 (Port Restricted Cone)
  • NAT4 对称型 (Symmetric)

NAT特性:

  • 宽带分享
  • 安全防护

常用穿透方法(UDP):

  • STUN
  • TURN
  • LCE
  • UPNP

优点:

  • 特定情况下可以减轻服务器的压力、节省公有合法IP地址、处理地址重叠

缺点:

  • 延迟增大
  • 配置和维护的复杂性
  • 不支持某些应用或服务,需要通过静态映射来避免

静态转换:

IP地址的对应关系是一对一,而且是不变的,借助静态转换,能实现外部网络对内部网络中某些特设定服务器的访问。

举例:

公网IP: 111.205.195.103 私网IP: 192.168.1.66 NAT网关: 192.168.1.1 端口: 80 (http)

映射前:访问111.205.195.103:80报错无法正常访问。

映射后:访问111.205.195.103:80信息传送到192.168.1.66:80端口,网站正常访问。

动态转换:

IP地址的对应关系是不确定的,而是随机的,所有被访问互联网的私有地址可随机转换为任何指定的合法的外部IP地址。

举例:

公网IP池: 111.205.195.103/24

端口多路复用:

通过改变外出数据包的源IP地址和源端口并进行转换,内部网络的所有主机均可共享一个合法IP地址互联网的访问,节约IP。

举例:

Client 192.168.1.5 NAT 210.21.12.140 Server1 210.15.27.166 Server2 210.15.27.140

NAT1 完全圆锥型 (Full Cone):来者不拒

初始状态时,Client与Server1、Client与Server2都没有通讯过。

当Client通过NAT向Server1发送一个packet后,NAT会生成如下映射:

Client 主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

在全锥型网络下,后续当Server1要发送数据到Client时,Server1首先将数据送到NAT,NAT接收到该报文,会将该报文转给Client。

NAT2 受限圆锥型 (Restricted Cone):我不给你钥匙你不能进我家门

初始状态时,Client与Server1、Client与Server2都没有通讯过。

当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映射:

Client 主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

Server1 主机地址:端口 210.15.27.166

在受限圆锥型NAT下,Server1要发送数据到Client时,Server1首先将数据送到NAT,NAT接收到该报文,会将该报文转发给Client。

但是Server2主机无法与Client主机进行通讯。因为Client从来没有和Server2通信过,NAT将拒绝Server2试图与Client连接的动作。

NAT3 端口受限圆锥型 (Port Restricted Cone):

初始状态时,Client与Server1、Client与Server2都没有通讯过。

当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映:

Client 主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

Server 主机地址:端口 210.15.27.166:80

在端口受限圆锥型NAT下,Server2无法与Client通信,因为Client从来没有和Server2通信过。

并且Server1也只能用它的210.15.27.166:80与Client的192.168.1.5:5000通信,因为Client也从来没有和Server1的其他端口通信过。

NAT4 对称NAT (Symmetric):

初始化状态时,Client与Server1、Client与Server2都没有通信过。

当Client通过NAT向Server1发送一个packet后,NAT中会生成如下映射:

Client 主机地址:端口 192.168.1.5:5000 NAT公网地址:端口 210.21.12.140:8000

Server 主机地址:端口 210.15.27.166:80

接下来Client要使用相同的端口和Server2通信,将会在NAT中生成如下映射:

Client 192.168.1.5:5000 NAT 210.21.12.140:8000 Server1 210.15.27.166:80

Client 192.168.1.5:5000 NAT 210.21.12.140:8001 Server2 210.15.27.140:80

Server1只能用它的210.15.27.166:80通过NAT的210.21.12.140:8000与Client的192.168.1.5:5000通信。

Server2也只能用它的210.15.27.140:80通过NAT的210.21.12.140:8001与Client的192.168.1.5:5000通信。

Server1或者Server2的其他端口则不能和Client的192.168.1.5:5000通信。

安全防护:

STUN定义:

STUN (Session Traversal Utilities for NAT, NAT会话穿越应用程序) 是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT路由器之后的主机之间创建UDP通信。该协议由RFC5389定义。

STUN穿透:

STUNml (simple traversal of UDP over NAT) 的原理是通过某种机制预先得到内部私有IP地址对应在出口NAT上的对外公网IP地址,然后在报文负载中所描述的地址信息就直接填写出口NAT上的对外IP地址。其最大的优点是无需对现有NAT/防火墙设备做任何改动。局限性在于需要应用程序支持STUN CLIENT的功能,同时STUN并不适合支持TCP连接的穿越。

STUN报文:

★消息头

所有的STUN消息都包含20个字头的消息头,包括16位的标识符和magic cookie。STUN消息包括两种:请求报文和响应报文。

★消息格式

STUN报文内容包括一段标头后面跟着一些属性字段,属性可以是多种多样的,并且还可以跟随一个有效的负载,通常是一个UDP数据包。

TURN定义:

TURN(Traversal Using Relays around NAT,穿越NAT的中继)是一种网络协议,它提供了在对等主机之间传输数据的能力,而不需要确保它们都有一个公共IP地址。它由RFC5766定义,支持UDP和TCP。

TURN工作原理:

一个需要连接的客户端通过一个TURN服务器来进行中继转发。首先,该客户端将数据发送到TURN服务器,TURN服务器再将数据发送到目标客户端。接收数据时,目标客户端的TCP连接或者UDP连接是通过一个TURN服务器进行的。TURN提供了一种确保可靠数据传输的方法,但在实现中可能会引入延迟。

TURN与STUN的区别:

1)STUN是允许客户端探测其在NAT下的IP地址,若没有公网IP,可以通过STUN服务器来获取。是客户端与服务器之间的点对点协议;而TURN是需要一个中继服务,有点类似于P2P中的中继服务器,它负责转发数据。

2)STUN只是提供了NAT的公共IP地址,若在穿越时出现问题,无法解决。而TURN则会将所有数据通过中继服务器进行转发。

3)TURN服务器一般是需要付费的,STUN服务器基本都是免费的。

UPNP定义:

UPnP (Universal Plug and Play,通用即插即用) 是一组网络协议,旨在使设备之间的连接、发现和通信变得简单。它由多个协议组成,允许设备自动发现并与网络中的其他设备进行通信。通过UPnP,用户可以在家中的网络上轻松地连接和使用设备,如打印机、网络存储和其他设备。常用于媒体共享、游戏和家庭自动化。

UPNP的工作原理:

设备可以使用UPnP协议发现网络上的其他设备,并通过简单的命令进行控制和数据交换。当设备连接到网络时,它会向UPnP控制点发送消息,通知其存在和能力。控制点可以与这些设备进行通信,并发送命令以控制它们的功能。

UPNP的优缺点:

优点:方便、自动化的设备发现与配置、无缝连接设备

缺点:安全隐患:UPnP的安全性问题,可能导致网络受到攻击

暂无评论

发表评论
OωO表情