Files
dns-server/.trae/documents/plan_20251216_032256.md
2025-12-19 12:44:57 +08:00

82 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DNSSEC功能修复计划
## 问题分析
当前DNSSEC实现存在以下问题
1. 当启用DNSSEC时系统只是验证上游服务器返回的DNSSEC签名但不会主动请求DNSSEC记录
2. 当上游服务器返回的响应没有DNSSEC记录时系统只是将其作为备选响应
3. 没有专门从8.8.8.8/1.1.1.1获取DNSSEC记录进行验证
4. 缓存时没有优先考虑DNSSEC记录
## 修复方案
### 1. 改进DNS请求转发逻辑
**修改文件:** `dns/server.go`
**修改函数:** `forwardDNSRequestWithCache`
- 当启用DNSSEC且响应中没有DNSSEC记录时主动向8.8.8.8/1.1.1.1发送DNS请求
- 比较不同服务器返回的结果优先使用带有DNSSEC记录的响应
- 如果DNSSEC结果不匹配优先使用8.8.8.8/1.1.1.1提供的解析记录
### 2. 增强DNSSEC验证机制
**修改文件:** `dns/server.go`
- 完善DNSSEC记录提取和验证逻辑
- 确保正确处理DNSKEY和RRSIG记录
- 改进AD标志Authenticated Data的设置
### 3. 优化缓存机制
**修改文件:** `dns/cache.go``dns/server.go`
- 缓存时标记DNSSEC状态
- 优先返回带有DNSSEC记录的缓存项
- 改进缓存键生成考虑DNSSEC属性
### 4. 增加DNSSEC特定服务器配置
**修改文件:** `config.json`
- 添加专门用于DNSSEC查询的服务器配置
- 默认为8.8.8.8和1.1.1.1
## 具体实现步骤
1. **修改`forwardDNSRequestWithCache`函数**
- 当启用DNSSEC且主响应没有DNSSEC记录时向DNSSEC专用服务器发送请求
- 比较所有响应选择最优结果优先DNSSEC记录其次是可靠服务器
- 实现DNSSEC结果验证和比较逻辑
2. **改进缓存获取逻辑**
-`handleDNSRequest`函数中优先检查是否有带有DNSSEC记录的缓存项
- 如果有,直接返回;否则再检查普通缓存项
3. **优化DNSSEC记录验证**
- 增强`verifyDNSSEC`函数的实现
- 确保正确验证所有RRSIG记录
- 改进错误处理和日志记录
4. **添加DNSSEC服务器配置**
- 在配置文件中添加`dnssecUpstreamDNS`配置项
- 默认值为["8.8.8.8:53", "1.1.1.1:53"]
## 测试计划
1. 启动DNS服务器启用DNSSEC
2. 使用`dig`命令测试DNSSEC记录获取
3. 验证带有DNSSEC记录的响应被正确返回
4. 验证缓存机制优先返回DNSSEC记录
5. 测试DNSSEC验证失败时的处理逻辑
## 预期效果
1. 启用DNSSEC后系统会主动请求并验证DNSSEC记录
2. 优先返回带有DNSSEC记录的解析结果
3. 当DNSSEC结果不匹配时优先使用8.8.8.8/1.1.1.1提供的记录
4. 缓存机制正确处理DNSSEC标记优先返回DNSSEC记录
5. 完善的日志记录,便于调试和监控
## 代码修改范围
- `dns/server.go`核心DNSSEC逻辑修改
- `dns/cache.go`:缓存机制优化
- `config.json`:配置项添加
通过以上修改将解决当前DNSSEC功能的问题确保启用DNSSEC后能够正确获取、验证和返回DNSSEC记录。