7.8 KiB
7.8 KiB
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. 模式切换
<el-form-item label="配置模式" prop="config_mode">
<el-radio-group v-model="formData.config_mode">
<el-radio value="infrastructure">
🏗️ 基础设施配置
<span class="radio-desc">仅配置 DNS 服务商,用于组网同步等场景</span>
</el-radio>
<el-radio value="fullservice">
🚀 全功能 DDNS 服务
<span class="radio-desc">创建完整的 DDNS 记录,支持内网穿透等应用</span>
</el-radio>
</el-radio-group>
</el-form-item>
2. 表单字段区分
<!-- 基础设施模式 -->
<template v-if="formData.config_mode === 'infrastructure'">
<el-form-item label="DNS 服务商" prop="provider">
<el-select v-model="formData.provider">
<el-option label="阿里云 DNS" value="aliyun" />
<el-option label="Cloudflare" value="cloudflare" />
</el-select>
</el-form-item>
<el-form-item label="根域名" prop="domain">
<el-input v-model="formData.domain" placeholder="example.com" />
</el-form-item>
</template>
<!-- 全功能服务模式 -->
<template v-else-if="formData.config_mode === 'fullservice'">
<el-form-item label="选择 DDNS 配置" prop="ddns_config_id">
<el-select v-model="formData.ddns_config_id" filterable>
<el-option
v-for="config in ddnsConfigs"
:key="config.id"
:label="`${config.name} (${config.config?.domain})`"
:value="config.id"
/>
</el-select>
</el-form-item>
<el-form-item label="记录类型" prop="record_type">
<el-select v-model="formData.record_type">
<el-option label="A (IPv4)" value="A" />
<el-option label="AAAA (IPv6)" value="AAAA" />
</el-select>
</el-form-item>
<!-- 更多字段... -->
</template>
3. 验证规则区分
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 "增强"页预留了扩展能力,未来可以添加:
-
DDNS 高级应用
- 多记录联动(同时更新 A 和 AAAA)
- 批量 DNS 记录管理
- DNS 解析统计
-
其他服务类型
- 反向代理配置
- SSL 证书自动申请
- 端口转发规则
-
自动化场景
- 条件触发器(如:仅在检测到 IPv6 变化时更新)
- Webhook 通知(更新后回调通知)
📝 总结
通过双模式设计,本系统实现了:
✅ 配置与使用解耦 - 基础设施与应用层分离
✅ 灵活复用 - 一次配置,多处使用
✅ 场景覆盖 - 同时支持组网同步和内网穿透
✅ 易于扩展 - 增强页预留未来能力
这种设计既保证了架构的清晰性,又提供了强大的功能性,为用户提供了最佳的使用体验。