This commit is contained in:
Alex Yang
2026-01-16 11:09:11 +08:00
parent 8159577be0
commit cdac4fcf43
284 changed files with 2813570 additions and 14 deletions

View 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查询点