## 问题分析 1. **配置正确**:配置文件中`enableDNSSEC`设置为`true`,但卡片显示"已禁用" 2. **代码问题**:在`dns/server.go`的`GetStats`函数中,返回的`Stats`结构体缺少了DNSSEC相关字段 3. **API行为**:当API访问DNSSEC相关字段时,由于没有从`GetStats`函数返回,它们的值都是默认值(`DNSSECEnabled`默认值为`false`) 4. **前端显示**:前端卡片从API获取`DNSSECEnabled`值,因此显示"已禁用" ## 解决方案 修改`dns/server.go`中的`GetStats`函数,确保返回的`Stats`副本包含所有DNSSEC相关字段,包括`DNSSECEnabled`、`DNSSECQueries`、`DNSSECSuccess`和`DNSSECFailed`。 ## 修复步骤 1. 打开`/root/dns/dns/server.go`文件 2. 找到`GetStats`函数(大约在第960行) 3. 修改返回的`Stats`结构体,添加缺失的DNSSEC相关字段 4. 确保所有DNSSEC字段都从原始`Stats`结构体复制到返回的副本中 ## 预期结果 修复后,API将正确返回DNSSEC启用状态,前端卡片将显示"已启用",与配置文件中的设置一致。 ## 代码修改点 ```go // 返回统计信息的副本 return &Stats{ Queries: s.stats.Queries, Blocked: s.stats.Blocked, Allowed: s.stats.Allowed, Errors: s.stats.Errors, LastQuery: s.stats.LastQuery, AvgResponseTime: s.stats.AvgResponseTime, TotalResponseTime: s.stats.TotalResponseTime, QueryTypes: queryTypesCopy, SourceIPs: sourceIPsCopy, CpuUsage: s.stats.CpuUsage, DNSSECQueries: s.stats.DNSSECQueries, DNSSECSuccess: s.stats.DNSSECSuccess, DNSSECFailed: s.stats.DNSSECFailed, DNSSECEnabled: s.stats.DNSSECEnabled, // 这是关键字段,确保返回正确的启用状态 } ```