NAT类型测试工具是一款用于检测本机或对端NAT类型的免费工具,公开STUN服务器完成判断。它免安装、体积小,运行时不占用多少内存,操作门槛很低。当SIP终端使用私有IP地址时,往往需要配置STUN服务器,这款工具就能派上用场。测试中stunserver.org的表现正常,可以直接选用。

1、 主要用途是检查判断自己或对方的NAT类型,帮助定位网络连接问题
2、 公开的免费STUN服务器完成检测,无需自建服务端
3、 SIP终端在使用私有IP地址时,可能需要配置STUN服务器,此工具可辅助验证
4、 程序为绿色版,无需安装,不占内存空间,使用简单方便
- stunserver.org,测试结果正常,可优先使用
- stun.fwdnet.net:3478
- stun.ekiga.net
- stun01.sipphone.com,无DNS SRV记录
- stun.softjoys.com,无DNS SRV记录
- stun.voipbuster.com,无DNS SRV记录
- stun.voxgratia.org,无DNS SRV记录
- stun.xten.com
- stun.sipgate.net:10000
- stun.softjoys.com:3478
- 考虑到UDP的无状态特性,针对它的NAT实现大致分为Full Cone、Restricted Cone、Port Restricted Cone和Symmetric NAT四种
- 对TCP协议而言,目前NAT中的实现基本一致,差异不大,因为TCP本身面向连接,不必考虑无状态带来的复杂性
- Full Cone NAT:同一内部Tuple X的请求都被转换到同一个外部Tuple Y,请求是否来自同一应用或多个应用;X-Y映射建立后,任意外部主机都能随时把Y中的地址和端口作为目标,向内部主机发送UDP报文,对外部来源没有限制,简单但安全性偏低
- Restricted Cone NAT:Full Cone的受限版本,同一内部Tuple X的请求同样被转换到同一外部Tuple Y;区别在于只有内部主机曾向外部主机(假设IP为Z)发送过报文后,外部主机才能以Y中的信息为目标向内部主机发送UDP请求,NAT只转发来自当前已知外部主机的UDP报文,保障了外部请求来源的安全
- Port Restricted Cone NAT:Restricted Cone NAT的进一步受限版,只有内部主机曾向外部主机(假设IP为Z、端口为P)发送过报文后,外部主机才能以Y中的信息为目标向内部主机发送UDP报文,且请求报文的源端口必须为P,对外部报文来源的限制更强,比Restricted Cone更安全
- Symmetric NAT:比所有Cone NAT都更灵活的转换方式;Cone NAT中内部Tuple与外部Tuple的映射关系独立于内部主机发出的UDP报文中的目标地址及端口,即与目标Tuple无关;Symmetric NAT中目标Tuple是NAT设备建立转换关系的重要考量,只有来自同一内部Tuple且针对同一目标Tuple的请求才被转换到同一外部Tuple,否则NAT会分配一个新映射
1、 前提条件:有一个公网Server并绑定两个公网IP(IP-1、IP-2),Server在(IP-1,Port-1)和(IP-2,Port-2)上做UDP监听,并根据客户端要求进行应答
2、 第一步检测客户端是否有能力进行UDP通信以及是否位于NAT后
3、 客户端建立UDP socket,向服务器的(IP-1,Port-1)发送数据包,要求服务器返回客户端的IP和Port
4、 发送请求后立即开始接收数据包,设置socketTimeout(300ms),防止无限堵塞,重复这个过程若干次
5、 如果每次都超时、无法收到服务器回应,说明客户端无法进行UDP通信,可能是防火墙或NAT阻止了UDP通信,这样的客户端不能P2P,检测停止
6、 当客户端能收到服务器回应时,把服务器返回的客户端(IP,Port)与该socket的(LocalIP,LocalPort)比较;如果完全相同,说明客户端不在NAT后,具有公网IP,可以直接监听UDP端口接收数据通信,检测停止;否则客户端在NAT后,需要继续做进一步的NAT类型检测
- 第二步检测是否为Full Cone NAT:客户端建立UDP socket,向服务器的(IP-1,Port-1)发送数据包,要求服务器用另一对(IP-2,Port-2)响应客户端;发送后立即接收数据包,设置socketTimeout(300ms),重复若干次
- 如果每次都超时、无法收到回应,说明不是Full Cone NAT,具体类型待下一步检测;如果能收到服务器从(IP-2,Port-2)返回的应答UDP包,说明是Full Cone NAT,这样的客户端能进行UDP-P2P通信,检测停止
- 第三步检测是否为Symmetric NAT:客户端建立UDP socket,向服务器的(IP-1,Port-1)发送数据包,要求服务器返回客户端的IP和Port;发送后立即接收数据包,设置socketTimeout(300ms),重复直到收到回应(一定能收到,因为第一步已保证该客户端可进行UDP通信)
- 用同样方法,用一个socket向服务器的(IP-2,Port-2)发送数据包,要求服务器返回客户端的IP和Port
- 比较上面两个过程从服务器返回的客户端(IP,Port):如果两个过程返回的(IP,Port)有一对不同,说明客户端为Symmetric NAT,这样的客户端无法进行UDP-P2P通信,检测停止;否则是Restricted Cone NAT,是否为Port Restricted Cone NAT待下一步检测
- 第四步检测是Restricted Cone NAT还是Port Restricted Cone NAT:客户端建立UDP socket,向服务器的(IP-1,Port-1)发送数据包,要求服务器用IP-1和一个不同于Port-1的端口发送UDP数据包响应客户端;发送后立即开始接收数据包,设置socketTimeout(300ms),重复若干次
- 如果每次都超时、无法收到服务器回应,说明客户端是一个Port Restricted Cone NAT
(您的评论需要经过审核才能显示)
0条评论