38 lines
1.8 KiB
Markdown
38 lines
1.8 KiB
Markdown
## 问题分析
|
||
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, // 这是关键字段,确保返回正确的启用状态
|
||
}
|
||
``` |