无公网IP、零成本实现满速内网穿透STUN+Lucky+WireGuard
cc2486
2025年11月19日 22:30

STUN + Lucky + WireGuard,不依赖 ZeroTier/Tailscale 等第三方中转服务器,利用 STUN 技术实现满速内网穿透

免责声明 本人纯属技术爱好者,非网络专业人士。本教程记录了我个人的一次折腾过程(特别感谢 AI 的辅助)。 风险提示: 本教程涉及修改防火墙、注册表和网络拓扑。所有操作仅供参考,请确保你理解每一步的含义。若因操作不当导致设备被黑、数据丢失或网络故障,本人概不负责。

🎯 目标

没有公网 IP、也不想购买昂贵服务器或折腾软路由的前提下,实现从外网(如手机 5G)满速、低延迟地访问家中的 Windows 电脑。

  • 应用场景: 远程访问本地服务(TeslaMate, HomeAssistant)、存取 SMB 文件、Moonlight 游戏串流。

⚙️ 核心原理

我们的方案不依赖 ZeroTier/Tailscale 等第三方中转服务器(受限于中转带宽),而是利用 STUN 技术 进行 P2P “打洞”。

  • 工具: Lucky (打洞工具) + WireGuard (组网隧道)。

  • 流量路径: 手机 -> Lucky 打通的公网 UDP 端口 -> 家中电脑 Lucky -> 电脑 WireGuard -> 建立隧道 -> 虚拟局域网通信 (10.0.0.x)。

  • 优势: 直连速度仅取决于你家宽带的上行和手机网速。

🛠️ 设备与准备

  • 主路由: 小米 BE 6500 Pro (或其他路由器)

  • 服务器(被控端): Windows 11 电脑 (24小时开机)

  • 客户端(控制端): 手机 (iOS/Android) 或其他外网电脑

  • 软件下载:

    • Lucky (Windows版)

    • WireGuard (Windows版)

    • WireGuard APP (手机端应用商店下载)

🚀 操作步骤

第一步:基础网络环境配置 (路由器与电脑)

STUN 打洞成功的关键在于网络类型必须是 Full Cone NAT (NAT1)

  1. 固定电脑 IP:

    • 进入路由器后台 (如 192.168.31.1) -> 局域网设置 -> DHCP 静态 IP 分配

    • 将电脑 MAC 地址与固定 IP 绑定 (本教程示例:192.168.31.146)。

  1. 开启 DMZ (实现 NAT1):

    • 大部分家用路由(特别是小米)默认防火墙较严,会导致 NAT 类型不佳。

    • 路由器后台 -> 高级设置 -> DMZ -> 开启。

    • DMZ IP 地址填入电脑的静态 IP (192.168.31.146) -> 保存应用。

第二步:配置 WireGuard 服务端 (电脑)

WireGuard 负责创建虚拟局域网 10.0.0.x。

  1. 安装并打开 WireGuard,点击左下角箭头 -> 新建空隧道

  2. 名称填入 wg_server (或其他)。

  3. 重要: 复制屏幕上显示的 [公钥],保存到记事本,稍后给手机用。

  4. 将配置文件修改为以下内容:

[Interface]

# 这是服务器私钥,保留软件自动生成的即可

PrivateKey = <这里保留自动生成的私钥>

# 服务器在虚拟局域网的IP

Address = 10.0.0.1/24

# 监听端口(重要:这里填51821,作为内部转发端口)

ListenPort = 51821

[Peer]

# 这里填手机端的公钥(暂时空着或随便填,等第六步获取手机公钥后再回来改)

PublicKey = <待填入手机公钥>

# 分配给手机的虚拟IP

AllowedIPs = 10.0.0.2/32

  1. 保存,但先不要启动隧道。

第三步:配置 Lucky 打洞工具 (电脑)

Lucky 负责将内网端口映射到公网。

  1. 解压运行 lucky.exe。

  2. 浏览器访问 http://127.0.0.1:16601 进入管理后台。

  3. 菜单选择 “STUN内网穿透” -> “添加穿透规则”

  4. 配置如下:

    • 规则名称: WireGuard穿透

    • 操作模式: 简易模式

    • 穿透类型: IPv4-UDP

    • 穿透通道本地端口: 51820 (这是 Lucky 对外的端口)

    • 防火墙自动放行: ❌ 关闭 (我们要手动设置更高级的规则)

    • 目标地址: 127.0.0.1

    • 目标端口: 51821 (对应 WireGuard 的 ListenPort)

第四步:Windows 防火墙设置 (关键)

我们需要建立两条入站规则,这是打洞能否成功的核心。

打开 “Windows Defender 防火墙” -> “高级设置” -> “入站规则” -> “新建规则”

规则 A:P2P 打洞 (允许边缘遍历)

  • 类型: 端口

  • 协议: UDP

  • 特定本地端口: 51820

  • 操作: 允许连接

  • 配置文件: 域、专用、公用 (全选)

  • 名称: Lucky-P2P (UDP 51820)

  • 设置边缘遍历 (最关键一步):

    • 右键该规则 -> 属性 -> 高级 选项卡。

    • 边缘遍历 下拉菜单选择:允许边缘遍历

规则 B:内部转发

  • 类型: 端口

  • 协议: UDP

  • 特定本地端口: 51821

  • 操作: 允许连接

  • 名称: WireGuard-Internal (UDP 51821)

  • 注:此规则不需要开启边缘遍历。

第五步:开启系统路由转发

让你的 Windows 电脑像路由器一样转发流量。

  1. 管理员身份打开 PowerShell。

  2. 执行命令 1 (开启 IP 路由功能):

  3. Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" -Name "IPEnableRouter" -Value 1

  4. 执行命令 2 (添加 NAT 规则):

  5. New-NetNat -Name "WireGuard-NAT" -InternalIPInterfaceAddressPrefix "10.0.0.0/24"

  6. 必须重启电脑 才能生效!

第六步:配置手机客户端 & 最终联调

电脑重启后操作:

  1. 启动 lucky.exe。

  2. 启动 WireGuard (wg_server 隧道)。

  3. 回到 Lucky 网页后台,查看规则列表,确认已获取到 公网IP:端口 (例如 123.45.67.89:16888)。

手机端操作 (断开 WiFi,使用 4G/5G):

  1. 打开 WireGuard App -> + -> 手动创建

  2. [接口/Interface] 部分:

    • 名称: MyPC

    • 私钥/公钥: 点击生成。👉 复制这里的公钥 发送给电脑。

    • 局域网 IP: 10.0.0.2/32

    • DNS 服务器: 192.168.31.1 (或 223.5.5.5)

  1. [对端/Peer] 部分 (添加节点):

    • 公钥: 填入 第二步 中电脑端 WireGuard 的公钥。

    • 允许的 IP: 0.0.0.0/0 (全流量代理) 或 10.0.0.0/24, 192.168.31.0/24 (仅访问内网)。

    • 对端 (Endpoint): 填入 Lucky 上显示的 公网IP:端口

  1. 保存。

回到电脑端完善配置:

  1. 编辑 wg_server 隧道。

  2. 在 [Peer] 下的 PublicKey 处,填入刚刚手机端生成的公钥。

  3. 保存并重启隧道。

✅ 连接测试

  1. 确保电脑 Lucky 和 WireGuard 均在运行。

  2. 手机开启 WireGuard 开关。

  3. 握手状态: 查看手机 App,如果有数据传输且握手时间在刷新(例如“3秒前”),说明打洞成功!

  4. 业务测试:

    • 📱 手机浏览器访问 192.168.31.1 -> 成功进入路由器后台。

    • 🎮 打开 Moonlight -> 添加主机 10.0.0.1 -> 成功串流。

P.S. 设置SMB 文件共享设置

如果在连接后无法访问电脑的共享文件夹,需要调整防火墙。

  1. 打开 Windows 防火墙 -> 入站规则

  2. 找到 “文件和打印机共享 (SMB-In)”,可能有多个,找到**配置文件为“专用”**的那一条。

  3. 右键 -> 属性 -> 作用域 选项卡。

  4. 远程 IP 地址 区域:

    • 选择 “下列 IP 地址”

    • 点击添加,输入:10.0.0.0/24 (即 WireGuard 的网段)。

  1. 确定保存。

🎉 祝贺你! 现在你拥有了一条完全免费、高速且私密的回家隧道。