update
This commit is contained in:
53
dns/.trae/documents/plan_20251225_130822.md
Normal file
53
dns/.trae/documents/plan_20251225_130822.md
Normal file
@@ -0,0 +1,53 @@
|
||||
## 问题分析
|
||||
|
||||
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查询点
|
||||
Reference in New Issue
Block a user