Skip to content

STUN 内网穿透

STUN(Session Traversal Utilities for NAT)穿透利用 STUN 协议探测本机的公网 IP 和端口,并结合 UPnP 或 NATMAP 技术实现端口映射,从而让外网设备能够直接访问内网服务。

技术原理

STUN / TURN / ICE 协议体系

内网穿透领域有三个核心协议,各有不同用途:

协议全称作用
STUNSession Traversal Utilities for NAT探测公网 IP 和端口,判断 NAT 类型
TURNTraversal Using Relays around NAT通过中继服务器转发流量(兜底方案)
ICEInteractive Connectivity Establishment综合使用 STUN/TURN,自动选择最优连接路径

STUN 探测原理

内网设备                    STUN 服务器(公网)
    │                              │
    │  1. 发送 Binding Request     │
    │ ─────────────────────────→  │
    │                              │
    │  2. 返回 Binding Response    │
    │     包含:公网IP:端口         │
    │ ←─────────────────────────  │
    │                              │
    │  3. 设备获知自己的公网地址    │

STUN 服务器帮助设备发现自己在 NAT 后的公网地址,但不转发数据流量

UPnP 端口映射原理

内网设备                    家用路由器(支持 UPnP)
    │                              │
    │  1. 发送 UPnP 映射请求       │
    │     "请将外网端口 22222      │
    │      映射到我的 22 端口"     │
    │ ─────────────────────────→  │
    │                              │
    │  2. 路由器建立端口映射        │
    │     外网:22222 → 内网:22     │
    │ ←─────────────────────────  │
    │                              │
外网用户 ──→ 路由器公网IP:22222 ──→ 内网设备:22

P2P 打洞流程(适用于 Full Cone / Restricted NAT)

设备 A(内网)          信令服务器          设备 B(内网)
    │                      │                    │
    │  1. 注册公网地址      │                    │
    │ ──────────────────→  │                    │
    │                      │  2. 注册公网地址    │
    │                      │ ←────────────────  │
    │                      │                    │
    │  3. 获取 B 的公网地址 │                    │
    │ ←──────────────────  │                    │
    │                      │  4. 获取 A 的公网地址│
    │                      │ ──────────────────→ │
    │                      │                    │
    │  5. 同时向对方发送 UDP 包(打洞)           │
    │ ─────────────────────────────────────────→ │
    │ ←───────────────────────────────────────── │
    │                      │                    │
    │  6. P2P 直连建立成功!                     │
    │ ←─────────────────────────────────────────→│

Symmetric NAT 无法打洞

如果你的网络是 对称型 NAT(Symmetric NAT),每次连接都会分配不同的外网端口,P2P 打洞将无法成功

判断方法: 使用在线 STUN 检测工具,如果检测结果显示 "Symmetric NAT",建议改用 FRP 客户端EasyTier 进行中转穿透。

常见 Symmetric NAT 场景:

  • 运营商 CGNAT(多层 NAT)
  • 企业级防火墙
  • 4G/5G 移动网络

功能概述

  • 自动探测公网 IP 和映射端口
  • 支持 UPnP 自动端口映射(适用于支持 UPnP 的路由器)
  • 支持 NATMAP 端口保持(适用于全锥形 NAT)
  • IP 或端口变化时可触发回调,自动更新 DDNS 或其他配置
  • 支持有效性检测,验证穿透是否成功

适用场景

场景是否适用说明
家庭宽带 + 支持 UPnP 的路由器✅ 最佳自动映射,无需手动配置
家庭宽带 + Full Cone NAT✅ 适用使用 NATMAP 保持映射
家庭宽带 + Restricted NAT⚠️ 有限仅适合特定场景
运营商 CGNAT / Symmetric NAT❌ 不适用建议改用 FRP/EasyTier
企业网络❌ 通常不适用企业防火墙通常阻止 UPnP

配置说明

进入 STUN 内网穿透 页面,点击 新建 按钮:

基础配置

字段类型必填默认值说明
名称字符串规则名称
启用布尔true是否启用
转发 IP/域名字符串内网服务地址(如 127.0.0.1
转发端口整数内网服务端口
触发回调选择IP/端口变化时触发的回调任务

UPnP 配置

字段类型必填默认值说明
使用 UPnP布尔false是否通过 UPnP 在路由器上自动映射端口
UPnP 外部端口整数随机指定 UPnP 映射的外部端口(0 表示随机)

NATMAP 配置

字段类型必填默认值说明
使用 NATMAP布尔false是否使用 NATMAP 保持端口映射
NATMAP 服务器字符串NATMAP 服务器地址

配置示例

示例:通过 UPnP 穿透访问内网 SSH

将内网 SSH 服务(22 端口)通过 UPnP 映射到公网,并在 IP 变化时触发 DDNS 回调:

字段
名称SSH 穿透
转发 IP/域名127.0.0.1
转发端口22
使用 UPnP
UPnP 外部端口22222
触发回调选择已配置的回调任务

配置完成后,可通过 公网IP:22222 访问内网 SSH。


查看穿透状态

在规则列表中,每条规则会显示:

  • 当前公网 IP:STUN 探测到的公网地址
  • 当前端口:映射的公网端口
  • 最后更新时间:上次成功探测的时间
  • 状态:运行中 / 探测失败 / 已停止

常见问题

Q:STUN 探测失败,无法获取公网 IP?

排查步骤:

  1. 确认网络连接正常,可以访问外网
  2. 检查防火墙是否阻止了 UDP 流量(STUN 使用 UDP 协议)
  3. 尝试更换 STUN 服务器地址
  4. 如果在企业网络中,可能被防火墙拦截,建议改用 FRP

Q:UPnP 映射失败?

排查步骤:

  1. 登录路由器管理界面,确认 UPnP 功能已开启
  2. 部分路由器需要重启才能生效
  3. 检查是否有其他设备占用了相同的外网端口
  4. 某些运营商光猫可能不支持 UPnP,需要在光猫上设置 DMZ 或端口映射

Q:穿透成功但外网无法访问?

排查步骤:

  1. 使用在线端口检测工具验证端口是否开放
  2. 确认内网服务正在运行(telnet 127.0.0.1 <端口>
  3. 检查本机防火墙是否放行了该端口
  4. 如果是动态公网 IP,确认 DDNS 已更新到最新 IP

Q:IP 或端口频繁变化?

解决方法:

  • 配置 触发回调 功能,在 IP/端口变化时自动更新 DDNS
  • 使用 NATMAP 模式保持端口稳定
  • 联系运营商申请固定公网 IP

注意事项

NAT 类型限制

STUN 穿透对 NAT 类型有要求。全锥形 NAT(Full Cone NAT) 效果最好;对称型 NAT(Symmetric NAT) 通常无法穿透,建议改用 FRP 或 EasyTier。

路由器 UPnP 设置

使用 UPnP 功能前,需要在路由器管理界面中开启 UPnP 功能。大多数家用路由器默认开启,企业路由器可能默认关闭。

与回调系统配合

STUN 穿透最常见的用法是配合 回调系统 使用:当公网 IP 或端口发生变化时,自动触发回调更新 DDNS 解析记录或 CDN 回源配置。详见 回调系统

基于 GPL-3.0 许可证发布