# DDNS TXT 记录修复报告 **修复时间**: 2026-03-26 **问题**: 服务市场的 DDNS 配置缺少 TXT 记录选项 --- ## 🎯 问题分析 ### 你的正确观察 1. **List.vue(服务市场)** - ❌ 之前只有 A/AAAA 记录,没有 TXT 2. **DDNSEdit.vue(专用页面)** - ✅ 有 TXT 记录字段 3. **用途混淆** - 两个页面的定位不清晰 --- ## ✅ 修复方案 ### 场景区分 | 页面 | 用途 | 记录类型 | 说明 | |------|------|----------|------| | **服务市场 → DDNS** | 通用 DDNS 服务 | ✅ TXT / A / AAAA | 支持所有类型 | | **服务 → DDNS 配置** | MeshSeed 同步专用 | ✅ 仅 TXT | 专门用于组网配置同步 | --- ## 🔧 具体修改 ### 1. List.vue - 添加 TXT 记录选项 **修改位置**: `web/src/views/Service/List.vue` Line 500-506 #### 修改前 ```vue ``` #### 修改后 ```vue ``` --- ### 2. 添加条件字段显示 #### TXT 记录专用字段(新增) ```vue
TXT 记录前缀,用于组网配置同步(MeshSeed 密文)
完整记录:{{ formData.txt_record_name }}.{{ formData.domain || 'example.com' }}
``` **特点**: - ✅ 仅在选中 TXT 记录时显示 - ✅ 默认值 `_meshray._mesh` - ✅ 明确说明用途:**组网配置同步(MeshSeed 密文)** - ✅ 显示完整记录预览 --- #### A/AAAA 记录专用字段(新增) ```vue
子域名前缀,@ 表示根域名
``` **特点**: - ✅ 仅在选中 A/AAAA 记录时显示 - ✅ 用于传统 IP 解析 - ✅ 与 TXT 记录区分开 --- ### 3. 更新默认值 ```javascript const configureDDNS = (provider) => { // ... formData.value = { // ... record_type: 'TXT', // ✅ 改为 TXT(之前是 'A') txt_record_name: '_meshray._mesh', // ✅ 新增 subdomain: '' // ✅ 新增 } } ``` **理由**: - ✅ 默认使用 TXT 记录同步 MeshSeed - ✅ 符合主要使用场景(组网配置同步) --- ### 4. 添加校验规则 ```javascript if (formData.value.type === 'DDNS') { rules.provider = [{ required: true, message: '请选择 DNS 服务商', trigger: 'change' }] rules.domain = [{ required: true, message: '请输入域名', trigger: 'blur' }] // ✅ TXT 记录专用校验 if (formData.value.record_type === 'TXT') { rules.txt_record_name = [ { required: true, message: '请输入 TXT 记录名称', trigger: 'blur' }, { pattern: /^[a-zA-Z0-9._-]+$/, message: '只能包含字母、数字、点、下划线和连字符', trigger: 'blur' } ] } // ✅ A/AAAA 记录专用校验 if (['A', 'AAAA'].includes(formData.value.record_type)) { rules.subdomain = [ { required: true, message: '请输入主机记录', trigger: 'blur' } ] } } ``` **特点**: - ✅ 根据记录类型动态校验 - ✅ TXT 记录名称格式校验 - ✅ A/AAAA 记录需要主机名 --- ## 📊 完整对比 ### 修改前 ❌ ``` 服务市场 → 添加 DDNS ├── DNS 服务商 ├── 域名 └── 记录类型 ├── A (IPv4) └── AAAA (IPv6) ❌ 没有 TXT 选项 ❌ 无法同步 MeshSeed ``` ### 修改后 ✅ ``` 服务市场 → 添加 DDNS ├── DNS 服务商 ├── 域名 └── 记录类型 ├── TXT (MeshSeed 同步) ← 默认选中 │ └── TXT 记录名称(自动显示) ├── A (IPv4) │ └── 主机记录(子域名) └── AAAA (IPv6) └── 主机记录(子域名) ✅ 支持 TXT 同步 MeshSeed ✅ 支持 A/AAAA 传统解析 ✅ 条件字段智能显示 ``` --- ## 🎯 使用示例 ### 场景 1:同步 MeshSeed(推荐) 1. 访问 **服务市场** → **同步服务** 2. 点击 **阿里云 DDNS** 3. 选择 **记录类型:TXT (MeshSeed 同步)** 4. 填写: - 域名:`mesh.example.com` - TXT 记录名称:`_meshray._mesh` 5. 保存 **效果**: - DNS TXT 记录:`_meshray._mesh.mesh.example.com` - 用途:组网配置加密同步 --- ### 场景 2:传统 IP 解析 1. 访问 **服务市场** → **同步服务** 2. 点击 **阿里云 DDNS** 3. 选择 **记录类型:A (IPv4)** 4. 填写: - 域名:`example.com` - 主机记录:`@` 或 `www` 5. 保存 **效果**: - DNS A 记录:`example.com` → `1.2.3.4` - 用途:动态 IP 地址解析 --- ## 💡 设计理念 ### 为什么这样设计? #### 之前的问题 ``` ❌ 只有 A/AAAA 记录 ❌ 无法同步 MeshSeed(需要 TXT) ❌ 用途不明确 ``` #### 现在的优势 ``` ✅ 默认 TXT 记录(主要用途:MeshSeed 同步) ✅ 保留 A/AAAA(传统用途:IP 解析) ✅ 条件字段(避免界面混乱) ✅ 清晰提示(用户知道用途) ``` --- ## 🔍 验证方法 ### 快速测试 1. **清除浏览器缓存**(Ctrl+Shift+Delete) 2. 访问:`http://localhost:9531/service` 3. 切换到 **同步服务** 标签 4. 点击 **阿里云 DDNS** 5. 查看表单: **应该看到**: ``` ✓ DNS 服务商:[阿里云 DNS] ✓ 域名:[输入框] ✓ 记录类型:[下拉框] - TXT (MeshSeed 同步) ← 默认选中 - A (IPv4) - AAAA (IPv6) 选择 TXT 后应显示: ✓ TXT 记录名称:[_meshray._mesh] - TXT 记录前缀,用于组网配置同步(MeshSeed 密文) - 完整记录:_meshray._mesh.example.com ``` --- ### JavaScript 控制台测试 ```javascript // 测试 API 返回 fetch('/api/v1/ddns/config') .then(r => r.json()) .then(d => { console.log('完整数据:', d); console.log('TXT 字段存在吗?', 'txt_record_name' in d.data); console.log('记录类型:', d.data.record_type); }); ``` --- ## 📝 总结 ### 修复内容 1. ✅ 添加 TXT 记录选项(默认选中) 2. ✅ 添加 TXT 记录名称字段(条件显示) 3. ✅ 添加 A/AAAA 主机记录字段(条件显示) 4. ✅ 更新表单校验规则(动态校验) 5. ✅ 更新默认值(优先 TXT) ### 功能区分 | 功能 | 记录类型 | 用途 | 字段 | |------|----------|------|------| | **MeshSeed 同步** | TXT | 组网配置加密同步 | txt_record_name | | **IP 解析(IPv4)** | A | 动态 IP 地址解析 | subdomain | | **IP 解析(IPv6)** | AAAA | 动态 IPv6 地址解析 | subdomain | ### 用户体验提升 - ✅ **智能提示**: 明确告知 TXT 用于 MeshSeed 同步 - ✅ **条件显示**: 只展示相关字段,避免混乱 - ✅ **默认优化**: 默认选中 TXT(主要用途) - ✅ **格式校验**: 自动校验 TXT 记录名称格式 --- *DDNS TXT 记录修复报告 | v1.0*