video_ca/dns.md

874 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 服务器 ID0 表示获取全部 |
| 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 ID0 表示获取全部 |
| 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 | 否 | 记录 ID0 表示获取全部 |
| 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等被修改时如果服务正在运行系统会自动重启服务以应用新的配置。