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,20 @@
### 问题分析
1. **收集验证记录集不完整**在DNSSEC验证过程中代码只从`response.Answer``response.Ns`中收集记录,而忽略了`response.Extra`中的记录导致某些DNSSEC记录没有被正确验证。
2. **验证失败处理不当**当DNSSEC签名验证失败时代码会直接丢弃该响应而不是返回包含DNSSEC记录的响应导致客户端无法获取DNSSEC记录。
### 修复方案
1. **修复记录集收集逻辑**在收集需要验证的记录集rrset确保从`response.Answer``response.Ns``response.Extra`中收集所有相关记录。
2. **改进验证失败处理**即使DNSSEC签名验证失败也要返回包含DNSSEC记录的响应同时设置正确的AD标志让客户端决定如何处理验证失败的情况。
3. **优化备选响应逻辑**确保在所有上游服务器都不返回DNSSEC记录时仍然能够正确处理和返回响应。
### 具体修改
1. 修改`forwardDNSRequestWithCache`函数中的记录集收集逻辑,添加对`response.Extra`的处理
2. 修改DNSSEC验证失败时的处理逻辑确保返回包含DNSSEC记录的响应
3. 优化备选响应的保存和返回逻辑确保DNSSEC记录能够被正确处理
### 测试计划
1. 编译修复后的代码
2. 启动DNS服务器并启用DNSSEC
3. 使用dig命令测试DNSSEC记录查询例如`dig +dnssec example.com`
4. 检查查询结果是否包含DNSSEC记录RRSIG、DNSKEY等
5. 检查日志中是否有DNSSEC验证相关的记录