Skip to content

DNS 服务器

DNS-Go 内置高性能 DNS 服务器,支持标准 DNS 协议,可直接作为企业内网或边缘节点的 DNS 解析服务。

功能概述

DNS 服务器模块负责:

  • 接收并处理 DNS 查询请求(UDP/TCP 53 端口)
  • 本地域名解析(管理后台配置的解析记录)
  • 递归查询转发(将未知域名转发到上游 DNS)
  • 查询日志记录
  • 缓存查询结果

支持的查询类型

查询类型说明示例
AIPv4 地址记录www.example.com192.168.1.100
AAAAIPv6 地址记录www.example.com2001:db8::1
CNAME别名记录alias.example.comtarget.example.com
MX邮件交换记录example.commail.example.com
TXT文本记录用于 SPF、DKIM 验证
NS名称服务器记录域名授权 DNS 服务器
PTR指针记录(反向解析)192.168.1.100www.example.com
SRV服务定位记录指定服务的服务器位置
CAA证书颁发机构授权限制证书颁发机构

工作原理

查询处理流程

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  DNS 客户端  │────▶│  DNS-Go     │────▶│  本地域名表  │
│             │     │  服务器     │     │             │
└─────────────┘     └──────┬──────┘     └──────┬──────┘
                           │                    │
                           │    命中            │
                           │◀───────────────────┤
                           │    未命中          │
                           │                    │
                    ┌──────▼──────┐            │
                    │  缓存查询   │            │
                    └──────┬──────┘            │
                           │                   │
                           │    命中           │
                           │◀──────────────────┘
                           │    未命中

                    ┌──────▼──────┐
                    │  上游 DNS   │
                    │  递归查询   │
                    └─────────────┘

查询优先级

  1. 本地域名解析(最高优先级)

    • 检查请求的域名是否在本系统管理的域名列表中
    • 如果是,直接返回配置的解析记录
  2. 缓存查询

    • 检查缓存中是否有该域名的解析结果
    • 根据 TTL 判断缓存是否有效
  3. 上游递归查询

    • 将请求转发到配置的上游 DNS 服务器
    • 支持多种上游策略(轮询、权重、故障转移)

配置说明

端口配置

DNS 服务器默认监听以下端口:

端口协议用途
53UDP标准 DNS 查询
53TCPDNS 查询(支持大响应包)

注意:在 Linux/macOS 上,53 端口需要 root 权限。如果无法使用 53 端口,可以:

  1. 使用 sudo 运行程序
  2. 修改防火墙规则允许非特权用户使用 53 端口
  3. 使用高位端口(如 5353)并通过 iptables 转发

启动/停止 DNS 服务

通过 Web 管理界面控制 DNS 服务:

  1. 登录管理后台
  2. 进入「DNS 管理」→「DNS 服务」
  3. 点击「启动服务」或「停止服务」

或者通过 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

配置本地域名

  1. 添加域名

    • 进入「域名管理」→「域名列表」
    • 点击「新增域名」
    • 输入域名,如 example.local
  2. 添加解析记录

    • 点击域名进入详情页
    • 选择「解析记录」标签
    • 点击「新增记录」
    • 配置记录:
      • 主机记录:www
      • 记录类型:A
      • 记录值:192.168.1.100
      • TTL:300
  3. 测试解析

    bash
    dig @localhost www.example.local

故障排查

DNS 服务无法启动

问题原因解决方案
端口被占用53 端口已被其他程序占用停止占用程序或更换端口
权限不足Linux/macOS 非 root 用户使用 sudo 运行或配置端口权限
配置错误上游 DNS 配置错误检查上游配置是否正确

解析失败

问题原因解决方案
域名不存在未配置该域名检查域名和记录配置
超时上游 DNS 无响应检查上游健康状态和连接
拒绝服务权限问题检查防火墙和网络配置

性能优化

缓存配置

通过「缓存配置」页面设置缓存策略:

  • 缓存 TTL:设置缓存条目的默认过期时间
  • 最大条目数:限制缓存中的最大记录数
  • 预加载域名:配置常用域名预加载到缓存

连接优化

  • 确保上游 DNS 服务器响应速度快
  • 配置合理的超时时间
  • 启用健康检查自动剔除故障上游

相关文档

基于 MIT 许可发布