更新版本到2.0
This commit is contained in:
@@ -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"` // 缓存大小限制(MB),0表示不缓存
|
||||
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{
|
||||
|
||||
Reference in New Issue
Block a user