Files
dns-server/.trae/documents/plan_20251225_130822.md
2026-01-14 23:08:46 +08:00

53 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 问题分析
DNS服务器出现"Server Failed"的根本原因是当用户配置的DNS服务器地址没有包含端口号时代码直接将其传递给`dns.Client.Exchange()`方法,而该方法需要完整的"IP:端口"格式地址。
## 解决方案
### 1. 创建DNS服务器地址处理函数
- **功能**确保DNS服务器地址始终包含端口号默认添加53端口
- **实现**:创建`normalizeDNSServerAddress`函数,检查并添加端口号
### 2. 应用地址处理函数到所有DNS服务器配置
**需要修改的位置**
- **主DNS服务器**`s.config.UpstreamDNS`
- **DNSSEC专用服务器**`s.config.DNSSECUpstreamDNS`
- **域名特定DNS服务器**`s.config.DomainSpecificDNS`
- **所有调用`resolver.Exchange()`的地方**:确保传递的服务器地址包含端口号
### 3. 修改具体代码位置
**文件**`dns/server.go`
**修改点**
1. **添加地址处理函数**:在文件中添加`normalizeDNSServerAddress`函数
2. **在parallel模式中使用**修改第865行附近的代码
3. **在loadbalance模式中使用**修改第1063行附近的代码
4. **在fastest-ip模式中使用**修改第1189行附近的代码
5. **在default模式中使用**修改第1311行附近的代码
6. **在DNSSEC专用服务器请求中使用**修改第1452行附近的代码
7. **在本地解析中使用**修改第1550行附近的代码
### 4. 确保配置文件加载时也处理地址
- 检查配置文件加载代码确保在加载配置时就处理DNS服务器地址
- 或者在每次使用DNS服务器地址时动态处理
## 修复步骤
1. **创建地址处理函数**:实现`normalizeDNSServerAddress`函数
2. **修改所有DNS查询点**:在所有调用`resolver.Exchange()`的地方使用该函数
3. **测试修复效果**重启DNS服务器并测试查询功能
4. **验证各种配置场景**测试带端口和不带端口的DNS服务器配置
## 预期效果
- 当用户配置DNS服务器为`223.5.5.5`时,自动添加端口变为`223.5.5.5:53`
- 当用户配置DNS服务器为`8.8.8.8:53`时,保持不变
- DNS查询成功率显著提高不再出现"Server Failed"错误
- 支持各种DNS服务器配置格式提高系统兼容性
## 关键文件修改
- `/root/dns/dns/server.go`添加地址处理函数并应用到所有DNS查询点