7.7 KiB
7.7 KiB
DDNS TXT 记录修复报告
修复时间: 2026-03-26
问题: 服务市场的 DDNS 配置缺少 TXT 记录选项
🎯 问题分析
你的正确观察
- List.vue(服务市场) - ❌ 之前只有 A/AAAA 记录,没有 TXT
- DDNSEdit.vue(专用页面) - ✅ 有 TXT 记录字段
- 用途混淆 - 两个页面的定位不清晰
✅ 修复方案
场景区分
| 页面 | 用途 | 记录类型 | 说明 |
|---|---|---|---|
| 服务市场 → 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(推荐)
- 访问 服务市场 → 同步服务
- 点击 阿里云 DDNS
- 选择 记录类型:TXT (MeshSeed 同步)
- 填写:
- 域名:
mesh.example.com - TXT 记录名称:
_meshray._mesh
- 域名:
- 保存
效果:
- DNS TXT 记录:
_meshray._mesh.mesh.example.com - 用途:组网配置加密同步
场景 2:传统 IP 解析
- 访问 服务市场 → 同步服务
- 点击 阿里云 DDNS
- 选择 记录类型:A (IPv4)
- 填写:
- 域名:
example.com - 主机记录:
@或www
- 域名:
- 保存
效果:
- DNS A 记录:
example.com→1.2.3.4 - 用途:动态 IP 地址解析
💡 设计理念
为什么这样设计?
之前的问题
❌ 只有 A/AAAA 记录
❌ 无法同步 MeshSeed(需要 TXT)
❌ 用途不明确
现在的优势
✅ 默认 TXT 记录(主要用途:MeshSeed 同步)
✅ 保留 A/AAAA(传统用途:IP 解析)
✅ 条件字段(避免界面混乱)
✅ 清晰提示(用户知道用途)
🔍 验证方法
快速测试
- 清除浏览器缓存(Ctrl+Shift+Delete)
- 访问:
http://localhost:9531/service - 切换到 同步服务 标签
- 点击 阿里云 DDNS
- 查看表单:
应该看到:
✓ 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);
});
📝 总结
修复内容
- ✅ 添加 TXT 记录选项(默认选中)
- ✅ 添加 TXT 记录名称字段(条件显示)
- ✅ 添加 A/AAAA 主机记录字段(条件显示)
- ✅ 更新表单校验规则(动态校验)
- ✅ 更新默认值(优先 TXT)
功能区分
| 功能 | 记录类型 | 用途 | 字段 |
|---|---|---|---|
| MeshSeed 同步 | TXT | 组网配置加密同步 | txt_record_name |
| IP 解析(IPv4) | A | 动态 IP 地址解析 | subdomain |
| IP 解析(IPv6) | AAAA | 动态 IPv6 地址解析 | subdomain |
用户体验提升
- ✅ 智能提示: 明确告知 TXT 用于 MeshSeed 同步
- ✅ 条件显示: 只展示相关字段,避免混乱
- ✅ 默认优化: 默认选中 TXT(主要用途)
- ✅ 格式校验: 自动校验 TXT 记录名称格式
DDNS TXT 记录修复报告 | v1.0