309 lines
6.7 KiB
Markdown
309 lines
6.7 KiB
Markdown
# 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)
|
||
- 修复搜索和过滤功能
|
||
- 优化查询日志显示
|
||
- 修复样式间隔问题
|
||
- 添加查询日志刷新按钮
|
||
|
||
## 致谢
|
||
|
||
感谢所有为该项目做出贡献的开源项目和开发者!
|