Files
dns-server/dns/.trae/documents/plan_20251216_032256.md
Alex Yang cdac4fcf43 update
2026-01-16 11:09:11 +08:00

2.9 KiB
Raw Permalink Blame History

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.godns/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记录。