stun & turn 打洞原理(nat类型检测原理 + pystun3检测nat类型)

参考资料

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 是一种隧道中转技术()
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1394.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2025/5/29作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录