## 问题分析

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