1.8 KiB
1.8 KiB
问题分析
- 配置正确:配置文件中
enableDNSSEC设置为true,但卡片显示"已禁用" - 代码问题:在
dns/server.go的GetStats函数中,返回的Stats结构体缺少了DNSSEC相关字段 - API行为:当API访问DNSSEC相关字段时,由于没有从
GetStats函数返回,它们的值都是默认值(DNSSECEnabled默认值为false) - 前端显示:前端卡片从API获取
DNSSECEnabled值,因此显示"已禁用"
解决方案
修改dns/server.go中的GetStats函数,确保返回的Stats副本包含所有DNSSEC相关字段,包括DNSSECEnabled、DNSSECQueries、DNSSECSuccess和DNSSECFailed。
修复步骤
- 打开
/root/dns/dns/server.go文件 - 找到
GetStats函数(大约在第960行) - 修改返回的
Stats结构体,添加缺失的DNSSEC相关字段 - 确保所有DNSSEC字段都从原始
Stats结构体复制到返回的副本中
预期结果
修复后,API将正确返回DNSSEC启用状态,前端卡片将显示"已启用",与配置文件中的设置一致。
代码修改点
// 返回统计信息的副本
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, // 这是关键字段,确保返回正确的启用状态
}