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

    选择打赏方式

NAT实现方式:

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

NAT四种类型:

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

NAT特性:

宽带分享 安全防护

常用穿透方法(UDP):

STUNTURNLCEUPNP

优点:

特定情况下可以减轻服务器的压力、节省公有合法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)      来者不拒

       初始状态时,ClientServer1ClientServer2都没有通讯过。

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

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

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

      

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

       初始状态时,ClinetServer1ClientServer2都没有通讯过。

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

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

       Server1主机地址:端口 210.15.27.166

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

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

      

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

初始状态时,ClientServer1ClientServer2都没有通讯过。

Client通过NATServer1发送一个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:80Client192.168.1.5:5000通信,因为Client也从来没有和Server1的其他端口通信过。


NAT4对称NAT(Symmetric)

       初始化状态时,ClientServer1ClientServer2都没有通信过。

       Client通过NATServer1发送一个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通过NAT210.21.12.140:8000Client192.168.1.5:5000通信。

Server2也只能用它的210.15.27.140:80通过NAT210.21.12.140:8001Client192.168.1.5:5000通信。

       Server1或者Server2的其他端口则不能和Client192.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字节的头部。

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

★消息属性

消息头之后是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属性出现在捆绑错误响应或共享私密错误响应中。它的响应号数值范围从100699

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

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

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

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

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

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

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

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

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

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

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

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

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

TURN穿透:

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

版权声明:若无特殊注明,本文为《铭心》原创,转载请保留文章出处。
本文链接:https://www.mxin.moe/nat-4.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!