一、安装stun:
相关组件下载参照:https://github.com/awe1p/stun

cd到openwrt源代码路径
git glone https://github.com/awe1p/stun package/network/stun
make menuconfig,选中新增的stun-client和stund,保存退出
make V=s
镜像编译并烧录后,多了两个指令:stund stun-client。使用方法参照官网所述:https://openwrt.org/docs/guide-user/services/voip/stund

二、环境搭建:
路由器A作为stun服务器接入公网Internet;B为待测NAT,上级接入公网Internet,下级连路由C(或安装了stun的pc)作为stun-client

三、测试指令:
A运行:stund -v & (当然也可以指定interface)
C运行:stun-client {A的公网ip} -v
此时c返回公网ip和NAT类型等详细数据:

根据返回结果可判断出7种类型:
(1)Open Internet
(2)UDP Blocked
(3)Symmetric Firewall
(4)Full Cone NAT
(5)Restricted Cone NAT
(6)Port Restricted Cone NAT
(7)Symmetrict NAT
其中根据后4种NAT的返回结果判断为:
Independent Mapping, Independent Filter = Fullcone NAT
Independent Mapping, Address Dependent Filter = Restricted Cone NAT
Independent Mapping, Port Dependent Filter = Port-Restricted Cone NAT
Dependent Mapping = Symmetric NAT

根据Independent Mapping, Independent Filter可判断此时我的NAT类型为完全锥形NAT
去掉B,C直连公网,会得到Firewall。关掉C的防火墙,会得到open。

(实现Fullcone NAT过程: https://blog.csdn.net/xuzhen5062/article/details/106386098)

四、stun测试原理简述:

STUN协议定义了三类测试过程来检测NAT类型:
Test1:
STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-s1:Port-s1}把它所看到的STUN Client的IP和端口{IP-m1,Port-m1}作为Binding Response的内容回送给STUN Client。
Test1(2):
STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s2:Port-s2}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m1#2,Port-m1#2}作为Binding Response的内容回送给STUN Client。
Test2:
STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(设置了Change IP和Change Port属性)。STUN Server收到该请求后,通过端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m2,Port-m2}作为Binding Response的内容回送给STUN Client。
Test3:
STUN Client通过端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}发送一个Binding Request(设置了Change Port属性)。STUN Server收到该请求后,通过端口{IP-s1:Port-s2}把它所看到的STUN Client的IP和端口{IP-m3,Port-m3}作为Binding Response的内容回送给STUN Client。

顺序为:Test1、Tset2、Tset3、Tset1(2)

流程如下图所示:

根据之前的测试结果图也可以看出每种test的结果。

openwrt上用stun实现NAT类型检测相关推荐

  1. Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法

    在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信(即所谓的P2P通信),而不需 ...

  2. stun检查nat类型

    nat(Session Traversal Utilities for NAT)会话穿越应用程序,可以让位于nat后的客户端找出自己的公网地址以及对应的Internet端口,最重要的是可以判断自己处于 ...

  3. P2P内网穿透之Nat类型介绍及Nat类型检测16种NAT组合穿透操作指南整理

    目录 根据RFC 3489规定 Nat共分以下类型: 第一部分: NAT类型介绍 Full Cone NAT: Restricted Cone NAT: Port Restricted Cone NA ...

  4. 路由器NAT类型检测

    考虑到UDP的无状态特性,目前针对其的NAT实现大致可分为Full Cone.Restricted Cone.Port Restricted Cone和Symmetric NAT四种.值得指出的是,对 ...

  5. 标准STUN判断NAT类型的过程及改进

    这里基于stund的实现,来研究标准STUN协议,判断NatType的过程. stund用于判断NatType的接口的用法 首先来看stund中用于判断NatType的接口的用法.这里主要来看stun ...

  6. 路由器NAT 类型检测实现

    四种主要类型 完全圆锥型NAT Full Cone NAT 受限圆锥型NAT Address Restricted Cone NAT 端口受限圆锥型NAT Port Restricted Cone N ...

  7. 在OpenWrt上配置原生IPv6 NAT,,实现校园网路由器使用ipv6

    我的环境 网络:教育网原生双栈,IPv4地址固定,IPv6地址自动获取 固件版本:OpenWrt Chaos Calmer 15.05-rc2 r45918 内核版本:3.18.14 准备工作 第一步 ...

  8. Linux设备检测外部网络NAT类型

    Linux设备检测外部网络NAT类型 在异地组网的过程中发现,对称型NAT(Symmetric NAT)对P2P穿透的支持很不好,因此在搭建P2P穿透个人使用的客户端或服务器之前有必要搞清楚自己所在网 ...

  9. NAT 类型及检测方法

    NAT 类型及检测方法 STUN协议是一个客户机/服务器协议,在公网上存在着大量的STUN服务器,用户可以通过在自己主机上运行STUN客户端远程连接STUN服务器来确认自身的网络状况. 客户端主机所在 ...

最新文章

  1. java DOS 命令行代码
  2. c语言实现队列queue(附完整源码)
  3. Symbian学习笔记(4)——在GUI应用中使用图像
  4. 仅仅有单日的确诊总人数,无法触发SAP Analytics Cloud的Smart Discovery功能
  5. LeetCode 2055. 蜡烛之间的盘子(前缀和)
  6. Java笔记-JDK搭建WebService客户端其他调用方法
  7. Nginx配置文件示例
  8. 手机版计算机音乐,计算机音乐手机版
  9. Rabbitmq结合spring示例
  10. iPhone 14系列将采用打孔屏:Face ID等元件或置屏幕下
  11. React 16 Jest ES6 Class Mocks(使用ES6语法类的模拟) 实例三、四
  12. 关于appium中的Multiaction的用法
  13. Ubuntu 用vsftpd 配置FTP服务器教程详解
  14. 如何让计算机系统恢复默认字体,Win10修改系统字体后怎么还原系统默认字体?
  15. OpenAI发布DALL·E 2
  16. linux nginx 443端口被占用,Nginx拒绝监听端口443(示例代码)
  17. 华为千元旗舰迎GPU Turbo会员不限量升级,这件事很“吓人”
  18. 电脑白屏,笔记本电脑白屏是怎么回事 笔记本电脑白屏解决方法【详解】
  19. Python实验四:Python程序设计之文件
  20. 移动ISV大调查系列报告之四——MagicBox的游戏世界

热门文章

  1. android弹框 简书,Android -自定义弹框
  2. wget:无法解析主机地址...
  3. python字符加密2编程_python的字符串操作和*加密解密
  4. CMDB建设作品:使用Electron构建运维PC客户端
  5. C++:农夫过河问题
  6. vue的一、二级路由、路由导航、路由模式、404、
  7. java bufferedimage压缩_java – 如何将BufferedImage写为没有压缩的PNG?
  8. 如何远离网络钓鱼欺诈攻击 - 来自真实世界的12个诈骗案例
  9. SharePoint网站集功能介绍
  10. stylus在vue中的安装及使用