概念
内部Tuple:(源)内网IP+PORT(例如:192.168.1.5:50007)
外部Tuple:(源)公网IP+PORT
目标Tuple:(目标)公网IP+PORT
NAT类型介绍
Symmetric和Cone两种,其中Cone又分为Full Cone、Restricted Cone、Port Restricted Cone三种类型。基本不同是NAT将内部Tuple与外部Tuple的转换和映射关系的不同。Cone NAT与目标Tuple无关,Symmetric NAT将目标Tuple作为建立转换关系之前的重要参考项,与目标Tuple严格一一映射。
Full Cone:
内部Tuple X经过NAT转换至外部Tuple Y,X-Y的建立转换关系,任意外部节点且无限制Tuple Z都可以将Tuple Y作为目标Tuple,向我们的内部Tuple X发送UDP报文。
Restricted Cone:
与Full Cone不同的是:多了一个限制,限制是什么,出于安全考虑,NAT设备只转发已知的外部Tuple的IP报文,只有当内部Tuple X曾经发送过UDP报文给目标Tuple Z,才可以与Tuple X发送报文。
Port Restricted Cone NAT:
在Restricted Cone上的基础上,出于更加安全的考虑,NAT设备只转发已知的外部Tuple的IP+PORT(过滤条件更为苛刻)报文。
Symmetric
通过严格的NAT方式,与目标Tuple建立严格的一一映射关系,确保安全性。
所以,从安全角度考虑:Symmetric > Port Restricted Cone NAT > Restricted Cone > Full Cone。相反,如果我们做P2P,打通点对点的通信方式的简单程度,与上面排序就相反,最友好的NAT类型就是Full Cone,任意节点且无限制。
测试与验证方法
方法1:借助第三方STUN列表
Python:https://github.com/laike9m/PyPunchP2P
需要借助外部STUN服务器完成,如下可作为STUN列表,进行尝试建立连接。
stun.xten.com 3478 stun.voipbuster.com 3478 stun.voxgratia.org 3478 stun.sipgate.net 10000 stun.ekiga.net 3478 stun.ideasip.com 3478 stun.schlund.de 3478 stun.voiparound.com 3478 stun.voipbuster.com 3478 stun.voipstunt.com 3478 numb.viagenie.ca 3478 stun.counterpath.com 3478 stun.1und1.de 3478 stun.gmx.net 3478 stun.callwithus.com 3478 stun.counterpath.net 3478 stun.internetcalls.com 3478 stun.voip.aebc.com 3478 numb.viagenie.ca 3478
方法2:测试工具
NAT类型测试工具:http://www.pc6.com/softview/SoftView_92208.html
方法3:部署stun服务器
Server:https://github.com/gortc/stund
Client:https://github.com/ccding/go-stun
注:Server端有双地址和公网IP的要求限制。
NAT类型判别流程

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229925.html原文链接:https://javaforall.net
