Files
Meshray-Manager/docs/DDNS_TXT 记录修复报告.md
T
2026-06-30 15:14:37 +08:00

7.7 KiB
Raw Blame History

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

修改前

<el-form-item label="记录类型" prop="record_type">
  <el-select v-model="formData.record_type" placeholder="请选择记录类型">
    <el-option label="A (IPv4)" value="A" />
    <el-option label="AAAA (IPv6)" value="AAAA" />
  </el-select>
</el-form-item>

修改后

<el-form-item label="记录类型" prop="record_type">
  <el-select v-model="formData.record_type" placeholder="请选择记录类型">
    <el-option label="TXT (MeshSeed 同步)" value="TXT" />
    <el-option label="A (IPv4)" value="A" />
    <el-option label="AAAA (IPv6)" value="AAAA" />
  </el-select>
</el-form-item>
</el-form-item>

2. 添加条件字段显示

TXT 记录专用字段(新增)

<!-- TXT 记录专用字段 -->
<el-form-item v-if="formData.record_type === 'TXT'" label="TXT 记录名称" prop="txt_record_name">
  <el-input
    v-model="formData.txt_record_name"
    placeholder="_meshray._mesh"
    clearable
  />
  <div class="form-tip">
    <el-icon><InfoFilled /></el-icon>
    TXT 记录前缀用于组网配置同步MeshSeed 密文
  </div>
  <div class="form-tip">
    <el-icon><InfoFilled /></el-icon>
    完整记录{{ formData.txt_record_name }}.{{ formData.domain || 'example.com' }}
  </div>
</el-form-item>

特点:

  • 仅在选中 TXT 记录时显示
  • 默认值 _meshray._mesh
  • 明确说明用途:组网配置同步(MeshSeed 密文)
  • 显示完整记录预览

A/AAAA 记录专用字段(新增)

<!-- A/AAAA 记录专用字段 -->
<el-form-item v-if="['A', 'AAAA'].includes(formData.record_type)" label="主机记录" prop="subdomain">
  <el-input v-model="formData.subdomain" placeholder="@ 或 www" clearable />
  <div class="form-tip">
    <el-icon><InfoFilled /></el-icon>
    子域名前缀@ 表示根域名
  </div>
</el-form-item>

特点:

  • 仅在选中 A/AAAA 记录时显示
  • 用于传统 IP 解析
  • 与 TXT 记录区分开

3. 更新默认值

const configureDDNS = (provider) => {
  // ...
  formData.value = {
    // ...
    record_type: 'TXT',  // ✅ 改为 TXT(之前是 'A'
    txt_record_name: '_meshray._mesh',  // ✅ 新增
    subdomain: ''  // ✅ 新增
  }
}

理由:

  • 默认使用 TXT 记录同步 MeshSeed
  • 符合主要使用场景(组网配置同步)

4. 添加校验规则

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.com1.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 控制台测试

// 测试 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