rose_cat707 9a5de83fee
CI / docker (push) Successful in 1m36s
feat: Wormhole 内网穿透与反向代理网关
Go + Vue 管理台:Agent 隧道、域名反代、IP 安全、访客验证与监控大盘。
Gitea Actions CI 多架构镜像;纯 Go SQLite、无 CGO Docker 构建。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 17:44:54 +08:00

Wormhole

内网穿透 + 反向代理网关,带 Web 管理台。控制面自研(Go + SQLite),数据面支持 HTTP/HTTPS 域名反代、TCP/UDP 隧道与 Agent 长连接。

服务端与 Agent 为同一应用,配置均在 Web 管理台完成,无需手写配置文件。管理台支持简体中文、英文两种界面语言,可在顶栏随时切换。

界面预览

以下为 Web 管理台主要页面(点击可查看原图)。

登录 监控大盘
登录页 监控大盘
默认密码 admin,首次登录后请修改 流量统计、请求 IP 与资源概览
客户端 隧道
客户端 隧道
Agent 注册、在线状态与 verify_key TCP/UDP 端口映射、启停与导入导出
域名反代 访客验证
域名反代 访客验证
HTTP/HTTPS Host 路由、TLS 与请求头 Basic / 表单 / 回调,资源级访问控制
IP 规则 请求 IP
IP 规则 ![请求 IP](docs/image/安全-请求 IP.png)
精确 / CIDR / 正则白黑名单 访客 IP 监控、一键拉黑
访客用户 系统设置
访客用户 系统设置
受保护资源的访客账号管理 端口、认证、JWT、导入导出

功能概览

模块 说明
客户端 Agent 注册、在线状态、verify_key 管理
隧道 TCP/UDP 端口映射,支持访客登录与导入导出
域名反代 HTTP/HTTPS Host 路由、TLS 证书、代理请求头
访客验证 Basic / 表单 / 回调认证,按资源授权访客
IP 安全 精确 / CIDR / 正则白黑名单,请求 IP 监控与一键拉黑
监控大盘 流量统计、Top 请求 IP、资源与隧道概览
系统设置 监听端口、JWT、登录限流、数据导入导出
OpenAPI 仪表盘可打开 /api/openapi.json

架构

公网用户 → HTTP/HTTPS 反代 (8081/8443) ──→ 后端服务 / Agent 隧道
                    ↑
            Agent Bridge (8528) ←── 内网 Agentsmux 长连接)
                    ↑
         Wormhole 控制面 (REST API + Vue UI :8529)
                    ↓
            SQLite + 内存缓存

快速开始(开发)

依赖

  • Go 1.24+(见 go.mod
  • Node.js 20+(仅开发/构建前端)

依赖镜像(已写入 go.envweb/.npmrc,国内网络友好):

  • GoGOPROXY=https://goproxy.cn,direct
  • npmregistry=https://registry.npmmirror.com

海外用户可将 GOPROXY 改为 https://proxy.golang.org,directnpm 使用默认 registry 即可。

启动

make install   # 安装前端依赖

# 终端 1:后端
make run

# 终端 2:前端(Vite 代理 /api → :8529
make dev-web

访问 http://localhost:5173 ,默认密码 admin首次登录后请立即修改)。

go test ./...  # 运行单元测试
make build     # 构建 bin/wormhole

Agent

在管理台「客户端」页面获取 verify_key,于内网机器启动 Agent

./bin/wormhole agent -server <服务端IP>:8528 -key <verify_key>

部署

镜像由 Gitea Actions 自动构建并发布到 Container Registry无需自行编译。直接拉取运行即可。

docker pull git.rc707blog.top/rose_cat707/wormhole:latest
Tag 说明
latest main / master 分支最新构建
sha-xxxxxxx 对应 commit 短 SHA
v1.2.3 推送 Git tag v1.2.3 时发布

docker run

docker pull git.rc707blog.top/rose_cat707/wormhole:latest

# 服务端
docker run -d --name wormhole \
  --restart unless-stopped \
  -p 8529:8529 -p 8528:8528 -p 8081:8081 -p 8443:8443 \
  -v wormhole-data:/app/data \
  git.rc707blog.top/rose_cat707/wormhole:latest

# Agent(同一镜像;与 Server 分开部署)
docker run -d --name wormhole-agent \
  --restart=unless-stopped \
  --network host \
  git.rc707blog.top/rose_cat707/wormhole:latest \
  agent -server <服务端IP>:8528 -key <verify_key>

注意Agent 容器必须与 Server 分开部署。更新 Server 镜像时勿在同一 compose 中重建 AgentAgent 需 --restart=unless-stopped,否则收到 SIGTERM 后容器会保持 Exited 状态。

本地自行构建

docker build \
  --build-arg IMAGE_PREFIX=docker.1panel.live/library/ \
  --build-arg GOPROXY=https://goproxy.cn,direct \
  -t wormhole:local .

端口(默认)

服务 端口 说明
管理 API / Web UI 8529 浏览器访问管理台
Agent Bridge 8528 内网 Agent 长连接
HTTP 域名反代 8081 公网 HTTP 入口
HTTPS 域名反代 8443 公网 HTTPS 入口(需配置 TLS 证书)

端口可在管理台「系统设置」中修改;监听地址变更需重启服务

若通过域名 + HTTPS 访问管理台,可在前面加 Nginx/Caddy 反代到 8529勿将 Agent Bridge 8528 无防护暴露公网;建议 VPN、IP 白名单或防火墙限制。

数据目录

数据默认存储在 ./data/wormhole.dbSQLite),Docker 部署时挂载为 /app/data

data/
└── wormhole.db    # 客户端、隧道、域名、规则、用户、设置

可在「系统设置」中导入/导出配置,便于迁移与备份。

使用攻略(简要)

1. 首次登录

  1. 打开 http://<主机>:8529
  2. 默认账号 admin / admin,登录后进入「系统设置」修改密码
  3. 顶栏切换界面语言(中文 / English)

2. 接入 Agent

  1. 「客户端」→ 查看或复制 verify_key
  2. 在内网机器运行 wormhole agent -server <IP>:8528 -key <verify_key>
  3. 客户端上线后即可创建隧道或域名

3. 配置隧道

  1. 「隧道」→「新建」,选择客户端、协议(TCP/UDP)与本地目标地址
  2. 保存并启动;公网通过 <服务器IP>:<映射端口> 访问
  3. 可选开启「访客登录」,适用于需认证的 Web 服务

4. 配置域名反代

  1. 「域名」→「新建」,填写 Host、上游地址与 TLS(可选)
  2. DNS 将域名解析到服务器公网 IP
  3. 按需配置代理请求头(X-Forwarded-For 等)与访客验证

5. IP 安全

  1. 「IP 规则」添加白名单 / 黑名单(支持 CIDR、正则)
  2. 「请求 IP」查看访客来源,可疑 IP 可一键拉黑
  3. 规则可按全局或指定资源(隧道/域名)生效

6. API 与自动化

  • OpenAPI 规范:http://<主机>:8529/api/openapi.json
  • 登录获取 TokenPOST /api/auth/login
  • 管理端 API 前缀:/api,请求头 Authorization: Bearer <token>

7. 日常运维

操作 位置
查看流量与请求 监控大盘
管理 Agent 客户端
启停隧道 / 域名 隧道、域名
导出配置备份 系统设置
修改端口 系统设置(需重启)

命令行

命令 说明
wormhole server 启动服务端(默认 -data ./data
wormhole agent -server <地址> -key <verify_key> 启动 Agent

项目结构

cmd/wormhole/        # 进程入口(server / agent
internal/
  api/               # HTTP 层与 OpenAPI
  bridge/            # Agent 长连接与 Bridge
  proxy/             # HTTP/TCP/UDP 反代与隧道
  auth/              # JWT、访客认证、IP 转发
  store/             # SQLite 与仓储
  config/            # 配置模型与默认值
  server/            # 服务编排
web/                 # Vue 3 管理台
  src/i18n/          # 多语言资源
  src/views/         # 页面
docs/
  image/             # README 界面截图
  UI-DESIGN-SYSTEM.md
.gitea/workflows/    # Gitea Actions CI

CI / 镜像发布

推送 main / master 或 tag v* 时,Gitea Actions 构建多架构镜像并推送到 Registry。工作流与 Dockerfile 约定见 .gitea/README.mdact_runner 部署参考见 .gitea/act-runner/

许可

Wormhole 采用 MIT License

S
Description
内网穿透 + 反向代理网关,带 Web 管理台。
Readme MIT 11 MiB
v1.0.0 Latest
2026-06-23 13:43:32 +00:00
Languages
Go 58.7%
Vue 26.2%
JavaScript 10.2%
CSS 3.9%
Dockerfile 0.7%
Other 0.3%