DNS 服务器
DNS-Go 内置高性能 DNS 服务器,支持标准 DNS 协议,可直接作为企业内网或边缘节点的 DNS 解析服务。
功能概述
DNS 服务器模块负责:
- 接收并处理 DNS 查询请求(UDP/TCP 53 端口)
- 本地域名解析(管理后台配置的解析记录)
- 递归查询转发(将未知域名转发到上游 DNS)
- 查询日志记录
- 缓存查询结果
支持的查询类型
| 查询类型 | 说明 | 示例 |
|---|---|---|
| A | IPv4 地址记录 | www.example.com → 192.168.1.100 |
| AAAA | IPv6 地址记录 | www.example.com → 2001:db8::1 |
| CNAME | 别名记录 | alias.example.com → target.example.com |
| MX | 邮件交换记录 | example.com → mail.example.com |
| TXT | 文本记录 | 用于 SPF、DKIM 验证 |
| NS | 名称服务器记录 | 域名授权 DNS 服务器 |
| PTR | 指针记录(反向解析) | 192.168.1.100 → www.example.com |
| SRV | 服务定位记录 | 指定服务的服务器位置 |
| CAA | 证书颁发机构授权 | 限制证书颁发机构 |
工作原理
查询处理流程
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ DNS 客户端 │────▶│ DNS-Go │────▶│ 本地域名表 │
│ │ │ 服务器 │ │ │
└─────────────┘ └──────┬──────┘ └──────┬──────┘
│ │
│ 命中 │
│◀───────────────────┤
│ 未命中 │
│ │
┌──────▼──────┐ │
│ 缓存查询 │ │
└──────┬──────┘ │
│ │
│ 命中 │
│◀──────────────────┘
│ 未命中
│
┌──────▼──────┐
│ 上游 DNS │
│ 递归查询 │
└─────────────┘查询优先级
本地域名解析(最高优先级)
- 检查请求的域名是否在本系统管理的域名列表中
- 如果是,直接返回配置的解析记录
缓存查询
- 检查缓存中是否有该域名的解析结果
- 根据 TTL 判断缓存是否有效
上游递归查询
- 将请求转发到配置的上游 DNS 服务器
- 支持多种上游策略(轮询、权重、故障转移)
配置说明
端口配置
DNS 服务器默认监听以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 53 | UDP | 标准 DNS 查询 |
| 53 | TCP | DNS 查询(支持大响应包) |
注意:在 Linux/macOS 上,53 端口需要 root 权限。如果无法使用 53 端口,可以:
- 使用 sudo 运行程序
- 修改防火墙规则允许非特权用户使用 53 端口
- 使用高位端口(如 5353)并通过 iptables 转发
启动/停止 DNS 服务
通过 Web 管理界面控制 DNS 服务:
- 登录管理后台
- 进入「DNS 管理」→「DNS 服务」
- 点击「启动服务」或「停止服务」
或者通过 API 控制:
bash
# 启动 DNS 服务
curl -X POST http://localhost:8085/api/dns/start \
-H "Authorization: Bearer YOUR_TOKEN"
# 停止 DNS 服务
curl -X POST http://localhost:8085/api/dns/stop \
-H "Authorization: Bearer YOUR_TOKEN"
# 获取 DNS 服务状态
curl http://localhost:8085/api/dns/status \
-H "Authorization: Bearer YOUR_TOKEN"使用示例
测试 DNS 解析
bash
# 使用 dig 命令测试
dig @localhost www.example.com
# 使用 nslookup 测试
nslookup www.example.com localhost
# 使用 dig 测试特定类型
dig @localhost -t MX example.com
# 使用 dig 测试 TCP 模式
dig @localhost +tcp www.example.com配置本地域名
添加域名
- 进入「域名管理」→「域名列表」
- 点击「新增域名」
- 输入域名,如
example.local
添加解析记录
- 点击域名进入详情页
- 选择「解析记录」标签
- 点击「新增记录」
- 配置记录:
- 主机记录:
www - 记录类型:
A - 记录值:
192.168.1.100 - TTL:
300
- 主机记录:
测试解析
bashdig @localhost www.example.local
故障排查
DNS 服务无法启动
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 端口被占用 | 53 端口已被其他程序占用 | 停止占用程序或更换端口 |
| 权限不足 | Linux/macOS 非 root 用户 | 使用 sudo 运行或配置端口权限 |
| 配置错误 | 上游 DNS 配置错误 | 检查上游配置是否正确 |
解析失败
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 域名不存在 | 未配置该域名 | 检查域名和记录配置 |
| 超时 | 上游 DNS 无响应 | 检查上游健康状态和连接 |
| 拒绝服务 | 权限问题 | 检查防火墙和网络配置 |
性能优化
缓存配置
通过「缓存配置」页面设置缓存策略:
- 缓存 TTL:设置缓存条目的默认过期时间
- 最大条目数:限制缓存中的最大记录数
- 预加载域名:配置常用域名预加载到缓存
连接优化
- 确保上游 DNS 服务器响应速度快
- 配置合理的超时时间
- 启用健康检查自动剔除故障上游