2026-04-12 21:47:40 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:47:40 +08:00
2026-04-05 03:19:53 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:47:40 +08:00
2026-04-03 10:04:07 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:40:22 +08:00
2026-04-12 21:40:22 +08:00
2026-04-03 10:29:11 +08:00
2026-04-03 10:29:11 +08:00
2026-04-01 12:22:55 +08:00
2026-04-12 21:47:40 +08:00

DNS服务器项目

项目简介

这是一个基于Go语言开发的DNS服务器,具有屏蔽规则管理、查询日志记录和统计、Web控制台等功能。该服务器可以拦截特定域名的DNS查询,提供实时的查询统计和日志记录,并通过Web控制台进行管理。

技术栈

  • Go语言
  • Gorilla Mux (HTTP路由)
  • Gorilla WebSocket (实时通信)
  • Chart.js (数据可视化)
  • Tailwind CSS (样式框架)

功能特性

1. DNS查询处理

  • 支持UDP和TCP协议
  • 支持常见DNS查询类型(A, AAAA, CNAME, MX, NS, TXT等)
  • 高性能查询处理

2. 屏蔽规则管理

  • 支持域名规则和正则表达式规则
  • 支持规则例外
  • 支持远程规则列表
  • 支持自定义规则管理

3. 查询日志记录和统计

  • 实时记录DNS查询日志
  • 支持日志持久化到文件
  • 提供查询统计和趋势分析
  • 支持日志搜索和过滤
  • 支持日志排序

4. Web 控制台

  • 直观的仪表盘
  • 实时统计数据
  • 图表可视化
  • 规则管理界面
  • 查询日志详情页面
  • 支持分页和自定义记录数量

5. 域名信息管理

  • 支持远程域名信息列表
  • 支持威胁域名数据库
  • 支持跟踪器域名列表
  • 异步加载和自动更新
  • 内存 + 文件双重缓存
  • 集成到日志详情查询

5. WebSocket实时更新

  • 实时更新统计数据
  • 实时更新图表
  • 支持连接状态管理

6. 查询日志持久化

  • 将查询日志保存到querylog.json文件
  • 定期自动保存
  • 服务器重启后自动加载

安装步骤

环境要求

  • Go 1.18或更高版本
  • Linux或Windows操作系统

安装依赖

go mod download

编译和运行

# 编译
go build -o dns-server main.go

# 运行
./dns-server

配置说明

主要配置项

  • ListenPort: DNS服务器监听端口,默认53
  • HTTPPort: HTTP控制台监听端口,默认8081
  • StatsFile: 统计数据保存文件,默认data/stats.json
  • SaveInterval: 自动保存间隔(秒),默认300
  • MaxQueryLogs: 最大保存日志数量,默认1000

配置文件格式

配置文件使用INI格式,位于config.ini

# DNS服务器配置文件
# 格式:INI格式,使用#注释

[dns]
# DNS服务器监听端口
port = 53
# 上游DNS服务器列表,逗号分隔
upstreamDNS = 223.5.5.5:53, 223.6.6.6:53
# DNSSEC专用服务器列表,逗号分隔
dnssecUpstreamDNS = 8.8.8.8:53, 1.1.1.1:53
# 数据保存间隔(秒)
saveInterval = 300
# DNS缓存过期时间(分钟)
cacheTTL = 30
# 是否启用DNSSEC支持
enableDNSSEC = true
# 查询模式:parallel(并行请求)、fastest-ip(最快的IP地址)
queryMode = parallel
# 查询超时时间(毫秒)
queryTimeout = 5000
# 是否启用快速返回机制
enableFastReturn = true
# 不验证DNSSEC的域名模式列表,逗号分隔
noDNSSECDomains =
# 是否启用IPv6解析(AAAA记录)
enableIPv6 = false
# 缓存模式:memory(内存缓存)、file(文件缓存)
cacheMode = memory
# 缓存大小限制(MB
cacheSize = 100
# 最大缓存TTL(分钟)
maxCacheTTL = 120
# 最小缓存TTL(分钟)
minCacheTTL = 5

[http]
# HTTP控制台监听端口
port = 8080
# HTTP控制台监听地址
host = 0.0.0.0
# 是否启用API
enableAPI = true
# 登录用户名
username = admin
# 登录密码
password = admin

[shield]
# 屏蔽规则更新间隔(秒)
updateInterval = 3600
# 屏蔽方法: NXDOMAIN, refused, emptyIP, customIP
blockMethod = NXDOMAIN
# 自定义屏蔽IP,当BlockMethod为"customIP"时使用
customBlockIP =
# 计数数据保存间隔(秒)
statsSaveInterval = 60

# 黑名单配置
# 格式:blacklist_名称 = URL,enabled
blacklist_AdGuard_DNS_filter = https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt,true
blacklist_Adaway_Default_Blocklist = https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt,true
blacklist_CHN_anti_AD = https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt,true
blacklist_My_GitHub_Rules = https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt,true

[gfwList]
# GFWList 域名解析的目标 IP 地址
ip = 127.0.0.1
# GFWList 规则文件路径
content = ./data/gfwlist.txt
# 是否启用 GFWList 功能
enabled = true

[domainInfo]
# 域名信息列表更新间隔(秒)
updateInterval = 3600
# 是否启用自动更新
enableAutoUpdate = true
# 域名信息列表配置
# 格式:domainInfo_名称 = URL,类型,enabled
# 类型:domain-info(域名信息)、threat-database(威胁数据库)、tracker(跟踪器)
domainInfo_域名信息列表 = https://gitea.amazehome.xyz/AMAZEHOME/domain-info/raw/branch/main/domains/domain-info.json,domain-info,true
domainInfo_威胁数据库 = https://gitea.amazehome.xyz/AMAZEHOME/domain-info/src/branch/main/threats/threats-database.csv,threat-database,true
domainInfo_跟踪器列表 = https://gitea.amazehome.xyz/AMAZEHOME/domain-info/raw/branch/main/tracker/trackers.json,tracker,true

[log]
# 日志级别:debug, info, warn, error
level = debug
# 日志文件最大大小(MB
maxSize = 100
# 日志文件最大备份数
maxBackups = 10
# 日志文件最大保留天数
maxAge = 30

使用方法

启动服务器

./dns-server

访问Web控制台

在浏览器中访问:

http://localhost:8081

管理屏蔽规则

  1. 登录Web控制台
  2. 点击左侧菜单中的"屏蔽管理"
  3. 在"自定义规则管理"中添加或删除规则
  4. 在"远程黑名单管理"中添加或删除远程规则列表

查看查询日志

  1. 登录Web控制台
  2. 点击左侧菜单中的"查询日志"
  3. 查看日志统计和趋势
  4. 使用搜索和过滤功能查找特定日志
  5. 点击列头进行排序
  6. 使用刷新按钮手动刷新日志

API文档

主要API端点

1. DNS查询

GET /api/query?domain=example.com          # 查询域名屏蔽状态
GET /api/domains/{domain}                 # RESTful风格域名查询

2. 屏蔽规则管理

GET /api/shield                           # 获取Shield配置
POST /api/shield                          # 添加屏蔽规则
GET /api/shield/localrules                # 获取本地规则
GET /api/shield/remoterules               # 获取远程规则
GET /api/shield/hosts                     # 获取hosts列表
POST /api/shield/hosts                    # 添加hosts条目
DELETE /api/shield/hosts                  # 删除hosts条目
GET /api/shield/blacklists                # 获取黑名单列表
POST /api/shield/blacklists               # 添加黑名单
PUT /api/shield/blacklists/:name          # 更新黑名单
DELETE /api/shield/blacklists/:name       # 删除黑名单

3. 统计信息

GET /api/stats                            # 获取系统统计信息
GET /api/top-blocked                      # 获取最常屏蔽域名
GET /api/top-resolved                     # 获取最常解析域名
GET /api/top-clients                      # 获取TOP客户端
GET /api/top-domains                      # 获取TOP域名
GET /api/recent-blocked                   # 获取最近屏蔽域名
GET /api/hourly-stats                     # 获取24小时统计
GET /api/daily-stats                      # 获取每日统计
GET /api/monthly-stats                    # 获取每月统计
GET /api/query/type                       # 获取查询类型统计

4. 查询日志

GET /api/logs/stats                       # 获取日志统计
GET /api/logs/query                       # 查询日志
GET /api/logs/count                       # 获取日志总数

5. 系统管理

GET /api/status                           # 获取系统状态
GET /api/config                           # 获取系统配置
POST /api/config                          # 更新系统配置
POST /api/config/restart                  # 重启服务

6. 认证管理

POST /api/login                           # 用户登录
POST /api/logout                          # 用户注销
POST /api/change-password                 # 修改密码

7. 威胁管理

GET /api/threat?domain=example.com        # 查询威胁域名信息
POST /api/threat/batch                    # 批量查询威胁域名
GET /api/alert                            # 获取威胁告警列表
POST /api/alert/resolve                   # 解决威胁告警

8. 域名信息管理

GET /api/domain-info                      # 获取域名信息列表
POST /api/domain/info                     # 查询域名详细信息

9. WebSocket

ws://localhost:8081/ws/stats              # 实时统计数据

开发说明

项目结构

/root/dnsbak/
├── config/          # 配置文件
├── data/            # 数据文件
├── dns/             # DNS服务器相关代码
├── http/            # HTTP服务器相关代码
├── shield/          # 屏蔽规则管理
├── static/          # 静态资源
│   ├── css/         # CSS文件
│   ├── js/          # JavaScript文件
│   └── index.html   # 主页面
├── main.go          # 入口文件
├── go.mod           # Go模块文件
└── go.sum           # Go依赖校验文件

开发流程

  1. 克隆仓库
  2. 安装依赖
  3. 开发功能
  4. 编译和测试
  5. 提交代码

测试

go test ./...

许可证

MIT License

贡献

欢迎提交Issue和Pull Request

联系方式

如有问题或建议,请通过以下方式联系:

更新日志

v1.0.2 (2026-04-12)

  • 更新API文档,添加完整的API端点列表
  • 更新swagger.json文件,提升版本至2.2.0
  • 完善威胁管理和域名信息管理API
  • 优化系统统计和日志查询功能

v1.0.1 (2025-11-30)

  • 修复搜索和过滤功能
  • 优化查询日志显示
  • 修复样式间隔问题
  • 添加查询日志刷新按钮

v1.0.0 (2025-11-30)

  • 初始版本
  • 实现基本DNS服务器功能
  • 实现屏蔽规则管理
  • 实现查询日志记录和统计
  • 实现Web控制台
  • 实现WebSocket实时更新
  • 实现查询日志持久化

致谢

感谢所有为该项目做出贡献的开源项目和开发者!

S
Description
No description provided
Readme 385 MiB
Languages
HTML 68.2%
Go 31.8%