352 lines
6.9 KiB
Markdown
352 lines
6.9 KiB
Markdown
# MeshRay 全功能遍历与问题排查计划
|
||
|
||
## 📋 遍历方法论
|
||
|
||
### 用户视角遍历
|
||
- **起点**: 用户第一个触点(登录/注册)
|
||
- **路径**: 按照实际使用流程
|
||
- **覆盖**: 前端页面 → API 接口 → 业务逻辑 → 数据库
|
||
- **深度**: 每个功能的完整实现链路
|
||
|
||
### 技术栈遍历
|
||
- **前端**: Vue 组件、路由、状态管理、API 调用
|
||
- **后端**: Handler → Service → Model/Store
|
||
- **核心**: Ctr → Core → WireGuard
|
||
- **数据**: SQLite 表结构、关系、完整性
|
||
|
||
---
|
||
|
||
## 🗺️ 功能模块地图
|
||
|
||
### 1. 用户认证与系统入口
|
||
- [ ] 登录页面 (`/login`)
|
||
- [ ] 注册页面 (`/register`)
|
||
- [ ] 首页/Dashboard (`/`)
|
||
- [ ] 系统配置
|
||
|
||
### 2. 网络管理(核心功能)
|
||
- [ ] 网络列表页面 (`/networks`)
|
||
- [ ] 创建网络
|
||
- [ ] 网络详情
|
||
- [ ] 网络配置
|
||
- [ ] Peer 管理
|
||
- [ ] IP 地址分配
|
||
|
||
### 3. STUN/TURN 服务
|
||
- [ ] STUN 服务器配置
|
||
- [ ] TURN 服务器配置
|
||
- [ ] 服务可用性检测
|
||
- [ ] 自动打洞配置
|
||
|
||
### 4. DDNS 服务
|
||
- [ ] DDNS Provider 配置
|
||
- [ ] DDNS Usage 管理
|
||
- [ ] 域名绑定
|
||
- [ ] 自动更新
|
||
|
||
### 5. 系统管理
|
||
- [ ] 备份恢复
|
||
- [ ] 通知中心
|
||
- [ ] 系统更新检查
|
||
- [ ] 日志查看
|
||
|
||
### 6. Core 协议层
|
||
- [ ] Core 客户端连接
|
||
- [ ] 设备发现
|
||
- [ ] NAT 类型检测
|
||
- [ ] 打洞策略
|
||
- [ ] 中继 fallback
|
||
|
||
---
|
||
|
||
## 🔍 详细遍历路径
|
||
|
||
### 路径 1: 用户首次使用 - 创建网络
|
||
|
||
**前端**:
|
||
1. 登录 → Dashboard
|
||
2. 点击"创建网络"
|
||
3. 填写网络配置(名称、IP 段、MTU 等)
|
||
4. 提交创建
|
||
5. 跳转到网络详情
|
||
|
||
**后端**:
|
||
1. `POST /api/v1/networks`
|
||
2. `handler.NetworkHandler.CreateNetwork`
|
||
3. `service.NetworkService.CreateNetwork`
|
||
4. 验证配置
|
||
5. 生成雪花 ID
|
||
6. 分配子网
|
||
7. 创建管理员 Peer
|
||
8. 保存到数据库
|
||
|
||
**Core 层**:
|
||
1. Ctr 监听网络创建事件
|
||
2. 配置 WG 设备
|
||
3. 生成密钥对
|
||
4. 设置监听端口
|
||
|
||
**排查点**:
|
||
- ✅ 雪花 ID 生成是否正确(uint64 处理)
|
||
- ✅ 子网分配算法
|
||
- ✅ Peer 配置生成
|
||
- ✅ WG 设备创建成功
|
||
- ✅ 数据库事务完整性
|
||
|
||
---
|
||
|
||
### 路径 2: 添加 Peer(用户态模式)
|
||
|
||
**前端**:
|
||
1. 网络详情页 → "添加 Peer"
|
||
2. 选择"用户态模式"
|
||
3. 填写 Peer 信息(名称、IP)
|
||
4. 下载配置文件
|
||
5. 启动 Peer
|
||
|
||
**后端**:
|
||
1. `POST /api/v1/networks/{id}/peers`
|
||
2. `handler.PeerHandler.CreatePeer`
|
||
3. `service.PeerService.CreatePeer`
|
||
4. 验证 IP 可用性
|
||
5. 生成 Peer 配置
|
||
6. 返回 WireGuard 配置
|
||
|
||
**Core 层**:
|
||
1. Ctr 收到 Peer 创建事件
|
||
2. 调用 `wg.AddPeer`
|
||
3. 配置用户态 WG 设备
|
||
4. 设置代理规则
|
||
|
||
**排查点**:
|
||
- ✅ Peer IP 冲突检测
|
||
- ✅ 配置文件格式正确
|
||
- ✅ WG 设备添加成功
|
||
- ✅ 路由表更新
|
||
- ✅ 连通性测试
|
||
|
||
---
|
||
|
||
### 路径 3: STUN 自动配置
|
||
|
||
**前端**:
|
||
1. 网络详情 → STUN 配置
|
||
2. 启用 STUN 穿透
|
||
3. 选择 STUN 服务器
|
||
4. 保存配置
|
||
|
||
**后端**:
|
||
1. `PUT /api/v1/networks/{id}/stun`
|
||
2. `handler.NetworkHandler.UpdateSTUNConfig`
|
||
3. `service.STUNService.Configure`
|
||
4. 验证 STUN 服务器可用性
|
||
5. 更新网络配置
|
||
|
||
**Core 层**:
|
||
1. Ctr 监听 STUN 配置变更
|
||
2. 自动配置 STUN 给 WG
|
||
3. 设置 endpoint 发现机制
|
||
|
||
**排查点**:
|
||
- ✅ STUN 服务器可达性
|
||
- ✅ WG Endpoint 自动填充
|
||
- ✅ NAT 类型检测准确
|
||
- ✅ 打洞成功率统计
|
||
|
||
---
|
||
|
||
### 路径 4: TURN 中继 fallback
|
||
|
||
**前端**:
|
||
1. 网络详情 → TURN 配置
|
||
2. 启用 TURN 中继
|
||
3. 配置 TURN 服务器
|
||
4. 设置 fallback 条件
|
||
|
||
**后端**:
|
||
1. `PUT /api/v1/networks/{id}/turn`
|
||
2. `handler.NetworkHandler.UpdateTURNConfig`
|
||
3. `service.TURNServerService.Validate`
|
||
4. 测试 TURN 服务器连接
|
||
5. 保存配置
|
||
|
||
**Core 层**:
|
||
1. Ctr 监听 TURN 配置
|
||
2. 监控打洞失败
|
||
3. 自动切换到 TURN 中继
|
||
4. 更新 Peer 配置
|
||
|
||
**排查点**:
|
||
- ✅ TURN 凭证生成
|
||
- ✅ fallback 触发条件
|
||
- ✅ 中继路由优先级
|
||
- ✅ 切换延迟
|
||
|
||
---
|
||
|
||
### 路径 5: DDNS 全自动模式
|
||
|
||
**前端**:
|
||
1. DDNS 管理 → 创建 Provider
|
||
2. 配置 API Token
|
||
3. 创建 DDNS Usage
|
||
4. 绑定到网络
|
||
|
||
**后端**:
|
||
1. `POST /api/v1/ddns/providers`
|
||
2. `POST /api/v1/ddns/usages`
|
||
3. `POST /api/v1/networks/{id}/bind-ddns`
|
||
4. 验证 Provider 配置
|
||
5. 测试 DNS API
|
||
6. 建立绑定关系
|
||
|
||
**Core 层**:
|
||
1. 监听 IP 变化
|
||
2. 自动更新 DNS 记录
|
||
3. 同步到所有 Peer
|
||
|
||
**排查点**:
|
||
- ✅ Provider 验证逻辑
|
||
- ✅ DNS 记录创建成功
|
||
- ✅ IP 检测准确性
|
||
- ✅ 更新频率控制
|
||
- ✅ 错误重试机制
|
||
|
||
---
|
||
|
||
### 路径 6: 备份与恢复
|
||
|
||
**前端**:
|
||
1. 系统管理 → 备份
|
||
2. 点击"创建备份"
|
||
3. 下载备份文件
|
||
4. 上传备份恢复
|
||
|
||
**后端**:
|
||
1. `POST /api/v1/system/backup`
|
||
2. `handler.BackupHandler.CreateBackup`
|
||
3. `service.BackupService.CreateBackup`
|
||
4. 导出数据库
|
||
5. 打包配置文件
|
||
6. 返回 ZIP 文件
|
||
|
||
**恢复流程**:
|
||
1. `POST /api/v1/system/restore`
|
||
2. 上传 ZIP 文件
|
||
3. 解压
|
||
4. 恢复数据库
|
||
5. 恢复配置
|
||
6. 重启服务
|
||
|
||
**排查点**:
|
||
- ✅ 数据库导出完整
|
||
- ✅ 配置文件备份
|
||
- ✅ 压缩包格式正确
|
||
- ✅ 恢复时事务安全
|
||
- ✅ 服务重启成功
|
||
|
||
---
|
||
|
||
### 路径 7: 实时通知推送
|
||
|
||
**前端**:
|
||
1. WebSocket 连接
|
||
2. 监听通知事件
|
||
3. 显示通知弹窗
|
||
4. 标记已读
|
||
|
||
**后端**:
|
||
1. WebSocket 握手
|
||
2. 认证中间件
|
||
3. 维护连接池
|
||
4. 广播通知
|
||
|
||
**排查点**:
|
||
- ✅ WebSocket 认证
|
||
- ✅ 心跳保活
|
||
- ✅ 断线重连
|
||
- ✅ 消息不丢失
|
||
- ✅ 并发连接处理
|
||
|
||
---
|
||
|
||
### 路径 8: Core 协议通信
|
||
|
||
**Core 客户端**:
|
||
1. TLS 握手
|
||
2. 认证(Token/mTLS)
|
||
3. 能力协商
|
||
4. 订阅事件
|
||
|
||
**Core 服务端**:
|
||
1. 监听端口
|
||
2. 接受连接
|
||
3. 验证客户端
|
||
4. 发送事件
|
||
|
||
**排查点**:
|
||
- ✅ Proto 定义一致性
|
||
- ✅ TLS 证书验证
|
||
- ✅ 消息序列化
|
||
- ✅ 错误处理
|
||
- ✅ 重连机制
|
||
|
||
---
|
||
|
||
## 🐛 重点排查问题清单
|
||
|
||
### P0 - 严重问题
|
||
1. **网络创建失败** - 雪花 ID、子网分配
|
||
2. **Peer 无法连接** - WG 配置、路由表
|
||
3. **STUN 打洞无效** - Endpoint 发现
|
||
4. **DDNS 更新失败** - API 调用、权限
|
||
|
||
### P1 - 重要问题
|
||
1. **备份恢复不完整** - 表遗漏、配置缺失
|
||
2. **通知推送延迟** - WebSocket 连接
|
||
3. **TURN 切换失败** - fallback 逻辑
|
||
4. **Core 连接断开** - 心跳、重连
|
||
|
||
### P2 - 次要问题
|
||
1. **UI 显示异常** - 数据格式化
|
||
2. **错误提示不清** - 错误包装
|
||
3. **性能问题** - 查询优化
|
||
4. **文档缺失** - API 注释
|
||
|
||
---
|
||
|
||
## 🔧 排查工具与方法
|
||
|
||
### 代码审查
|
||
- ✅ TODO/FIXME 标记
|
||
- ✅ 错误处理完整性
|
||
- ✅ 日志输出充分性
|
||
- ✅ 边界条件检查
|
||
|
||
### 运行时排查
|
||
- ✅ 编译检查
|
||
- ✅ 单元测试
|
||
- ✅ 集成测试
|
||
- ✅ 手动验证
|
||
|
||
### 数据验证
|
||
- ✅ 数据库约束
|
||
- ✅ 外键关系
|
||
- ✅ 索引效率
|
||
- ✅ 事务完整性
|
||
|
||
---
|
||
|
||
## 📊 预期输出
|
||
|
||
1. **问题清单** - 按优先级分类
|
||
2. **修复方案** - 具体代码修改
|
||
3. **验证结果** - 测试通过证明
|
||
4. **文档更新** - 使用说明完善
|
||
|
||
---
|
||
|
||
**开始时间**: 2026-03-20
|
||
**预计耗时**: 2-3 小时
|
||
**目标**: 零遗漏、零死角、全功能可用
|