# 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 ### 配置文件格式 配置文件使用JSON格式,位于`config.json`: ```json { "ListenPort": 53, "HTTPPort": 8080, "StatsFile": "data/stats.json", "SaveInterval": 300, "MaxQueryLogs": 1000 } ``` ## 使用方法 ### 启动服务器 ```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) - 修复搜索和过滤功能 - 优化查询日志显示 - 修复样式间隔问题 - 添加查询日志刷新按钮 ## 致谢 感谢所有为该项目做出贡献的开源项目和开发者!