## 实现计划：优化DNSSEC查询逻辑

### 1. 需求分析
- 当配置文件中`enableDNSSEC=true`时，DNS服务器应优先返回包含DNSSEC记录的结果
- 如果没有DNSSEC结果，应返回普通查询结果作为备选
- 保持现有代码结构和兼容性

### 2. 实现步骤

#### 步骤1：修改`forwardDNSRequestWithCache`函数
- 在函数中添加备选响应变量，用于存储非DNSSEC的成功响应
- 当`enableDNSSEC=true`时，遍历所有上游DNS服务器：
  - 对于每个上游，检查响应是否成功
  - 如果响应成功且包含DNSSEC记录，立即返回该响应
  - 如果响应成功但不包含DNSSEC记录，将其保存为备选响应
- 遍历完成后，如果有备选响应，返回该响应
- 如果没有成功响应，返回服务器失败错误

#### 步骤2：添加DNSSEC记录检测逻辑
- 在响应处理中添加DNSSEC记录检测
- 检查响应的Answer、Ns和Extra部分是否包含RRSIG记录
- 使用该检测结果决定是否优先返回该响应

#### 步骤3：优化日志记录
- 为DNSSEC优先返回的情况添加专门的日志记录
- 为备选响应返回的情况添加日志记录

### 3. 技术细节

#### 3.1 DNSSEC检测方法
- 检查响应中是否包含RRSIG（资源记录签名）记录
- 检查范围包括Answer、Ns和Extra部分
- 使用类型断言判断记录类型

#### 3.2 优先级逻辑
- 最高优先级：成功且包含DNSSEC的响应
- 次高优先级：成功但不包含DNSSEC的响应
- 最低优先级：失败响应

### 4. 预期效果
- 当启用DNSSEC时，优先返回安全的DNSSEC结果
- 提高DNS查询的安全性
- 兼容现有配置和代码
- 提供详细的日志记录

### 5. 文件修改
- **文件**：`/root/dns/dns/server.go`
- **函数**：`forwardDNSRequestWithCache`
- **修改内容**：添加DNSSEC优先逻辑和备选响应处理

### 6. 测试要点
- 验证启用DNSSEC时优先返回DNSSEC结果
- 验证无DNSSEC结果时返回普通结果
- 验证禁用DNSSEC时使用原有逻辑
- 验证日志记录正确

### 7. 实现时间线
- 代码修改：20分钟
- 测试：10分钟
- 总计：30分钟