Files
dns-server/.trae/documents/修复DNSSEC状态显示问题.md
2025-12-19 12:44:57 +08:00

1.8 KiB
Raw Blame History

问题分析

  1. 配置正确:配置文件中enableDNSSEC设置为true,但卡片显示"已禁用"
  2. 代码问题:在dns/server.goGetStats函数中,返回的Stats结构体缺少了DNSSEC相关字段
  3. API行为当API访问DNSSEC相关字段时由于没有从GetStats函数返回,它们的值都是默认值(DNSSECEnabled默认值为false
  4. 前端显示前端卡片从API获取DNSSECEnabled值,因此显示"已禁用"

解决方案

修改dns/server.go中的GetStats函数,确保返回的Stats副本包含所有DNSSEC相关字段包括DNSSECEnabledDNSSECQueriesDNSSECSuccessDNSSECFailed

修复步骤

  1. 打开/root/dns/dns/server.go文件
  2. 找到GetStats函数大约在第960行
  3. 修改返回的Stats结构体添加缺失的DNSSEC相关字段
  4. 确保所有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, // 这是关键字段,确保返回正确的启用状态
}