1.1.1修复

This commit is contained in:
Alex Yang
2025-12-19 12:44:57 +08:00
parent b576996ede
commit 1f3f5708a3
72 changed files with 3476 additions and 83 deletions

View File

@@ -0,0 +1,84 @@
## 实现计划
### 1. 配置更新
-`DNSConfig` 结构体中添加 `EnableDNSSEC` 布尔字段用于控制是否启用DNSSEC验证
- 在配置加载时设置默认值为 `true`
- 在默认配置JSON中添加DNSSEC相关配置项
### 2. DNSSEC核心功能实现
- **DO标志处理**识别并保留客户端请求中的DNSSEC OK (DO) 标志
- **记录转发**确保所有DNSSEC相关记录RRSIG, DNSKEY, DS, NSEC, NSEC3等被正确转发
- **签名验证**验证上游DNS服务器返回的DNSSEC签名有效性
- **AD标志设置**根据验证结果设置Authenticated Data (AD) 标志
### 3. 代码修改点
#### 3.1 配置文件 (`config/config.go`)
```go
// DNSConfig DNS配置
type DNSConfig struct {
Port int `json:"port"`
UpstreamDNS []string `json:"upstreamDNS"`
Timeout int `json:"timeout"`
StatsFile string `json:"statsFile"` // 统计数据持久化文件
SaveInterval int `json:"saveInterval"` // 数据保存间隔(秒)
EnableDNSSEC bool `json:"enableDNSSEC"` // 是否启用DNSSEC验证
}
```
#### 3.2 默认配置 (`main.go`)
在默认配置JSON中添加
```json
"enableDNSSEC": true
```
#### 3.3 DNS服务器初始化 (`dns/server.go`)
-`NewServer` 方法中为DNS客户端启用DNSSEC支持
- 初始化DNSSEC验证相关组件
#### 3.4 DNS请求处理 (`dns/server.go`)
- 修改 `handleDNSRequest` 方法保留客户端请求中的DO标志
- 修改 `forwardDNSRequest` 方法:
- 确保转发请求时包含DO标志
- 处理上游返回的DNSSEC记录
- 验证DNSSEC签名
- 根据验证结果设置AD标志
- 确保所有DNSSEC记录类型被正确处理
### 4. DNSSEC验证逻辑
- 使用miekg/dns库的内置验证功能
- 验证RRSIG记录与对应资源记录的匹配性
- 验证签名的有效性和过期时间
- 处理信任链验证
### 5. 测试验证
- 测试DNSSEC查询是否能正确返回RRSIG等记录
- 测试DNSSEC验证功能是否正常工作
- 测试在不同配置下的行为
- 测试各种DNSSEC记录类型的处理
## 预期效果
-`enableDNSSEC``true` 时:
- 服务器将验证上游DNS返回的DNSSEC记录
- 对于有效的DNSSEC记录服务器将在响应中设置AD标志
- 对于无效的DNSSEC记录服务器将记录错误并根据配置处理
- 服务器将正确转发所有DNSSEC相关记录
- 支持DNSKEY, DS, RRSIG, NSEC, NSEC3等DNSSEC记录类型
- 客户端可以通过设置DO标志来请求DNSSEC记录
## 安全增强
通过添加DNSSEC支持服务器将能够
- 防止DNS投毒攻击
- 确保DNS记录的完整性和真实性
- 为客户端提供经过验证的DNS响应
- 增强整体DNS服务的安全性
## 实现步骤
1. **修改配置结构**
2. **更新默认配置**
3. **修改DNS客户端设置**
4. **实现DNSSEC验证逻辑**
5. **测试和验证**