diff --git a/README.md b/README.md new file mode 100644 index 0000000..4090699 --- /dev/null +++ b/README.md @@ -0,0 +1,234 @@ +# 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) +- 修复搜索和过滤功能 +- 优化查询日志显示 +- 修复样式间隔问题 +- 添加查询日志刷新按钮 + +## 致谢 + +感谢所有为该项目做出贡献的开源项目和开发者! diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 73b8109..0000000 --- a/Readme.md +++ /dev/null @@ -1,81 +0,0 @@ -# DNS服务器项目介绍 -## 项目概述 -这是一个基于Go语言开发的高性能DNS服务器,具备域名屏蔽、Hosts管理、统计分析和远程规则管理等功能。服务器支持通过Web界面进行管理配置,同时能够自动更新和缓存远程规则列表。 - -## 技术架构 -### 核心组件 -1. DNS服务模块 ( `server.go` ) - - 基于 github.com/miekg/dns 库实现高性能DNS查询处理 - - 支持配置上游DNS服务器进行递归查询 - - 实现域名屏蔽、统计数据收集等核心功能 - -2. 屏蔽管理系统 ( `manager.go` ) - - 管理本地和远程屏蔽规则 - - 支持规则缓存、自动更新和统计 - - 实现域名和正则表达式规则的解析和匹配 - -3. HTTP控制台 ( `server.go` ) - - 提供Web管理界面 - - 实现REST API用于配置管理和数据查询 - -4. 配置管理 ( `config.go` ) - - 定义配置结构和加载功能 - - 支持JSON格式配置文件 - -## 主要功能特性 -### 1. 域名屏蔽系统 -- 支持本地规则文件和远程规则URL -- 多种屏蔽方式:NXDOMAIN、refused、emptyIP、customIP -- 支持域名精确匹配和正则表达式匹配 -- 远程规则自动缓存和更新机制 -### 2. Hosts管理 -- 支持自定义Hosts映射 -- 提供Web界面管理Hosts条目 -- 自动保存Hosts配置 -### 3. 统计分析功能 -- 记录屏蔽域名统计信息 -- 记录解析域名统计信息 -- 提供按小时统计的屏蔽数据 -- 支持查询最常屏蔽和解析的域名 -### 4. 远程规则管理 -- 支持添加多个远程规则URL -- 自动定期更新远程规则 -- 本地缓存机制确保规则可用性 -- Web界面可视化管理 -### 5. 管理界面 -- 提供直观的Web控制台 -- 支持查看服务器状态和统计信息 -- 规则管理和配置修改 -- DNS查询测试工具 -## 项目结构 -``` -/root/dns/ -├── config/          # 配置管理 -├── data/            # 数据目录(包含缓存和统计) -│   └── remote_rules/ # 远程规则缓存 -├── dns/             # DNS服务器核心 -├── http/            # HTTP控制台 -├── logger/          # 日志系统 -├── shield/          # 屏蔽规则管理 -├── static/          # 静态Web文件 -├── main.go          # 程序入口 -└── config.json      # 配置文件 -``` -## 配置项说明 -主要配置文件 `config.json` 包含以下部分: - -- DNS配置 :端口、上游DNS服务器、超时设置等 -- HTTP配置 :控制台端口、主机绑定等 -- 屏蔽配置 :规则文件路径、远程规则URL、更新间隔等 -- 日志配置 :日志文件路径、级别设置等 -## 使用场景 -1. 网络内容过滤(广告、恶意网站屏蔽) -2. 本地DNS缓存加速 -3. 企业/家庭网络DNS管理 -4. 开发测试环境DNS重定向 -## 技术栈 -- 语言 :Go -- DNS库 :github.com/miekg/dns -- 日志库 :github.com/sirupsen/logrus -- Web前端 :HTML/CSS/JavaScript -该DNS服务器具有高性能、功能全面、易于配置等特点,适用于需要精确控制DNS查询结果的各种网络环境。 \ No newline at end of file diff --git a/dns-server b/dns-server deleted file mode 100755 index 7cc04f8..0000000 Binary files a/dns-server and /dev/null differ diff --git a/static/index.html b/static/index.html index 9c54955..0219a95 100644 --- a/static/index.html +++ b/static/index.html @@ -931,7 +931,7 @@ - +
暂无查询日志
diff --git a/static/js/logs.js b/static/js/logs.js index 52c07b8..358e3ba 100644 --- a/static/js/logs.js +++ b/static/js/logs.js @@ -281,7 +281,7 @@ function updateLogsTable(logs) { // 显示空状态 const emptyRow = document.createElement('tr'); emptyRow.innerHTML = ` - +
暂无查询日志
@@ -359,8 +359,8 @@ function updateLogsTable(logs) {
${formattedDate}
${log.ClientIP} - -
${log.Domain}
+ +
${log.Domain}
类型: ${log.QueryType}, ${statusText}
${log.ResponseTime}ms