325 lines
7.7 KiB
Markdown
325 lines
7.7 KiB
Markdown
# 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
|
||
<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>
|
||
```
|
||
|
||
#### 修改后
|
||
```vue
|
||
<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 记录专用字段(新增)
|
||
```vue
|
||
<!-- 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 记录专用字段(新增)
|
||
```vue
|
||
<!-- 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. 更新默认值
|
||
|
||
```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*
|