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