# 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. WebSocket实时更新 - 实时更新统计数据 - 实时更新图表 - 支持连接状态管理 ### 6. 查询日志持久化 - 将查询日志保存到`querylog.json`文件 - 定期自动保存 - 服务器重启后自动加载 ## 安装步骤 ### 环境要求 - Go 1.18或更高版本 - Linux或Windows操作系统 ### 安装依赖 ```bash go mod download ``` ### 编译和运行 ```bash # 编译 go build -o dns-server main.go # 运行 ./dns-server ``` ## 配置说明 ### 主要配置项 - `ListenPort`: DNS服务器监听端口,默认53 - `HTTPPort`: HTTP控制台监听端口,默认8080 - `StatsFile`: 统计数据保存文件,默认`data/stats.json` - `SaveInterval`: 自动保存间隔(秒),默认300 - `MaxQueryLogs`: 最大保存日志数量,默认1000 ### 配置文件格式 配置文件使用INI格式,位于`config.ini`: ```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 [log] # 日志级别:debug, info, warn, error level = debug # 日志文件最大大小(MB) maxSize = 100 # 日志文件最大备份数 maxBackups = 10 # 日志文件最大保留天数 maxAge = 30 ``` ## 使用方法 ### 启动服务器 ```bash ./dns-server ``` ### 访问Web控制台 在浏览器中访问: ``` http://localhost:8080 ``` ### 管理屏蔽规则 1. 登录Web控制台 2. 点击左侧菜单中的"屏蔽管理" 3. 在"自定义规则管理"中添加或删除规则 4. 在"远程黑名单管理"中添加或删除远程规则列表 ### 查看查询日志 1. 登录Web控制台 2. 点击左侧菜单中的"查询日志" 3. 查看日志统计和趋势 4. 使用搜索和过滤功能查找特定日志 5. 点击列头进行排序 6. 使用刷新按钮手动刷新日志 ## API文档 ### 主要API端点 #### 1. DNS查询 ``` GET /api/query?domain=example.com ``` #### 2. 屏蔽规则管理 ``` GET /api/shield/rules POST /api/shield/rules DELETE /api/shield/rules/:id ``` #### 3. Hosts管理 ``` GET /api/hosts POST /api/hosts DELETE /api/hosts/:id ``` #### 4. 查询日志 ``` GET /api/logs/stats GET /api/logs/query GET /api/logs/count ``` #### 5. WebSocket ``` ws://localhost:8080/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. 提交代码 ### 测试 ```bash go test ./... ``` ## 许可证 MIT License ## 贡献 欢迎提交Issue和Pull Request! ## 联系方式 如有问题或建议,请通过以下方式联系: - Email: wxf26054@live.cn - Git: https://gitea.amazehome.xyz/AMAZEHOME/dns-server ## 更新日志 ### v1.0.0 (2025-11-30) - 初始版本 - 实现基本DNS服务器功能 - 实现屏蔽规则管理 - 实现查询日志记录和统计 - 实现Web控制台 - 实现WebSocket实时更新 - 实现查询日志持久化 ### v1.0.1 (2025-11-30) - 修复搜索和过滤功能 - 优化查询日志显示 - 修复样式间隔问题 - 添加查询日志刷新按钮 ## 致谢 感谢所有为该项目做出贡献的开源项目和开发者!