检测 NAT 类型并评估 P2P 直连条件
使用 STUN 查看当前网络的 NAT 类型和公网 UDP 映射地址
NPC 可以通过 STUN 检测当前网络的 NAT 类型。这项结果适合在配置 P2P 连接前做初步判断,不代表两端一定能建立直连。
开始检测
在将要运行 NPC 的设备和网络中执行:
NPC 默认访问 stun.stunprotocol.org:3478。需要使用自建或其他 STUN 服务时,传入完整的主机名和端口:
需要寻找候选地址时,可查看 always-online-stun 的 STUN 主机清单
,选择一个 主机名:端口 传给 -stun_addr。该清单由第三方维护,文件记录的是 TCP 在线检测结果;NPC 的 NAT 检测需要 UDP,因此仍必须在 NPC 所在网络实际运行命令确认可用。公共服务的可用性和使用政策可能变化,不要将某一条地址视为固定依赖。
成功后会输出 NAT 类型和 STUN 观察到的公网映射地址,例如:
public address 是本次 UDP 检测得到的映射,不是可以长期固定使用的服务地址。路由器重启、运营商网络切换或映射超时后,地址和端口都可能变化。
理解结果
| 结果 | 对 NPS P2P 的含义 |
|---|---|
| Open Internet、Full Cone、Restricted 或 Port Restricted | 通常比 Symmetric NAT 更有利,但仍受防火墙、多层 NAT、运营商网络和 UDP 质量影响 |
| Symmetric NAT | 对不同目标使用不同映射,穿透难度较高;两端都是 Symmetric NAT 时不应依赖 P2P 直连 |
| Blocked 或检测超时 | NPC 未完成 STUN 交互,常见原因是 DNS 解析失败、UDP 被拦截或 STUN 服务不可用 |
访问端和目标端应分别检测,并在实际网络中试连。检测成功只说明当前设备能通过 UDP 访问所选 STUN 服务;企业防火墙仍可能拦截 P2P 使用的其他 UDP 地址或端口。
检测失败时
- 确认设备可解析 STUN 主机名,并能向其端口发送 UDP。
- 更换可达的 STUN 服务后再次检测,不要根据单次超时判定 NAT 类型。
- 在公司网络、家庭宽带和移动热点之间切换时重新检测,结果不能沿用。
- 无法稳定直连时,改用由 NPS 中转的 TCP 隧道或私密代理。
公共 STUN 服务会看到检测设备的公网 IP。对外部服务有限制的环境,应使用组织自己管理的 STUN 服务。