更新版本到2.0
This commit is contained in:
37
main.go
37
main.go
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user