对称NAT穿透的一种新方法

前言

这种方法从安全的角度来说是利用了目前路由器实现对称NAT的方法中存在端口可以预测的漏洞,利用这个漏洞来实现打洞。加上一次发送大量的包,来增加命中的概率。

参考资料

整理翻译自

关键字

NAT穿透,对称NAT,UDP,P2P,状态包预测,TCP,P2P打洞

4中NAT类型

用语定义

1.内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组 2.外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口 3.目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组

详细释义

已经存在的穿透方案

UPNP,STUN,Teredo等都无法支持对称NAT(第4类NAT)穿透。

新方法

新方法的UDP打洞基于端口预测和限制TTL的值。也适用于其他的NAT类型。 新方法一共有3个阶段。

第一阶段

假设两个通讯的终端分别为echo client和echo server。

F1:echo client跟S1通讯,然后S1获得其经过NAT a的端口号。 F2:S1返回获得的端口号给echo client F3:echo client给S2发一个包。包括上次S1返回的nat之后的端口号。S2记录下相关的NAT端口信息。

第二阶段

第二阶段是echo server跟S1和S2通信。流程跟echo client类似。

第三阶段

经过之前的通讯,服务器可以获得echo client和echo server两次nat的端口号。比如echo client第一次nat端口为5361,第二次nat端口为5362,那么有理由猜测,第三次的端口为5363.经过测试发现端口的变化多是有一定的规律,递增,递减,跳跃等。

F7: 基于前面两个阶段的通信,可以预测打洞的端口和打洞的模式。发送给echo server. F8: 基于预测的端口,echo server发送大量的包。这些包包括一个固定的目的端口和低的TTL值。 F9: 同理,服务器将预测的端口发给echo client,跟F7类似。 F10: 基于预测的端口,echo client发送大量固定端口的数据包到预测的端口。之后,echo client 转换到接受模式。

如果预测的端口刚好被大量的包都命中。那么就可以建立通信。

新方法的优势

结论

这种方法从安全的角度来说是利用了目前路由器实现对称NAT的方法中存在端口可以预测的漏洞,利用这个漏洞来实现打洞。加上一次发送大量的包,来增加命中的概率。

经验分享 程序员 微信小程序 职场和发展