文章目录
参考资料
https://support.huawei.com/enterprise/zh/doc/EDOC1100334792/1c1d4c80
## 附、RFC3489 和 RFC5389、RFC5780
# 老旧的 RFC3489 和 RFC5389
https://datatracker.ietf.org/doc/html/rfc3489
https://datatracker.ietf.org/doc/html/rfc5389
# 新的 RFC5780
https://datatracker.ietf.org/doc/html/rfc5780
## stun检测过程数据包(stun服务端上抓取的)
# 用NatTypeTester 测试的
wget https://qiniu.wsfnk.com/bokefiles/rfc5780-udp.pcap
wget https://qiniu.wsfnk.com/bokefiles/rfc5780-tcp.pcap
# 用NatTypeTester 测试的
wget https://qiniu.wsfnk.com/bokefiles/rfc3489.pcap
# 用pystun3 测试的
wget https://qiniu.wsfnk.com/bokefiles/pystun-rfc3489.pcap
## 实测国内可用的STUN检测服务器
stun.miwifi.com
stun.voipbuster.com
stun.aa.net.uk
stun.acrobits.cz
stun.actionvoip.com
stun.avigora.fr
# 这是一起的
stun.aeta-audio.com
stun.aeta.com
# 这两其实是一个
stun.12connect.com
stun.12voip.com
linux下pystun3检测nat类型(没啥卵用)
## Tips: pystun3 工具的局限性
1、该工具 仅能做 udp 检测
2、该工具 仅实现了基本的 RFC 5389 STUN 测试,并未对 RFC 5780 做显示支持。
3、用来测个nat1,还是靠谱,其他的差一点的nat类型基本都不靠谱。
# debian系列如何安装 pystun3
yum install python3-pip # centos 7 及以上系统
apt install python3-pip # debian系列(含ubuntu)
pip3 install pystun3
# 用法示例
pystun3
pystun -i 192.168.31.241 -H stun.voipbuster.com -P 3478 -d # -d 表示debug模式,可以不指定
## 检测过程展示一、(家里)
root@armbian:~# pystun3 -P 3478 -d -H stun.miwifi.com
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.3', 3478)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '27.9.25.201', 'ExternalPort': 8590, 'SourceIP': '111.206.174.3', 'SourcePort': 3478, 'ChangedIP': '111.206.174.2', 'ChangedPort': 3479}
DEBUG:pystun3:Do Test2
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:Result: {'Resp': False, 'ExternalIP': None, 'ExternalPort': None, 'SourceIP': None, 'SourcePort': None, 'ChangedIP': None, 'ChangedPort': None}
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('111.206.174.2', 3479)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3479)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '27.9.25.201', 'ExternalPort': 59036, 'SourceIP': '111.206.174.2', 'SourcePort': 3479, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3478}
NAT Type: Symmetric NAT
External IP: 27.9.25.201
External Port: 59036
## 检测过程展示二、(海外vps-主机内可以看到公网ip)
root@la-vps:~# pystun3 -P 3478 -d -H stun.miwifi.com
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3478)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '148.135.124.196', 'ExternalPort': 54320, 'SourceIP': '111.206.174.2', 'SourcePort': 3478, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3479}
DEBUG:pystun3:Do Test2
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.3', 3479)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '148.135.124.196', 'ExternalPort': 54320, 'SourceIP': '111.206.174.3', 'SourcePort': 3479, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3479}
NAT Type: Full Cone
External IP: 148.135.124.196
External Port: 54320
## 检测过程展示三、(1v1 nat 云主机)
[root@vn-prometheus ~]# pystun3 -P 3478 -d -H stun.miwifi.com
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3478)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '156.232.99.41', 'ExternalPort': 54320, 'SourceIP': '111.206.174.2', 'SourcePort': 3478, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3479}
DEBUG:pystun3:Do Test2
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3479)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '156.232.99.41', 'ExternalPort': 54320, 'SourceIP': '111.206.174.2', 'SourcePort': 3479, 'ChangedIP': '111.206.174.2', 'ChangedPort': 3479}
NAT Type: Full Cone
External IP: 156.232.99.41
External Port: 54320
## 检测过程展示四、(可以看到三层test)
[root@vn-prometheus ~]# pystun3 -P 3478 -d -H stun.miwifi.com
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:recvfrom: ('111.206.174.3', 3478)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '156.232.99.41', 'ExternalPort': 54320, 'SourceIP': '111.206.174.3', 'SourcePort': 3478, 'ChangedIP': '111.206.174.2', 'ChangedPort': 3479}
DEBUG:pystun3:Do Test2
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:sendto: ('stun.miwifi.com', 3478)
DEBUG:pystun3:Result: {'Resp': False, 'ExternalIP': None, 'ExternalPort': None, 'SourceIP': None, 'SourcePort': None, 'ChangedIP': None, 'ChangedPort': None}
DEBUG:pystun3:Do Test1
DEBUG:pystun3:sendto: ('111.206.174.2', 3479)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3479)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '156.232.99.41', 'ExternalPort': 54320, 'SourceIP': '111.206.174.2', 'SourcePort': 3479, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3478}
DEBUG:pystun3:Do Test3
DEBUG:pystun3:sendto: ('111.206.174.2', 3479)
DEBUG:pystun3:recvfrom: ('111.206.174.2', 3478)
DEBUG:pystun3:Result: {'Resp': True, 'ExternalIP': '156.232.99.41', 'ExternalPort': 54320, 'SourceIP': '111.206.174.2', 'SourcePort': 3478, 'ChangedIP': '111.206.174.3', 'ChangedPort': 3478}
NAT Type: Restric NAT
External IP: 156.232.99.41
External Port: 54320
windows下nat类型测试工具 NatTypeTester(支持RFC5780-推荐)
## 项目地址
https://github.com/HMBSbige/NatTypeTester
五种nat类型介绍(Tips:说到nat,必然是ipv4的专属,因为ipv6不需要)
如何理解什么是锥形?
# nat0(纯公网IP)
# nat1(全锥形NAT:Full Cone NAT)
# 要点:a client 在 nat墙上打了一个洞,nat墙外除a client以外的其他client 均可以通过 该洞 访问内部server(因其开放性,安全隐患大)
# nat2(ip受限锥型NAT:Address Restricted Cone NAT)
# 要点:a client 在 nat墙上打了一个洞,nat墙外除a client这个设备的ipv4能访问该洞外,其他client 若是出口ip不是 a client的这个ip 则无法访问。
# nat3(端口受限锥型NAT:Port Restricted Cone NAT)
# 要点:在nat2类型的ip 限制上,增加了 端口限制,即 a client 使用 a端口在nat墙上打了一个洞,则仅运行a client的 a端口对服务器内部进行访问,其他的都不行。
# nat4(对称型NAT:Symmetric NAT)
# 要点:啥都不行
# nat类型和dmz、以及upnp的关系
stun 和 turn 分别是什么,如何工作的(stun 工作原理)
# stun 是一种 nat类型探测技术(本身不是隧道打洞技术)
# turn 是一种隧道中转技术()
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论