解决请求DNS解析的客户端数据未持久化的问题

This commit is contained in:
Alex Yang
2025-11-28 18:02:36 +08:00
parent ec1e051252
commit ca4a32422c
13 changed files with 700348 additions and 0 deletions

7
data/hosts.txt Normal file
View File

@@ -0,0 +1,7 @@
# DNS Server Hosts File
# Generated by DNS Server
127.0.0.1 localhost
::1 localhost
127.0.0.1 example.com

3
data/rules.txt Normal file
View File

@@ -0,0 +1,3 @@
/example.com/
/adjust.com/
/adjust.c/

5
data/shield_stats.json Normal file
View File

@@ -0,0 +1,5 @@
{
"blockedDomainsCount": {},
"resolvedDomainsCount": {},
"lastSaved": "2025-11-28T18:01:32.204427496+08:00"
}

3282
data/stats.json Normal file

File diff suppressed because it is too large Load Diff

BIN
dns-server Executable file

Binary file not shown.

View File

@@ -169,6 +169,9 @@ func (s *Server) Start() error {
// 启动CPU使用率监控
go s.startCpuUsageMonitor()
// 启动自动保存功能
go s.startAutoSave()
// 启动UDP服务
go func() {
logger.Info(fmt.Sprintf("DNS UDP服务器启动监听端口: %d", s.config.Port))
@@ -764,6 +767,13 @@ func (s *Server) loadStatsData() {
}
s.monthlyStatsMutex.Unlock()
// 加载客户端统计数据
s.clientStatsMutex.Lock()
if statsData.ClientStats != nil {
s.clientStats = statsData.ClientStats
}
s.clientStatsMutex.Unlock()
logger.Info("统计数据加载成功")
}
@@ -823,6 +833,14 @@ func (s *Server) saveStatsData() {
}
s.monthlyStatsMutex.RUnlock()
// 复制客户端统计数据
s.clientStatsMutex.RLock()
statsData.ClientStats = make(map[string]*ClientStats)
for k, v := range s.clientStats {
statsData.ClientStats[k] = v
}
s.clientStatsMutex.RUnlock()
// 序列化数据
jsonData, err := json.MarshalIndent(statsData, "", " ")
if err != nil {

View File

@@ -118643,3 +118643,74 @@ time="2025-11-28T17:57:08+08:00" level=error msg="发送WebSocket消息失败: w
time="2025-11-28T17:57:26+08:00" level=debug msg="接收到DNS查询" client="10.35.10.11:46049" domain=api-access.pangolin-sdk-toutiao.com type=A
time="2025-11-28T17:57:26+08:00" level=debug msg="DNS查询成功" domain=api-access.pangolin-sdk-toutiao.com rtt=3.970532ms server="223.5.5.5:53"
time="2025-11-28T17:57:41+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T17:58:41+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T17:59:41+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T18:00:36+08:00" level=info msg="统计数据保存成功"
time="2025-11-28T18:00:36+08:00" level=info msg="DNS服务器已停止"
time="2025-11-28T18:00:36+08:00" level=error msg="HTTP控制台服务器启动失败" error="http: Server closed"
time="2025-11-28T18:00:36+08:00" level=info msg="HTTP控制台服务器已停止"
time="2025-11-28T18:00:36+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T18:00:36+08:00" level=info msg="规则自动更新已停止"
time="2025-11-28T18:00:36+08:00" level=warning msg="日志系统已关闭"
time="2025-11-28T18:01:10+08:00" level=debug msg="尝试加载Shield统计数据" file=/root/dns/data/shield_stats.json
time="2025-11-28T18:01:10+08:00" level=info msg="Shield计数数据加载成功" blocked_entries=0 resolved_entries=0
time="2025-11-28T18:01:10+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt"
time="2025-11-28T18:01:11+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt"
time="2025-11-28T18:01:11+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt"
time="2025-11-28T18:01:12+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt"
time="2025-11-28T18:01:12+08:00" level=error msg="获取远程规则失败" error="远程服务器返回错误状态码: 404" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/china.txt"
time="2025-11-28T18:01:12+08:00" level=info msg="规则加载完成,域名规则: 177714, 排除规则: 1187, 正则规则: 947, hosts规则: 2"
time="2025-11-28T18:01:12+08:00" level=info msg="统计数据加载成功"
time="2025-11-28T18:01:12+08:00" level=info msg="DNS服务器已启动监听端口: 53"
time="2025-11-28T18:01:12+08:00" level=info msg="HTTP控制台已启动监听端口: 8080"
time="2025-11-28T18:01:12+08:00" level=info msg="DNS TCP服务器启动监听端口: 53"
time="2025-11-28T18:01:12+08:00" level=info msg="规则自动更新已启动" interval=3600
time="2025-11-28T18:01:12+08:00" level=info msg="启动统计数据自动保存功能" file=data/stats.json interval=300
time="2025-11-28T18:01:12+08:00" level=info msg="启动Shield计数数据自动保存功能" file=./data/shield_stats.json interval=60
time="2025-11-28T18:01:12+08:00" level=info msg="DNS UDP服务器启动监听端口: 53"
time="2025-11-28T18:01:12+08:00" level=info msg="HTTP控制台服务器启动监听地址: 0.0.0.0:8080"
time="2025-11-28T18:01:12+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T18:01:14+08:00" level=info msg="新WebSocket客户端连接当前连接数: 1"
time="2025-11-28T18:01:17+08:00" level=info msg="新WebSocket客户端连接当前连接数: 2"
time="2025-11-28T18:01:21+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:59812" domain=baidu.com.amazehome.xyz type=A
time="2025-11-28T18:01:21+08:00" level=debug msg="DNS查询成功" domain=baidu.com.amazehome.xyz rtt=22.252353ms server="223.5.5.5:53"
time="2025-11-28T18:01:21+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:59813" domain=baidu.com.amazehome.xyz type=AAAA
time="2025-11-28T18:01:21+08:00" level=debug msg="DNS查询成功" domain=baidu.com.amazehome.xyz rtt=22.886581ms server="223.5.5.5:53"
time="2025-11-28T18:01:21+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:59814" domain=baidu.com type=A
time="2025-11-28T18:01:21+08:00" level=debug msg="DNS查询成功" domain=baidu.com rtt=6.296429ms server="223.5.5.5:53"
time="2025-11-28T18:01:21+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:59815" domain=baidu.com type=AAAA
time="2025-11-28T18:01:21+08:00" level=debug msg="DNS查询成功" domain=baidu.com rtt=5.476696ms server="223.5.5.5:53"
time="2025-11-28T18:01:23+08:00" level=info msg="统计数据保存成功"
time="2025-11-28T18:01:23+08:00" level=info msg="DNS服务器已停止"
time="2025-11-28T18:01:23+08:00" level=error msg="HTTP控制台服务器启动失败" error="http: Server closed"
time="2025-11-28T18:01:23+08:00" level=info msg="HTTP控制台服务器已停止"
time="2025-11-28T18:01:23+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T18:01:23+08:00" level=info msg="规则自动更新已停止"
time="2025-11-28T18:01:23+08:00" level=warning msg="日志系统已关闭"
time="2025-11-28T18:01:30+08:00" level=debug msg="尝试加载Shield统计数据" file=/root/dns/data/shield_stats.json
time="2025-11-28T18:01:30+08:00" level=info msg="Shield计数数据加载成功" blocked_entries=0 resolved_entries=0
time="2025-11-28T18:01:30+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt"
time="2025-11-28T18:01:30+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt"
time="2025-11-28T18:01:31+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt"
time="2025-11-28T18:01:32+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt"
time="2025-11-28T18:01:32+08:00" level=error msg="获取远程规则失败" error="远程服务器返回错误状态码: 404" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/china.txt"
time="2025-11-28T18:01:32+08:00" level=info msg="规则加载完成,域名规则: 177714, 排除规则: 1187, 正则规则: 947, hosts规则: 2"
time="2025-11-28T18:01:32+08:00" level=info msg="统计数据加载成功"
time="2025-11-28T18:01:32+08:00" level=info msg="DNS服务器已启动监听端口: 53"
time="2025-11-28T18:01:32+08:00" level=info msg="HTTP控制台已启动监听端口: 8080"
time="2025-11-28T18:01:32+08:00" level=info msg="DNS TCP服务器启动监听端口: 53"
time="2025-11-28T18:01:32+08:00" level=info msg="启动统计数据自动保存功能" file=data/stats.json interval=300
time="2025-11-28T18:01:32+08:00" level=info msg="规则自动更新已启动" interval=3600
time="2025-11-28T18:01:32+08:00" level=info msg="HTTP控制台服务器启动监听地址: 0.0.0.0:8080"
time="2025-11-28T18:01:32+08:00" level=info msg="DNS UDP服务器启动监听端口: 53"
time="2025-11-28T18:01:32+08:00" level=info msg="启动Shield计数数据自动保存功能" file=./data/shield_stats.json interval=60
time="2025-11-28T18:01:32+08:00" level=info msg="Shield计数数据保存成功" blocked_entries=0 file=/root/dns/data/shield_stats.json resolved_entries=0
time="2025-11-28T18:01:33+08:00" level=info msg="新WebSocket客户端连接当前连接数: 1"
time="2025-11-28T18:01:40+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:56516" domain=baidu.com.amazehome.xyz type=A
time="2025-11-28T18:01:40+08:00" level=debug msg="DNS查询成功" domain=baidu.com.amazehome.xyz rtt=6.712561ms server="223.5.5.5:53"
time="2025-11-28T18:01:40+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:56517" domain=baidu.com.amazehome.xyz type=AAAA
time="2025-11-28T18:01:40+08:00" level=debug msg="DNS查询成功" domain=baidu.com.amazehome.xyz rtt=14.68182ms server="223.6.6.6:53"
time="2025-11-28T18:01:40+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:56518" domain=baidu.com type=A
time="2025-11-28T18:01:40+08:00" level=debug msg="DNS查询成功" domain=baidu.com rtt=6.011629ms server="223.5.5.5:53"
time="2025-11-28T18:01:40+08:00" level=debug msg="接收到DNS查询" client="10.35.10.78:56519" domain=baidu.com type=AAAA
time="2025-11-28T18:01:40+08:00" level=debug msg="DNS查询成功" domain=baidu.com rtt=4.845428ms server="223.5.5.5:53"

BIN
output/dns-server Executable file

Binary file not shown.