# MeshRay 项目复盘 > 搁置日期:2026-05-27 > 项目版本:v2.0.2 > 后端完成度:~90% | 前端完成度:~50% --- ## 一、项目定位 MeshRay 是一个基于 WireGuard 的 Web 管理组网系统,目标是让非技术用户也能轻松搭建和管理 mesh VPN 网络。 **核心卖点**:9 层自适应传输策略,能在各种极端网络环境(校园网、企业防火墙、运营商 QoS、CGNAT)下保持连通性。 **目标场景**: - 家庭组网(远程 NAS、私有云、IoT) - 企业分支互联、远程办公 - 开发测试(本地环境暴露、多设备联调) --- ## 二、技术架构 ### 整体设计 ``` ┌─────────────────────────────────────────────┐ │ Web UI (Vue 3) │ │ go:embed 单文件嵌入 │ ├─────────────────────────────────────────────┤ │ Gin HTTP API (~40 endpoints) │ ├──────────┬──────────┬───────────────────────┤ │ Service │ Ctr │ Scheduler / DDNS │ │ 业务逻辑 │ 控制中心 │ 后台任务 │ ├──────────┴──────────┴───────────────────────┤ │ Core Engine │ │ ┌─────────────────────────────────────┐ │ │ │ StrategyScheduler (9 层策略调度) │ │ │ │ ┌──────────────────────────────┐ │ │ │ │ │ FallbackController (降级控制) │ │ │ │ │ │ 滑动窗口 + 恢复探测 │ │ │ │ │ └──────────────────────────────┘ │ │ │ │ ConnManager / Relay │ │ │ └─────────────────────────────────────┘ │ ├─────────────────────────────────────────────┤ │ WireGuard Plugin (用户态 wireguard-go) │ ├─────────────────────────────────────────────┤ │ SQLite + GORM │ └─────────────────────────────────────────────┘ ``` ### 关键技术选型 | 决策 | 选择 | 理由 | |------|------|------| | 语言 | Go | 单二进制部署,交叉编译,wireguard-go 生态 | | Web 框架 | Gin | 轻量、成熟、中间件丰富 | | 数据库 | SQLite | 单机部署场景,零依赖,GORM 纯 Go 驱动 | | 前端方案 | Vue 3 CDN + go:embed | 无需 Node 构建链,单文件嵌入二进制 | | 传输层 | Pion (WebRTC/TURN) + QUIC + WebSocket | 覆盖所有网络场景的协议栈 | --- ## 三、核心设计:9 层传输策略 这是 MeshRay 最有技术价值的部分,也是与其他 WireGuard 管理工具的最大差异。 ### 层级设计 | 层级 | 传输方式 | 适用场景 | 性能 | |------|---------|---------|------| | 1 | Direct-UDP | 公网/锥型 NAT,标准 WireGuard | 最优 | | 2 | Direct-FakeTCP | UDP 被 QoS 限速(校园网、酒店 WiFi) | 优 | | 3 | Direct-RealTCP | 完全禁用 UDP,仅允许 TCP 出站 | 良 | | 4 | TURN-UDP | 无 P2P 直连,但 UDP 可通 | 中 | | 5 | TURN-QUIC | UDP 弱网(4G/5G 高丢包),私有扩展 | 中 | | 6 | TURN-TCP | UDP 封禁,仅放行 TCP | 中 | | 7 | TURN-TLS | 企业防火墙 DPI,仅放行 HTTPS | 中低 | | 8 | WebRTC | 最严格隔离内网、代理环境 | 低 | | 9 | WS/WSS | 仅放行 80/443 端口,终极兜底 | 最低 | ### 降级与恢复机制 ``` 正常运行 → 检测到丢包(滑动窗口 10s, 阈值 10%) → 自动降级到下一层 → 每 30s 探测更高层级 → 探测成功则自动恢复 ``` **关键参数**: - 滑动窗口:10 秒 - 丢包阈值:10%(或单次超时 500ms) - 恢复探测间隔:30 秒 **设计要点**: - 每个 Peer 独立的 FallbackController,互不干扰 - MonitoredConn 包装器透明拦截 Read/Write,自动采集延迟数据 - 降级回调异步触发重连,不阻塞数据通道 ### 为什么是 9 层而不是更少 实际开发中发现,国内网络环境的多样性远超预期: - 校园网/酒店 WiFi:UDP 不封但 QoS 限速到不可用 → 需要 FakeTCP - 企业防火墙:深度包检测,只有 TLS 能过 → 需要 TURN-TLS - 运营商封锁:UDP 全封,TCP 放行 → 需要 RealTCP/TURN-TCP - 极端隔离:只有 HTTP 代理能出 → 需要 WebSocket 兜底 每一层都是为了解决一个真实存在的网络环境问题。 --- ## 四、已完成功能 ### 后端(~90%) - [x] 9 层传输策略完整实现(`core/connect/`) - [x] WireGuard 用户态管理(`core/plugins/wg/`) - [x] Ctr 控制中心:WG + Core Engine 编排(`internal/ctr/`) - [x] REST API ~40 个端点(网络、设备、策略、DDNS、设置、Dashboard、通知、备份、更新) - [x] MeshSeed 凭证系统(Ed25519 签名,次数/过期限制) - [x] DDNS 自动更新(Cloudflare + 腾讯云 DNSPod) - [x] JWT 认证 + bcrypt 密码 - [x] WebSocket 通知 + SQLite 持久化 - [x] 备份恢复(创建/列表/恢复/删除/下载) - [x] 系统托盘(Windows getlantern/systray) - [x] Windows 服务支持(kardianos/service) - [x] Docker 部署(docker-compose.yml) - [x] 版本更新检测(GitHub Releases API) ### 前端(~50%) - [x] 登录页 - [x] 仪表盘(基础统计) - [x] 组网管理(CRUD + MeshSeed 生成) - [ ] 设备管理页面 - [ ] 服务管理页面 - [ ] 系统设置页面 ### 工程化 - [x] 单二进制部署(go:embed 嵌入前端) - [x] 跨平台编译(Windows GUI 模式 + Linux 服务) - [x] Viper 配置管理(YAML) - [x] Zap 日志 + Lumberjack 轮转 - [x] Cobra CLI(主程序 + 密码重置 + 数据库检查) --- ## 五、未完成 / 已知问题 1. **前端三个页面未实现**:设备管理、服务管理、系统设置 2. **阿里云 DNS Provider**:开发期间网络不通,未集成 libdns/aliyun 3. **备份逻辑为占位**:真正的数据库导出 + 文件打包未实现 4. **WebSocket 中间件缺失**:当前为 30s 轮询,非真正实时推送 5. **UpdateCoreConfig 未实现**:返回 error stub 6. **无测试覆盖**:整个项目没有单元测试 --- ## 六、搁置原因 ### 市场判断 | 用户群体 | 竞品 | MeshRay 竞争力 | |---------|------|---------------| | 个人用户 | Tailscale(免费层)、WireGuard 原生 | 体验差距大,Tailscale 零配置 | | 企业用户 | Tailscale/ZeroTier 企业版、大厂 SD-WAN | 缺少 SLA、售后、合规 | | 技术爱好者 | Headscale、Netmaker、自建 WireGuard | 有一定差异化但用户基数小 | ### 核心矛盾 - **技术有亮点,但商业模式不成立**:9 层传输策略在国内网络环境下确实有价值,但愿意为此付费的用户极少 - **个人用户场景简单**:Tailscale 免费层已经够用 - **企业市场门槛高**:需要 SLA、合规、售后团队,不是独立开发者能做的 - **维护成本持续**:VPN 项目需要跟进安全更新、协议演进 ### 结论 技术方向正确(国内网络穿透是真实痛点),但市场不买单。搁置是最理性的决定。 --- ## 七、技术收获 ### 值得保留的设计经验 1. **多层级降级策略模式**:滑动窗口检测 + 自动降级 + 定时恢复探测,这个模式适用于任何需要容错的连接场景 2. **MonitoredConn 透明包装**:用装饰器模式拦截 I/O 操作采集指标,对上层完全透明 3. **go:embed 前端嵌入**:单二进制分发的最简方案,省去了构建链和静态文件服务 4. **MeshSeed 凭证设计**:Ed25519 签名 + 次数/过期限制,比简单的 token 更安全 5. **Ctr 控制中心模式**:将 WireGuard 和传输引擎解耦,通过 localhost 重定向实现协议透明切换 ### 可复用的代码模块 - `pkg/meshseed/` — Ed25519 签名凭证,可独立使用 - `core/connect/strategy.go` — 9 层策略调度器,可移植到其他网络项目 - `core/connect/` 下各传输层实现 — FakeTCP、TURN-QUIC 等小众传输方式的参考实现 ### 踩过的坑 1. **wireguard-go 用户态性能**:相比内核态 WireGuard,用户态实现在高吞吐场景下有明显性能差距 2. **Pion TURN 服务端配置**:TURN 服务端的认证和分配策略比文档描述的复杂得多 3. **FakeTCP 的局限性**:部分防火墙会校验 TCP 头部完整性,简单的 UDP 封装 TCP 头会被识别 4. **CDN 方案的前端限制**:纯 CDN 加载 Vue 3 + Element Plus,在离线或弱网环境下无法使用 5. **go:embed 的构建顺序**:前端必须先构建再编译 Go,否则嵌入的是旧文件 --- ## 八、如果重来会怎么做 1. **先做最小可用产品**:只做 Direct-UDP + TURN-TLS 两层,验证需求后再扩展 2. **前端用更轻的方案**:纯 HTML + htmx 或 Preact,减少 CDN 依赖 3. **从第一天写测试**:90% 后端代码无测试,重构信心不足 4. **先找 10 个种子用户**:在写代码之前验证需求,而不是写完再问"有没有人需要" 5. **考虑作为开源工具而非商业产品**:如果定位是开源社区工具,竞争压力小很多 --- ## 九、项目资产清单 | 资产 | 路径 | 说明 | |------|------|------| | 后端源码 | `cmd/`, `internal/`, `core/`, `pkg/` | Go 1.26,可编译 | | 前端源码 | `web/static/` | Vue 3 SPA,CDN 方式 | | 项目报告 | `PROJECT_REPORT.md` | 完整的功能分析 | | 开发总览 | `README_开发完成总览.md` | 开发过程记录 | | 部署配置 | `deploy/docker/`, `configs/` | Docker + YAML 配置 | | 快速入门 | `QUICKSTART.md` | 部署指南 | --- *项目已搁置。代码保留在 GitHub 作为技术积累和作品展示。*