概述

淘淘内网穿透是一款轻量级的 NAT 穿透工具,基于 Node.js + WebSocket 构建。它可以将你局域网内的服务(如 Web 服务器、远程桌面、数据库等)安全地暴露到公网。

系统架构

组件技术说明
服务端Node.js部署在公网服务器,负责隧道转发
客户端Electron桌面应用,配置映射并建立隧道
管理后台HTMLWeb 界面,管理用户、配置、日志
通信协议WebSocket支持 ws:// 和 wss:// 加密

项目结构

gw-vpn-logo/ ├── server/ │   ├── index.js          # 服务端主程序 │   ├── admin.html        # Web 管理后台 │   ├── config.json       # 服务配置文件(自动生成) │   ├── users.json        # 用户数据(自动生成) │   └── logs/             # 日志目录 ├── client/ │   ├── main.js           # Electron 主进程 │   ├── renderer.js       # 界面逻辑 │   ├── index.html        # 客户端界面 │   ├── style.css         # 样式文件 │   └── tunnel-client-optimized-v2.js  # 隧道核心 └── web/                  # 官网和文档

服务端部署

环境要求

  • 公网服务器一台(Linux / Windows)
  • Node.js 16+ 运行环境
  • 防火墙需开放对应端口(WebSocket 端口 + 映射端口)

安装步骤

1. 上传代码到服务器

# 将 server 文件夹上传到服务器 scp -r server/ root@your-server:/opt/taotao-tunnel/

2. 安装依赖

cd /opt/taotao-tunnel/server npm install

3. 修改配置

编辑 server/index.js 顶部的 CONFIG 部分:

const CONFIG = {   WS_PORT: 8986,         // WebSocket 端口   ADMIN_PORT: 8987,      // 管理后台端口   TOKEN: 'your-token',    // Token 认证密钥   ADMIN_TOKEN: 'admin',  // 管理后台密钥   SSL_ENABLED: false,    // 是否启用 SSL   SSL_CERT_PATH: '',     // SSL 证书路径   SSL_KEY_PATH: '',      // SSL 密钥路径 };

4. 启动服务

# 直接启动 node index.js  # 使用 PM2 后台运行(推荐) pm2 start index.js --name taotao-tunnel pm2 save
首次启动会自动创建默认用户 admin / admin,请登录管理后台及时修改密码。

防火墙配置

# 开放 WebSocket 端口 ufw allow 8986  # 开放管理后台端口 ufw allow 8987  # 开放映射端口范围 ufw allow 10000:60000/tcp ufw allow 10000:60000/udp

端口说明

端口用途协议
8986WebSocket 隧道通信TCP (ws/wss)
8987管理后台 Web 界面HTTP
10000-60000自动分配的公网映射端口TCP/UDP

客户端使用

安装客户端

客户端基于 Electron 构建,支持 Windows 系统。

开发模式运行

cd client
npm install
npm start

打包为安装程序

npm run build

当前版本界面能力

  • 多服务器配置 — 支持保存多条服务器线路,切换时自动回填地址、端口、SSL 和认证方式。
  • 映射列表单行展示 — 每条映射独占一行,方便扫描协议、本地端口、公网端口和域名。
  • 本地设置增强 — 支持打开本地配置目录、查看当前绑定地址,并一键补齐远程桌面环境。
  • 启动辅助 — 支持开机自启、自动连接,以及「修复开机自启」按钮。
  • 连接兼容引擎 — 遇到 SSL / SNI 兼容性问题时,客户端会自动切换更稳的连接方式。

界面概览

服务器配置页面 — 除了基础连接信息,现在还可以折叠管理多套服务器配置。

服务器配置(当前版本示意)
服务器配置

端口映射页面 — 一条映射一行展示,支持 TCP / UDP、本地端口、公网端口和域名绑定。

端口映射配置(当前版本示意)
端口映射

本地设置页面 — 新增打开本地配置目录和一键远程桌面设置。

本地设置(当前版本示意)
本地设置

运行日志 — 会记录连接、兼容回退、隧道建立和错误提示,便于定位问题。

运行日志(当前版本示意)
运行日志

连接服务器

  1. 打开客户端,进入「服务器配置」页面。
  2. 填写服务器地址和端口,必要时勾选 SSL/TLS
  3. 选择登录方式:账号密码Token 令牌
  4. 配置端口映射(本地端口 → 公网端口),公网端口可留空或填 0 交给服务端自动分配。
  5. 点击「连接服务器」。
  6. 看到日志中的「隧道已建立」即表示连接成功。
当前客户端会在必要时自动处理兼容回退,例如 SSL / SNI 差异,尽量减少手工调整。

SSL 加密

启用 SSL 后,客户端与服务端之间的通信将通过 wss:// 加密传输,防止数据被窃听。

服务端配置

  1. 准备 SSL 证书文件(fullchain.pemprivkey.key)。
  2. server/config.json 中配置:
{
  "SSL_ENABLED": true,
  "SSL_CERT_PATH": "/path/to/fullchain.pem",
  "SSL_KEY_PATH": "/path/to/privkey.key"
}
  1. 重启服务端。

客户端配置

在客户端「安全设置」中勾选 启用 SSL/TLS 加密 即可。

启用 SSL 后,服务器地址必须使用域名,并与证书中的域名保持一致。
如果某些服务器的 SSL 实现兼容性较弱,客户端会自动尝试更稳的兼容连接方式,并在日志中提示。

账号管理

服务端支持多用户账号密码登录,密码使用 PBKDF2 + Salt 安全存储。

认证模式

模式说明
both账号密码和 Token 都可以登录(默认,推荐)
user仅允许账号密码登录,拒绝 Token
token仅允许 Token 登录,兼容旧版客户端

管理用户

在管理后台的「用户管理」Tab 中:

  • 添加用户 — 设置用户名、密码、最大映射数
  • 编辑用户 — 修改密码、映射限制、备注
  • 禁用/启用 — 临时禁止某用户登录
  • 删除用户 — 永久删除用户

默认账号

首次启动默认创建用户 admin,密码 admin。请务必在管理后台修改密码!

端口映射

端口映射是内网穿透的核心功能,将你本地的端口映射到服务器的公网端口。

添加映射

在客户端「端口映射配置」页面点击「添加映射」,每条映射会以单行形式显示,便于快速检查。

字段说明示例
协议TCP 或 UDPTCP
本地端口你要暴露的本地服务端口3389(远程桌面)
公网端口映射到服务器的端口,可留空 / 填 0 自动分配05200
域名可选,绑定的域名mstsc.example.com

常见映射场景

场景本地端口协议
远程桌面 (RDP)3389TCP
Web 服务80 / 443 / 3000TCP
SSH22TCP
数据库 (MySQL)3306TCP
Minecraft 服务器25565TCP
游戏 (UDP)自定义UDP
远程桌面用户可以先在「本地设置」中执行「一键远程桌面设置」,然后再添加 TCP -> 3389 映射。

域名绑定

为每个端口映射绑定自定义域名,方便记忆和管理。

  1. 在 DNS 中将域名解析到你的服务器 IP
  2. 在客户端映射配置中填写域名字段
  3. 连接后即可通过域名访问

管理后台

服务端内置了一个功能完善的 Web 管理后台。

访问方式

http://你的服务器IP:8987

使用管理 Token 登录,默认以 server/config.json 中的 ADMIN_TOKEN 配置为准。

功能模块

模块功能
仪表盘在线客户端、运行时间、流量统计、活跃端口、SSL 状态
客户端管理查看已连接客户端,断开指定客户端
用户管理创建 / 编辑 / 删除用户,设置权限
流量统计服务器总流量、各客户端流量明细
域名绑定查看所有域名绑定关系
配置设置运行时修改 Token、端口范围、SSL、认证模式等
服务器日志实时日志查看和导出

常见问题

连接报错 “Hostname does not match certificate's altnames”

SSL 证书的域名与你输入的服务器地址不匹配。请确保:

  • 服务器地址填写的域名与 SSL 证书完全一致。
  • 检查是否有拼写错误。

某些服务器能连,某些服务器需要兼容模式

这是 SSL / SNI 实现差异造成的常见现象。当前客户端会自动尝试兼容回退,并记住该服务器的可用连接方式。

远程桌面连接卡在“正在配置远程会话”

  • 本地绑定 IP — 建议使用 127.0.0.1
  • 先执行一键远程桌面设置 — 让系统远程桌面、防火墙和服务一次补齐。
  • 确认已添加 TCP -> 3389 映射

连接成功但无法访问

  • 检查服务器防火墙是否开放了对应的公网映射端口。
  • 检查本地服务是否正在运行并监听对应端口。
  • 确认本地防火墙没有阻止入站连接。

如何实现开机自启?

服务端: 使用 PM2 并执行 pm2 startup + pm2 save

客户端: 在设置中勾选「开机自动启动」和「启动后自动连接」,必要时点击「修复开机自启」。

更新日志

v2.0 最新版

  • 客户端界面升级,新增更紧凑的多服务器管理和单行映射列表。
  • 新增智能兼容连接引擎,自动处理部分 SSL / SNI 兼容问题。
  • 新增一键远程桌面设置,自动补齐系统项与防火墙规则。
  • 新增打开本地配置目录、修复开机自启等辅助能力。
  • 日志提示全面汉化,连接过程更容易判断。
  • 服务端长期运行稳定性增强,补充心跳清理、UDP 空闲回收和优雅退出。

v1.0

  • 基础 TCP / UDP 端口映射。
  • Token 认证。
  • Electron 客户端。