# DDNS 双模式架构设计文档 ## 📋 架构概述 DDNS(动态 DNS)在本系统中采用**双模式设计**,实现了配置与使用的完全解耦,支持两种不同的应用场景。 --- ## 🎯 核心设计理念 ### 1. 配置与使用分离 - **DDNS 配置**:仅存储 DNS 服务商的对接信息(基础设施) - **DDNS 使用**:基于配置创建具体的 DNS 记录(应用层) ### 2. 双层架构 ``` 基础设施层(Tab 3: DDNS 配置) └─ 配置 DNS 服务商信息 ├─ 阿里云 DNS ├─ 腾讯云 DNSPod └─ Cloudflare 应用层(Tab 4: 增强 - DDNS 内网穿透) └─ 基于配置创建完整服务 ├─ A 记录(IPv4) ├─ AAAA 记录(IPv6) ├─ TXT 记录(文本) └─ CNAME 记录(别名) ``` --- ## 🏗️ 两种配置模式详解 ### 模式 A:基础设施配置 🏭 **使用场景**:组网同步 MeshSeed **入口位置**:服务管理 → Tab 3 "DDNS" **配置字段**: | 字段 | 说明 | 示例 | |------|------|------| | DNS 服务商 | 选择云服务商 | Cloudflare / 阿里云 / 腾讯云 | | 根域名 | 主域名 | example.com | | API Token | Cloudflare API 令牌 | `cf_abc123...` | | AccessKey ID | 阿里云访问密钥 | `LTAI5t...` | | AccessKey Secret | 阿里云密钥 | `******` | | SecretId | 腾讯云密钥 ID | `AKID...` | | SecretKey | 腾讯云密钥 | `******` | **特点**: - ✅ 只配置服务商对接信息 - ✅ 不创建具体 DNS 记录 - ✅ 可在组网创建时直接选用 - ✅ 支持连通性测试 **使用流程**: ``` 1. 在 Tab 3 配置 Cloudflare + example.com 2. 创建组网时 → 启用 DDNS 同步 → 选择上述配置 3. 系统自动创建 TXT 记录:_meshray.{短 ID}.example.com 4. 设备加入时读取 TXT 记录获取 MeshSeed ``` --- ### 模式 B:全功能 DDNS 服务 🚀 **使用场景**:NAS 内网穿透、家庭服务器暴露、自定义 DNS 记录 **入口位置**:服务管理 → Tab 4 "增强" → DDNS 内网穿透 **配置字段**: | 字段 | 说明 | 示例 | |------|------|------| | 选择 DDNS 配置 | 从已配置的服务商中选择 | Cloudflare (example.com) | | 记录类型 | DNS 记录类型 | A / AAAA / TXT / CNAME | | 主机记录 | 子域目前前缀 | nas, home, server | | 目标 IP | IPv4/IPv6 地址 | 192.168.1.100 / ::ffff:192.168.1.100 | | 检测端口 | 可达性检测端口 | 80, 443, 8080 | | TXT 记录名称 | TXT 记录的键 | _meshray, verification-code | | TXT 记录值 | TXT 记录的值 | 配置内容或验证信息 | | TTL | DNS 缓存时间 | 600 (10 分钟) | **特点**: - ✅ 完整的 DNS 记录管理 - ✅ 支持多种记录类型 - ✅ 定时检测 IP 变化并自动更新 - ✅ 支持内网穿透等高级应用 **使用流程**: ``` 前置条件:已在 Tab 3 配置 DDNS 服务商 1. 切换到 Tab 4 "增强" 2. 点击 "DDNS 内网穿透" 卡片 3. 选择已配置的 DDNS 服务商 4. 填写记录信息: - 记录类型:AAAA (IPv6) - 主机记录:nas - 目标 IP:::ffff:192.168.1.100 - 检测端口:80 5. 系统开始工作: - 定时检测本地 IPv6 地址 - 调用 DNS 服务商 API 更新记录 - 用户可通过 nas.example.com 访问 ``` --- ## 🔄 两种模式对比 | 维度 | 基础设施配置 | 全功能服务 | |------|-------------|-----------| | **定位** | 基础设施层 | 应用层 | | **用途** | 组网同步 | 内网穿透/自定义 | | **入口** | Tab 3 "DDNS" | Tab 4 "增强" | | **配置复杂度** | 简单(仅对接信息) | 复杂(完整记录) | | **记录类型** | 无(由 Usage 定义) | A/AAAA/TXT/CNAME | | **依赖关系** | 独立 | 依赖基础设施配置 | | **典型场景** | MeshSeed 同步 | NAS 远程访问 | --- ## 📁 页面结构 ``` 服务管理(Service Management) ├── Tab 1: TUN - 虚拟网络接口配置 ├── Tab 2: TURN - 中继服务配置 ├── Tab 3: DDNS - 基础设施配置 ← 🏭 └── Tab 4: 增强 - 应用服务扩展 ← 🚀 ├── DDNS 内网穿透 └── 自定义服务(预留) ``` --- ## 🔧 技术实现 ### 前端关键代码 #### 1. 模式切换 ```vue 🏗️ 基础设施配置 仅配置 DNS 服务商,用于组网同步等场景 🚀 全功能 DDNS 服务 创建完整的 DDNS 记录,支持内网穿透等应用 ``` #### 2. 表单字段区分 ```vue ``` #### 3. 验证规则区分 ```javascript if (formData.value.type === 'DDNS') { if (formData.value.config_mode === 'infrastructure') { // 只校验服务商信息 rules.provider = [{ required: true }] rules.domain = [{ required: true }] } else if (formData.value.config_mode === 'fullservice') { // 校验完整记录 rules.ddns_config_id = [{ required: true }] rules.record_type = [{ required: true }] if (['A', 'AAAA'].includes(formData.value.record_type)) { rules.subdomain = [{ required: true }] rules.target_ip = [{ required: true, pattern: IP_REGEX }] rules.port = [{ required: true }] } } } ``` --- ## 💡 用户体验优化 ### 1. 清晰的引导文案 - Tab 3 明确标注为"基础设施" - 提示可在组网创建时直接选用 - 提示可在"增强"页创建完整服务 ### 2. 智能的级联选择 - 全功能模式下,下拉框只显示已配置的 DDNS 服务商 - 未配置服务商时,提示用户先到 Tab 3 配置 ### 3. 直观的视觉反馈 - 使用 Emoji 图标区分两种模式(🏗️ vs 🚀) - 描述文字清晰说明用途差异 - 卡片式设计展示增强服务 --- ## 🔮 未来扩展 Tab 4 "增强"页预留了扩展能力,未来可以添加: 1. **DDNS 高级应用** - 多记录联动(同时更新 A 和 AAAA) - 批量 DNS 记录管理 - DNS 解析统计 2. **其他服务类型** - 反向代理配置 - SSL 证书自动申请 - 端口转发规则 3. **自动化场景** - 条件触发器(如:仅在检测到 IPv6 变化时更新) - Webhook 通知(更新后回调通知) --- ## 📝 总结 通过**双模式设计**,本系统实现了: ✅ **配置与使用解耦** - 基础设施与应用层分离 ✅ **灵活复用** - 一次配置,多处使用 ✅ **场景覆盖** - 同时支持组网同步和内网穿透 ✅ **易于扩展** - 增强页预留未来能力 这种设计既保证了架构的清晰性,又提供了强大的功能性,为用户提供了最佳的使用体验。