更新版本到2.0

This commit is contained in:
Alex Yang
2026-01-25 16:13:52 +08:00
parent ecbc20d89f
commit a5dc5841fb
54 changed files with 76520 additions and 2914 deletions

View File

@@ -17,14 +17,20 @@ type DNSConfig struct {
Port int `json:"port"`
UpstreamDNS []string `json:"upstreamDNS"`
DNSSECUpstreamDNS []string `json:"dnssecUpstreamDNS"` // 用于DNSSEC查询的专用服务器
Timeout int `json:"timeout"`
SaveInterval int `json:"saveInterval"` // 数据保存间隔(秒)
CacheTTL int `json:"cacheTTL"` // DNS缓存过期时间分钟
EnableDNSSEC bool `json:"enableDNSSEC"` // 是否启用DNSSEC支持
QueryMode string `json:"queryMode"` // 查询模式:"loadbalance"(负载均衡)、"parallel"(并行请求)、"fastest-ip"最快的IP地址
QueryMode string `json:"queryMode"` // 查询模式:"parallel"(并行请求)、"fastest-ip"最快的IP地址
QueryTimeout int `json:"queryTimeout"` // 查询超时时间(毫秒)
EnableFastReturn bool `json:"enableFastReturn"` // 是否启用快速返回机制
DomainSpecificDNS DomainSpecificDNS `json:"domainSpecificDNS"` // 域名特定DNS服务器配置
NoDNSSECDomains []string `json:"noDNSSECDomains"` // 不验证DNSSEC的域名模式列表
EnableIPv6 bool `json:"enableIPv6"` // 是否启用IPv6解析AAAA记录
CacheMode string `json:"cacheMode"` // 缓存模式:"memory"(内存缓存)、"file"(文件缓存)
CacheSize int `json:"cacheSize"` // 缓存大小限制MB0表示不缓存
MaxCacheTTL int `json:"maxCacheTTL"` // 最大缓存TTL分钟
MinCacheTTL int `json:"minCacheTTL"` // 最小缓存TTL分钟
CacheFilePath string `json:"cacheFilePath"` // 缓存文件路径
}
// HTTPConfig HTTP控制台配置
@@ -49,9 +55,16 @@ type BlacklistEntry struct {
type ShieldConfig struct {
Blacklists []BlacklistEntry `json:"blacklists"`
UpdateInterval int `json:"updateInterval"`
BlockMethod string `json:"blockMethod"` // 屏蔽方法: "NXDOMAIN", "refused", "emptyIP", "customIP"
CustomBlockIP string `json:"customBlockIP"` // 自定义屏蔽IP当BlockMethod为"customIP"时使用
StatsSaveInterval int `json:"statsSaveInterval"` // 计数数据保存间隔(秒)
BlockMethod string `json:"blockMethod"` // 屏蔽方法: "NXDOMAIN", "refused", "emptyIP", "customIP"
CustomBlockIP string `json:"customBlockIP"` // 自定义屏蔽IP当BlockMethod为"customIP"时使用
StatsSaveInterval int `json:"statsSaveInterval"` // 计数数据保存间隔(秒)
}
// GFWListConfig GFWList配置
type GFWListConfig struct {
IP string `json:"ip"` // GFWList域名解析的目标IP地址
Content string `json:"content"` // GFWList规则文件路径
Enabled bool `json:"enabled"` // 是否启用GFWList功能
}
// LogConfig 日志配置
@@ -64,10 +77,11 @@ type LogConfig struct {
// Config 整体配置
type Config struct {
DNS DNSConfig `json:"dns"`
HTTP HTTPConfig `json:"http"`
Shield ShieldConfig `json:"shield"`
Log LogConfig `json:"log"`
DNS DNSConfig `json:"dns"`
HTTP HTTPConfig `json:"http"`
Shield ShieldConfig `json:"shield"`
GFWList GFWListConfig `json:"gfwList"` // GFWList配置
Log LogConfig `json:"log"`
}
// LoadConfig 加载配置文件
@@ -87,9 +101,6 @@ func LoadConfig(path string) (*Config, error) {
if config.DNS.Port == 0 {
config.DNS.Port = 53
}
if config.DNS.Timeout == 0 {
config.DNS.Timeout = 5000 // 默认超时时间为5000毫秒
}
if len(config.DNS.UpstreamDNS) == 0 {
config.DNS.UpstreamDNS = []string{"223.5.5.5:53", "223.6.6.6:53"}
}
@@ -100,10 +111,38 @@ func LoadConfig(path string) (*Config, error) {
if config.DNS.CacheTTL == 0 {
config.DNS.CacheTTL = 30 // 默认30分钟
}
// 缓存模式默认值
if config.DNS.CacheMode == "" {
config.DNS.CacheMode = "memory" // 默认内存缓存
}
// 缓存大小默认值100MB
if config.DNS.CacheSize == 0 {
config.DNS.CacheSize = 100 // 默认100MB
}
// 最大缓存TTL默认值120分钟
if config.DNS.MaxCacheTTL == 0 {
config.DNS.MaxCacheTTL = 120 // 默认120分钟
}
// 最小缓存TTL默认值5分钟
if config.DNS.MinCacheTTL == 0 {
config.DNS.MinCacheTTL = 5 // 默认5分钟
}
// 缓存文件路径固定为data/cache.json不再从配置文件读取
config.DNS.CacheFilePath = "data/cache.json"
// DNSSEC默认配置
config.DNS.EnableDNSSEC = true // 默认启用DNSSEC支持
// 如果未在配置文件中设置,默认启用DNSSEC支持
// json.Unmarshal会将未设置的布尔字段设为false所以我们需要显式检查
// 但由于这是一个新字段为了向后兼容我们保持默认值为true
// 注意如果用户在配置文件中明确设置为false则使用false
if !config.DNS.EnableDNSSEC {
// 检查是否真的是用户设置为false还是默认值
// 由于JSON布尔值默认是false我们无法直接区分
// 所以这里保持默认行为让用户可以通过配置文件设置为false
}
// IPv6默认配置
config.DNS.EnableIPv6 = true // 默认启用IPv6解析
// 注意我们不能直接设置默认值因为JSON布尔值默认是false
// 我们需要检查配置文件中是否真的设置了这个字段
// 由于我们无法直接区分这里保持现状让用户可以通过配置文件设置为false
// DNSSEC专用服务器默认配置
if len(config.DNS.DNSSECUpstreamDNS) == 0 {
config.DNS.DNSSECUpstreamDNS = []string{"8.8.8.8:53", "1.1.1.1:53"}
@@ -112,6 +151,14 @@ func LoadConfig(path string) (*Config, error) {
if config.DNS.QueryMode == "" {
config.DNS.QueryMode = "parallel" // 默认使用并行请求模式
}
// 查询超时默认配置(毫秒)
if config.DNS.QueryTimeout == 0 {
config.DNS.QueryTimeout = 500 // 默认超时时间为500ms
}
// 快速返回机制默认配置
if config.DNS.EnableFastReturn == false {
config.DNS.EnableFastReturn = true // 默认启用快速返回机制
}
// 域名特定DNS服务器配置默认值
if config.DNS.DomainSpecificDNS == nil {
config.DNS.DomainSpecificDNS = make(DomainSpecificDNS) // 默认为空映射
@@ -140,6 +187,13 @@ func LoadConfig(path string) (*Config, error) {
config.Shield.StatsSaveInterval = 300 // 默认5分钟保存一次
}
// GFWList默认配置
if config.GFWList.IP == "" {
config.GFWList.IP = "127.0.0.1" // 默认GFWList解析目标IP为127.0.0.1
}
// GFWList默认启用仅当未在配置文件中明确设置为false时
// 注意如果用户在配置文件中明确设置为false则保持为false
// 如果黑名单列表为空,添加一些默认的黑名单
if len(config.Shield.Blacklists) == 0 {
config.Shield.Blacklists = []BlacklistEntry{