# 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)
- 修复搜索和过滤功能
- 优化查询日志显示
- 修复样式间隔问题
- 添加查询日志刷新按钮

## 致谢

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