874 lines
18 KiB
Markdown
874 lines
18 KiB
Markdown
|
|
# DNS 管理 API 文档
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
本文档描述了 DNS 管理系统的 API 接口,包括 DNS 服务器、DNS 区域和 DNS 记录的增删改查操作。
|
|||
|
|
|
|||
|
|
## 基础信息
|
|||
|
|
|
|||
|
|
- 基础路径: `/dns`
|
|||
|
|
- 请求方法: POST
|
|||
|
|
- 认证: 需要在请求头中携带认证 token
|
|||
|
|
|
|||
|
|
## 常量定义
|
|||
|
|
|
|||
|
|
### DNS 服务器状态
|
|||
|
|
|
|||
|
|
| 值 | 说明 |
|
|||
|
|
|----|------|
|
|||
|
|
| 0 | 已停止 |
|
|||
|
|
| 1 | 运行中 |
|
|||
|
|
| 2 | 错误 |
|
|||
|
|
|
|||
|
|
### DNS 记录类型
|
|||
|
|
|
|||
|
|
| 值 | 类型 | 说明 |
|
|||
|
|
|----|------|------|
|
|||
|
|
| 1 | A | IPv4 地址记录 |
|
|||
|
|
| 28 | AAAA | IPv6 地址记录 |
|
|||
|
|
| 5 | CNAME | 别名记录 |
|
|||
|
|
| 15 | MX | 邮件交换记录 |
|
|||
|
|
| 2 | NS | 名称服务器记录 |
|
|||
|
|
| 6 | SOA | 起始授权记录 |
|
|||
|
|
| 16 | TXT | 文本记录 |
|
|||
|
|
| 33 | SRV | 服务位置记录 |
|
|||
|
|
|
|||
|
|
## DNS 服务器接口
|
|||
|
|
|
|||
|
|
### 1. 创建 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/create`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| name | string | 是 | DNS 服务器名称 |
|
|||
|
|
| port | uint | 否 | 监听端口,默认 53 |
|
|||
|
|
| listen_ip | string | 否 | 监听 IP,默认 0.0.0.0 |
|
|||
|
|
| upstream_dns | string | 否 | 上游 DNS 服务器,多个用逗号分隔 |
|
|||
|
|
| enable_recursion | bool | 否 | 是否启用递归查询 |
|
|||
|
|
| description | string | 否 | 描述 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "创建DNS服务器成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 0,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 获取 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/get`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 否 | DNS 服务器 ID,0 表示获取全部 |
|
|||
|
|
| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1,
|
|||
|
|
"get_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "获取DNS服务器成功",
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 0,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 更新 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/update`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | DNS 服务器 ID |
|
|||
|
|
| name | string | 否 | DNS 服务器名称 |
|
|||
|
|
| port | uint | 否 | 监听端口 |
|
|||
|
|
| listen_ip | string | 否 | 监听 IP |
|
|||
|
|
| upstream_dns | string | 否 | 上游 DNS 服务器 |
|
|||
|
|
| enable_recursion | bool | 否 | 是否启用递归查询 |
|
|||
|
|
| status | uint | 否 | 状态:0 停止,1 运行中,2 错误 |
|
|||
|
|
| description | string | 否 | 描述 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1,
|
|||
|
|
"name": "更新后的 DNS 服务器",
|
|||
|
|
"status": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "更新DNS服务器成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T01:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "更新后的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 1,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 删除 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/delete`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 否 | DNS 服务器 ID |
|
|||
|
|
| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1,
|
|||
|
|
"del_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "删除DNS服务器成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## DNS 区域接口
|
|||
|
|
|
|||
|
|
### 5. 创建 DNS 区域
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/zone/create`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | 所属 DNS 服务器 ID |
|
|||
|
|
| domain | string | 是 | 域名,如 example.com |
|
|||
|
|
| soa_mname | string | 否 | SOA 记录的主域名服务器 |
|
|||
|
|
| soa_rname | string | 否 | SOA 记录的管理员邮箱 |
|
|||
|
|
| soa_serial | uint | 否 | SOA 记录的序列号,默认 1 |
|
|||
|
|
| soa_refresh | uint | 否 | SOA 记录的刷新时间(秒),默认 86400 |
|
|||
|
|
| soa_retry | uint | 否 | SOA 记录的重试时间(秒),默认 7200 |
|
|||
|
|
| soa_expire | uint | 否 | SOA 记录的过期时间(秒),默认 3600000 |
|
|||
|
|
| soa_minimum | uint | 否 | SOA 记录的最小 TTL(秒),默认 3600 |
|
|||
|
|
| ttl | uint | 否 | 默认 TTL(秒),默认 3600 |
|
|||
|
|
| description | string | 否 | 描述 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1,
|
|||
|
|
"domain": "example.com",
|
|||
|
|
"soa_mname": "ns1.example.com",
|
|||
|
|
"soa_rname": "admin.example.com",
|
|||
|
|
"description": "示例域名"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "创建DNS区域成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"server_id": 1,
|
|||
|
|
"domain": "example.com",
|
|||
|
|
"soa_mname": "ns1.example.com",
|
|||
|
|
"soa_rname": "admin.example.com",
|
|||
|
|
"soa_serial": 1,
|
|||
|
|
"soa_refresh": 86400,
|
|||
|
|
"soa_retry": 7200,
|
|||
|
|
"soa_expire": 3600000,
|
|||
|
|
"soa_minimum": 3600,
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"description": "示例域名"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 获取 DNS 区域
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/zone/get`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| zone_id | uint | 否 | Zone ID,0 表示获取全部 |
|
|||
|
|
| server_id | uint | 否 | DNS 服务器 ID,用于过滤 |
|
|||
|
|
| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"get_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "获取DNS区域成功",
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"server_id": 1,
|
|||
|
|
"domain": "example.com",
|
|||
|
|
"soa_mname": "ns1.example.com",
|
|||
|
|
"soa_rname": "admin.example.com",
|
|||
|
|
"soa_serial": 1,
|
|||
|
|
"soa_refresh": 86400,
|
|||
|
|
"soa_retry": 7200,
|
|||
|
|
"soa_expire": 3600000,
|
|||
|
|
"soa_minimum": 3600,
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"description": "示例域名"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 7. 更新 DNS 区域
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/zone/update`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| zone_id | uint | 是 | Zone ID |
|
|||
|
|
| domain | string | 否 | 域名 |
|
|||
|
|
| soa_mname | string | 否 | SOA 记录的主域名服务器 |
|
|||
|
|
| soa_rname | string | 否 | SOA 记录的管理员邮箱 |
|
|||
|
|
| soa_serial | uint | 否 | SOA 记录的序列号 |
|
|||
|
|
| soa_refresh | uint | 否 | SOA 记录的刷新时间(秒) |
|
|||
|
|
| soa_retry | uint | 否 | SOA 记录的重试时间(秒) |
|
|||
|
|
| soa_expire | uint | 否 | SOA 记录的过期时间(秒) |
|
|||
|
|
| soa_minimum | uint | 否 | SOA 记录的最小 TTL(秒) |
|
|||
|
|
| ttl | uint | 否 | 默认 TTL(秒) |
|
|||
|
|
| description | string | 否 | 描述 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"description": "更新后的描述"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "更新DNS区域成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T01:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"server_id": 1,
|
|||
|
|
"domain": "example.com",
|
|||
|
|
"soa_mname": "ns1.example.com",
|
|||
|
|
"soa_rname": "admin.example.com",
|
|||
|
|
"soa_serial": 1,
|
|||
|
|
"soa_refresh": 86400,
|
|||
|
|
"soa_retry": 7200,
|
|||
|
|
"soa_expire": 3600000,
|
|||
|
|
"soa_minimum": 3600,
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"description": "更新后的描述"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 8. 删除 DNS 区域
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/zone/delete`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| zone_id | uint | 否 | Zone ID |
|
|||
|
|
| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"del_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "删除DNS区域成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## DNS 记录接口
|
|||
|
|
|
|||
|
|
### 9. 创建 DNS 记录
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/record/create`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| zone_id | uint | 是 | 所属 Zone ID |
|
|||
|
|
| name | string | 是 | 记录名称,如 www 或 @ |
|
|||
|
|
| type | uint | 是 | 记录类型:1=A, 28=AAAA, 5=CNAME, 15=MX 等 |
|
|||
|
|
| value | string | 否 | 记录值 |
|
|||
|
|
| ttl | uint | 否 | TTL(秒),如果为 0 则使用 Zone 的默认 TTL |
|
|||
|
|
| priority | uint | 否 | 优先级(用于 MX、SRV 等记录) |
|
|||
|
|
| weight | uint | 否 | 权重(用于 SRV 记录) |
|
|||
|
|
| port | uint | 否 | 端口(用于 SRV 记录) |
|
|||
|
|
| target | string | 否 | 目标(用于 SRV 记录) |
|
|||
|
|
|
|||
|
|
**请求示例 - A 记录**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "www",
|
|||
|
|
"type": 1,
|
|||
|
|
"value": "192.168.1.1",
|
|||
|
|
"ttl": 3600
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求示例 - CNAME 记录**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "mail",
|
|||
|
|
"type": 5,
|
|||
|
|
"value": "mailserver.example.com",
|
|||
|
|
"ttl": 3600
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求示例 - MX 记录**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "@",
|
|||
|
|
"type": 15,
|
|||
|
|
"value": "mx1.example.com",
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"priority": 10
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "创建DNS记录成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "www",
|
|||
|
|
"type": 1,
|
|||
|
|
"value": "192.168.1.1",
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"priority": 0,
|
|||
|
|
"weight": 0,
|
|||
|
|
"port": 0,
|
|||
|
|
"target": ""
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 10. 获取 DNS 记录
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/record/get`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| record_id | uint | 否 | 记录 ID,0 表示获取全部 |
|
|||
|
|
| zone_id | uint | 否 | Zone ID,用于过滤 |
|
|||
|
|
| get_type | int | 否 | 获取类型:0 获取自己的,1 获取全部(管理员) |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"record_id": 1,
|
|||
|
|
"get_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "获取DNS记录成功",
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "www",
|
|||
|
|
"type": 1,
|
|||
|
|
"value": "192.168.1.1",
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"priority": 0,
|
|||
|
|
"weight": 0,
|
|||
|
|
"port": 0,
|
|||
|
|
"target": ""
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 11. 更新 DNS 记录
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/record/update`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| record_id | uint | 是 | 记录 ID |
|
|||
|
|
| name | string | 否 | 记录名称 |
|
|||
|
|
| type | uint | 否 | 记录类型 |
|
|||
|
|
| value | string | 否 | 记录值 |
|
|||
|
|
| ttl | uint | 否 | TTL(秒) |
|
|||
|
|
| priority | uint | 否 | 优先级 |
|
|||
|
|
| weight | uint | 否 | 权重 |
|
|||
|
|
| port | uint | 否 | 端口 |
|
|||
|
|
| target | string | 否 | 目标 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"record_id": 1,
|
|||
|
|
"value": "192.168.1.2"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "更新DNS记录成功",
|
|||
|
|
"data": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T01:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"zone_id": 1,
|
|||
|
|
"name": "www",
|
|||
|
|
"type": 1,
|
|||
|
|
"value": "192.168.1.2",
|
|||
|
|
"ttl": 3600,
|
|||
|
|
"priority": 0,
|
|||
|
|
"weight": 0,
|
|||
|
|
"port": 0,
|
|||
|
|
"target": ""
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 12. 删除 DNS 记录
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/record/delete`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| record_id | uint | 否 | 记录 ID |
|
|||
|
|
| del_type | uint | 是 | 删除类型:0 删除单条,1 删除所有 |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"record_id": 1,
|
|||
|
|
"del_type": 0
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "删除DNS记录成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## DNS 服务运行管理接口
|
|||
|
|
|
|||
|
|
### 13. 启动 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/start`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | DNS 服务器 ID |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "启动DNS服务器成功",
|
|||
|
|
"data": {
|
|||
|
|
"server_id": 1,
|
|||
|
|
"config": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 1,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
},
|
|||
|
|
"running": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 14. 停止 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/stop`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | DNS 服务器 ID |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "停止DNS服务器成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 15. 重启 DNS 服务器
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/restart`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | DNS 服务器 ID |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "重启DNS服务器成功",
|
|||
|
|
"data": {
|
|||
|
|
"server_id": 1,
|
|||
|
|
"config": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 1,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
},
|
|||
|
|
"running": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 16. 获取 DNS 服务器运行状态
|
|||
|
|
|
|||
|
|
**接口路径**: `/dns/server/status`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数 | 类型 | 必填 | 说明 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| server_id | uint | 是 | DNS 服务器 ID |
|
|||
|
|
|
|||
|
|
**请求示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"server_id": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应示例**:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 0,
|
|||
|
|
"message": "获取DNS服务器状态成功",
|
|||
|
|
"data": {
|
|||
|
|
"server_id": 1,
|
|||
|
|
"config": {
|
|||
|
|
"ID": 1,
|
|||
|
|
"CreatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"UpdatedAt": "2024-01-01T00:00:00Z",
|
|||
|
|
"DeletedAt": null,
|
|||
|
|
"user_id": 1,
|
|||
|
|
"name": "我的 DNS 服务器",
|
|||
|
|
"port": 53,
|
|||
|
|
"listen_ip": "0.0.0.0",
|
|||
|
|
"upstream_dns": "8.8.8.8,8.8.4.4",
|
|||
|
|
"enable_recursion": true,
|
|||
|
|
"status": 1,
|
|||
|
|
"description": "个人 DNS 服务器"
|
|||
|
|
},
|
|||
|
|
"running": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 数据模型
|
|||
|
|
|
|||
|
|
### DNSServer
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| ID | uint | 主键 ID |
|
|||
|
|
| CreatedAt | time.Time | 创建时间 |
|
|||
|
|
| UpdatedAt | time.Time | 更新时间 |
|
|||
|
|
| DeletedAt | *time.Time | 删除时间 |
|
|||
|
|
| user_id | uint | 用户 ID |
|
|||
|
|
| name | string | DNS 服务器名称 |
|
|||
|
|
| port | uint | 监听端口 |
|
|||
|
|
| listen_ip | string | 监听 IP |
|
|||
|
|
| upstream_dns | string | 上游 DNS 服务器 |
|
|||
|
|
| enable_recursion | bool | 是否启用递归查询 |
|
|||
|
|
| status | uint | 状态:0 停止,1 运行中,2 错误 |
|
|||
|
|
| description | string | 描述 |
|
|||
|
|
|
|||
|
|
### DNSZone
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| ID | uint | 主键 ID |
|
|||
|
|
| CreatedAt | time.Time | 创建时间 |
|
|||
|
|
| UpdatedAt | time.Time | 更新时间 |
|
|||
|
|
| DeletedAt | *time.Time | 删除时间 |
|
|||
|
|
| server_id | uint | 所属 DNS 服务器 ID |
|
|||
|
|
| domain | string | 域名 |
|
|||
|
|
| soa_mname | string | SOA 记录的主域名服务器 |
|
|||
|
|
| soa_rname | string | SOA 记录的管理员邮箱 |
|
|||
|
|
| soa_serial | uint | SOA 记录的序列号 |
|
|||
|
|
| soa_refresh | uint | SOA 记录的刷新时间(秒) |
|
|||
|
|
| soa_retry | uint | SOA 记录的重试时间(秒) |
|
|||
|
|
| soa_expire | uint | SOA 记录的过期时间(秒) |
|
|||
|
|
| soa_minimum | uint | SOA 记录的最小 TTL(秒) |
|
|||
|
|
| ttl | uint | 默认 TTL(秒) |
|
|||
|
|
| description | string | 描述 |
|
|||
|
|
|
|||
|
|
### DNSRecord
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| ID | uint | 主键 ID |
|
|||
|
|
| CreatedAt | time.Time | 创建时间 |
|
|||
|
|
| UpdatedAt | time.Time | 更新时间 |
|
|||
|
|
| DeletedAt | *time.Time | 删除时间 |
|
|||
|
|
| zone_id | uint | 所属 Zone ID |
|
|||
|
|
| name | string | 记录名称 |
|
|||
|
|
| type | uint | 记录类型 |
|
|||
|
|
| value | string | 记录值 |
|
|||
|
|
| ttl | uint | TTL(秒) |
|
|||
|
|
| priority | uint | 优先级 |
|
|||
|
|
| weight | uint | 权重 |
|
|||
|
|
| port | uint | 端口 |
|
|||
|
|
| target | string | 目标 |
|
|||
|
|
|
|||
|
|
### DNSServiceInstance
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| server_id | uint | DNS 服务器 ID |
|
|||
|
|
| config | DNSServer | DNS 服务器配置 |
|
|||
|
|
| running | bool | 是否正在运行 |
|
|||
|
|
|
|||
|
|
## 错误码说明
|
|||
|
|
|
|||
|
|
| 错误码 | 说明 |
|
|||
|
|
|--------|------|
|
|||
|
|
| 0 | 成功 |
|
|||
|
|
| 1 | 参数错误 |
|
|||
|
|
| 2 | 系统错误 |
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
### 基础功能
|
|||
|
|
- 支持多 DNS 服务器实例管理
|
|||
|
|
- 每个 DNS 服务器可以管理多个域名区域(Zone)
|
|||
|
|
- 每个域名区域可以添加多条 DNS 记录
|
|||
|
|
- 支持常见 DNS 记录类型:A、AAAA、CNAME、MX、NS、TXT、SRV、SOA
|
|||
|
|
- 完整的 SOA 记录配置
|
|||
|
|
|
|||
|
|
### 运行时管理
|
|||
|
|
- 支持 DNS 服务的启动、停止、重启操作
|
|||
|
|
- 同时支持 UDP 和 TCP 协议
|
|||
|
|
- 配置修改后自动重启运行中的服务
|
|||
|
|
- 实时获取服务运行状态
|
|||
|
|
- 支持递归查询,可配置上游 DNS 服务器
|
|||
|
|
|
|||
|
|
### 权限说明
|
|||
|
|
- 普通用户只能操作自己创建的 DNS 服务器、区域和记录
|
|||
|
|
- 管理员可以操作所有 DNS 服务器、区域和记录
|
|||
|
|
- 删除操作会级联删除相关的子资源(删除服务器会删除其下的区域,删除区域会删除其下的记录)
|
|||
|
|
|
|||
|
|
### 自动重启特性
|
|||
|
|
当 DNS 服务器的配置(端口、监听IP、上游DNS等)被修改时,如果服务正在运行,系统会自动重启服务以应用新的配置。
|