更新版本到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

37
main.go
View File

@@ -22,6 +22,7 @@ import (
"dns-server/config"
"dns-server/dns"
"dns-server/gfw"
"dns-server/http"
"dns-server/logger"
"dns-server/shield"
@@ -82,6 +83,11 @@ func createDefaultConfig(configFile string) error {
"customBlockIP": "",
"statsSaveInterval": 60
},
"gfwList": {
"ip": "127.0.0.1",
"content": "./data/gfwlist.txt",
"enabled": true
},
"log": {
"level": "debug",
"maxSize": 100,
@@ -129,6 +135,13 @@ func createRequiredFiles(cfg *config.Config) error {
}
}
// 创建GFWList文件
if _, err := os.Stat("data/gfwlist.txt"); os.IsNotExist(err) {
if err := os.WriteFile("data/gfwlist.txt", []byte("# GFWList规则文件\n# 格式:每行一条规则\n# 例如www.google.com\n"), 0644); err != nil {
return fmt.Errorf("创建GFWList文件失败: %w", err)
}
}
// 创建统计数据文件
if _, err := os.Stat("data/stats.json"); os.IsNotExist(err) {
if err := os.WriteFile("data/stats.json", []byte("{}"), 0644); err != nil {
@@ -184,12 +197,18 @@ func main() {
// 初始化屏蔽管理系统
shieldManager := shield.NewShieldManager(&cfg.Shield)
if err := shieldManager.LoadRules(); err != nil {
logger.Error("加载屏蔽规则失败", "error", err)
if err := shieldManager.LoadLocalRulesOnly(); err != nil {
logger.Error("加载本地屏蔽规则失败", "error", err)
}
// 初始化GFWList管理系统
gfwManager := gfw.NewGFWListManager(&cfg.GFWList)
if err := gfwManager.LoadRules(); err != nil {
logger.Error("加载GFWList规则失败", "error", err)
}
// 启动DNS服务器
dnsServer := dns.NewServer(&cfg.DNS, &cfg.Shield, shieldManager)
dnsServer := dns.NewServer(&cfg.DNS, &cfg.Shield, shieldManager, &cfg.GFWList, gfwManager)
go func() {
if err := dnsServer.Start(); err != nil {
logger.Error("DNS服务器启动失败", "error", err)
@@ -198,13 +217,23 @@ func main() {
}()
// 启动HTTP控制台服务器
httpServer := http.NewServer(cfg, dnsServer, shieldManager)
httpServer := http.NewServer(cfg, dnsServer, shieldManager, gfwManager)
go func() {
if err := httpServer.Start(); err != nil {
logger.Error("HTTP控制台服务器启动失败", "error", err)
}
}()
// 异步加载远程规则
go func() {
logger.Info("开始异步加载远程屏蔽规则")
if err := shieldManager.LoadRules(); err != nil {
logger.Error("异步加载远程屏蔽规则失败", "error", err)
} else {
logger.Info("远程屏蔽规则异步加载完成")
}
}()
// 启动定时更新任务
go shieldManager.StartAutoUpdate()