对称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的方法中存在端口可以预测的漏洞,利用这个漏洞来实现打洞。加上一次发送大量的包,来增加命中的概率。
