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,60 @@
## 实现计划优化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分钟