### 问题分析
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验证相关的记录