239 lines
6.2 KiB
Markdown
239 lines
6.2 KiB
Markdown
# MeshRay 项目完整分析报告
|
||
|
||
> 生成时间:2026-04-01
|
||
> 基于代码实际分析,非文档推测
|
||
|
||
---
|
||
|
||
## 一、项目概述
|
||
|
||
### 项目是什么
|
||
|
||
**MeshRay** 是一个基于 Web 管理的 WireGuard 组网系统(去中心化 VPN)。
|
||
|
||
**核心功能**:
|
||
- 通过浏览器管理 WireGuard 虚拟专网
|
||
- 支持 9 层传输策略(适应各种网络环境)
|
||
- 提供 MeshSeed 邀请凭证(Ed25519 签名)
|
||
- 支持 DDNS 动态域名(Cloudflare、腾讯云)
|
||
- 增强模式:流量通过 Core Engine 智能调度
|
||
|
||
### 技术栈
|
||
|
||
| 组件 | 技术 |
|
||
|------|------|
|
||
| 后端 | Go 1.21+ / Gin / GORM |
|
||
| 数据库 | SQLite(纯 Go 实现)|
|
||
| VPN | WireGuard(用户态 wireguard-go)|
|
||
| 前端 | Vue 3 + Element Plus + Tailwind CSS(CDN 方式)|
|
||
| 实时通信 | WebSocket |
|
||
| 传输协议 | STUN/TURN (pion)、WebRTC (pion)、QUIC |
|
||
|
||
---
|
||
|
||
## 二、项目结构
|
||
|
||
```
|
||
MeshRay/
|
||
├── cmd/meshray/ # 主程序入口
|
||
├── internal/
|
||
│ ├── api/ # HTTP API 层
|
||
│ │ ├── server.go # Gin 服务器
|
||
│ │ ├── handler/ # HTTP Handler
|
||
│ │ │ ├── network.go # 网络 CRUD
|
||
│ │ │ ├── device.go # 设备 CRUD
|
||
│ │ │ ├── dashboard.go # 统计
|
||
│ │ │ ├── ddns.go # DDNS
|
||
│ │ │ ├── policy.go # 策略
|
||
│ │ │ ├── service.go # 服务
|
||
│ │ │ ├── ws.go # WebSocket
|
||
│ │ │ └── ...
|
||
│ │ ├── dto/ # 数据传输对象
|
||
│ │ └── middleware/ # 中间件 (JWT/CORS)
|
||
│ ├── ctr/ # 控制中心(调度 Core + WG)
|
||
│ │ ├── ctr.go # 主调度逻辑
|
||
│ │ └── wg.go # WGManager
|
||
│ ├── service/ # 业务服务层
|
||
│ │ ├── network.go
|
||
│ │ ├── device.go
|
||
│ │ ├── meshseed.go
|
||
│ │ ├── ddns.go
|
||
│ │ └── ...
|
||
│ ├── store/sqlite/ # SQLite 存储
|
||
│ ├── model/ # 数据模型
|
||
│ └── config/ # 配置管理
|
||
├── core/ # 核心引擎
|
||
│ ├── core.go # Core 主入口
|
||
│ ├── engine.go # Engine 实例
|
||
│ └── connect/ # 9 层传输策略
|
||
│ ├── direct.go # Direct-UDP
|
||
│ ├── fake_tcp.go # Direct-FakeTCP
|
||
│ ├── real_tcp.go # Direct-RealTCP
|
||
│ ├── turn.go # TURN 系列
|
||
│ ├── turn_quic.go
|
||
│ ├── ws.go # WS/WSS
|
||
│ ├── stun.go
|
||
│ ├── ice.go
|
||
│ └── strategy.go # 策略调度器
|
||
├── pkg/
|
||
│ └── meshseed/ # MeshSeed 凭证
|
||
└── web/
|
||
├── embed.go # Go embed 打包
|
||
└── static/ # 静态文件
|
||
├── index.html # SPA 入口
|
||
└── js/app.js # Vue3 应用
|
||
```
|
||
|
||
---
|
||
|
||
## 三、核心功能分析
|
||
|
||
### 1. 9 层传输策略
|
||
|
||
| 层级 | 类型 | 用途 |
|
||
|------|------|------|
|
||
| 1 | Direct-UDP | 公网/锥型 NAT首选 |
|
||
| 2 | Direct-FakeTCP | UDP 被 QoS 限速 |
|
||
| 3 | Direct-RealTCP | 仅允许 TCP 出站 |
|
||
| 4 | TURN-UDP | 无 P2P 直连,UDP 可通 |
|
||
| 5 | TURN-QUIC | UDP 弱网 (4G/5G) |
|
||
| 6 | TURN-TCP | UDP 封禁,仅放行 TCP |
|
||
| 7 | TURN-TLS | 企业防火墙 DPI |
|
||
| 8 | WebRTC | 最严格隔离内网 |
|
||
| 9 | WS/WSS | 仅放行 80/443 端口 |
|
||
|
||
### 2. Ctr (Control) 调度中心
|
||
|
||
职责:
|
||
- 网络生命周期管理
|
||
- Peer 管理
|
||
- 模式切换 (native ↔ enhanced)
|
||
- Core Engine 集成
|
||
|
||
### 3. MeshSeed 凭证
|
||
|
||
基于 Ed25519 签名的组网邀请凭证,支持:
|
||
- 使用次数限制
|
||
- 过期时间控制
|
||
- DDNS 同步
|
||
|
||
### 4. DDNS 动态域名
|
||
|
||
已支持:
|
||
- Cloudflare
|
||
- 腾讯云 DNSPod
|
||
|
||
待支持:
|
||
- 阿里云
|
||
|
||
---
|
||
|
||
## 四、完成情况
|
||
|
||
### 后端 ✅ 90%
|
||
|
||
| 功能 | 状态 |
|
||
|------|------|
|
||
| 9 层传输策略 | ✅ 完成 |
|
||
| WireGuard 用户态管理 | ✅ 完成 |
|
||
| Ctr 调度中心 | ✅ 完成 |
|
||
| SwitchMode | ✅ 完成 |
|
||
| MeshSeed 凭证 | ✅ 完成 |
|
||
| DDNS (Cloudflare/腾讯云) | ✅ 完成 |
|
||
| JWT 认证 | ✅ 完成 |
|
||
| WebSocket 通知 | ✅ 完成 |
|
||
| 备份恢复 | ✅ 完成 |
|
||
| 系统托盘 | ✅ 完成 |
|
||
| UpdateCoreConfig | 🔧 已定义(返回 error)|
|
||
|
||
### 前端 ⚠️ 50%
|
||
|
||
| 页面 | 状态 |
|
||
|------|------|
|
||
| 登录页 | ✅ 完成 |
|
||
| 仪表盘 | ✅ 基本完成 |
|
||
| 组网管理 | ✅ 完成 |
|
||
| 设备管理 | ❌ 待完成 |
|
||
| 服务管理 | ❌ 待完成 |
|
||
| 系统设置 | ❌ 待完成 |
|
||
|
||
---
|
||
|
||
## 五、API 清单
|
||
|
||
### 网络 API
|
||
- `GET /api/v1/networks` - 列表
|
||
- `POST /api/v1/networks` - 创建
|
||
- `GET /api/v1/networks/:id` - 详情
|
||
- `PUT /api/v1/networks/:id` - 更新
|
||
- `DELETE /api/v1/networks/:id` - 删除
|
||
- `POST /api/v1/networks/:id/mesh-seed` - 生成 MeshSeed
|
||
|
||
### 设备 API
|
||
- `GET /api/v1/devices` - 列表
|
||
- `POST /api/v1/devices` - 创建
|
||
- `GET /api/v1/devices/:id` - 详情
|
||
- `PUT /api/v1/devices/:id` - 更新
|
||
- `DELETE /api/v1/devices/:id` - 删除
|
||
- `GET /api/v1/devices/:id/config` - 生成 WireGuard 配置
|
||
|
||
### 服务 API
|
||
- `GET /api/v1/services` - 列表
|
||
- `POST /api/v1/services` - 创建
|
||
- `PUT /api/v1/services/:id` - 更新
|
||
- `DELETE /api/v1/services/:id` - 删除
|
||
|
||
### DDNS API
|
||
- `GET /api/v1/ddns/config` - 获取配置
|
||
- `PUT /api/v1/ddns/config` - 更新配置
|
||
- `POST /api/v1/ddns/sync` - 手动同步
|
||
- `GET /api/v1/ddns/stats` - 统计
|
||
|
||
### 策略 API
|
||
- `GET /api/v1/policies` - 列表
|
||
- `PUT /api/v1/policies/:id` - 更新
|
||
|
||
### 其他 API
|
||
- `GET /api/v1/dashboard/stats` - 统计
|
||
- `GET /api/v1/settings` - 设置
|
||
- `PUT /api/v1/settings` - 更新设置
|
||
|
||
---
|
||
|
||
## 六、配置文件
|
||
|
||
```yaml
|
||
server:
|
||
port: 9531
|
||
mode: release
|
||
|
||
database:
|
||
type: sqlite
|
||
path: ./data/meshray.db
|
||
|
||
jwt:
|
||
secret: (自动生成)
|
||
access_token_duration: 2h
|
||
refresh_token_duration: 7d
|
||
|
||
stun:
|
||
default_servers:
|
||
- stun:stun.qq.com:3478
|
||
- stun:stun.l.google.com:19302
|
||
|
||
turn:
|
||
default_servers: []
|
||
```
|
||
|
||
---
|
||
|
||
## 七、结论
|
||
|
||
MeshRay 是一个**功能架构完整**的项目,核心功能都已实现。前端采用纯静态 CDN 方式,无需 npm/vite,工程简洁。
|
||
|
||
**待完成**:
|
||
1. 设备管理页面
|
||
2. 服务管理页面
|
||
3. 系统设置页面
|
||
|