Skip to content

环境要求

在部署 DNS-Go 之前,请确保您的系统满足以下要求。

系统要求

硬件要求

资源最低配置推荐配置生产环境
CPU1 核2 核4 核+
内存512 MB1 GB2 GB+
磁盘5 GB10 GB20 GB+
网络100 Mbps1 Gbps1 Gbps+

说明:

  • 最低配置:适合测试和开发环境
  • 推荐配置:适合中小规模生产环境
  • 生产环境:适合高并发、大规模部署

操作系统支持

DNS-Go 支持以下操作系统:

操作系统支持版本说明
LinuxCentOS 7+, Ubuntu 18.04+, Debian 9+推荐用于生产环境
WindowsWindows 10, Windows Server 2016+支持
macOSmacOS 10.14+支持开发环境
FreeBSD12.0+支持
OpenBSD6.5+支持

依赖服务

DNS-Go 需要以下依赖服务:

必需依赖

1. 数据库(二选一)

PostgreSQL(推荐)

  • 版本:12, 13, 14, 15, 16
  • 说明:性能优异,适合生产环境

MySQL

  • 版本:5.7, 8.0
  • 说明:广泛使用,兼容性好

2. 缓存(可选但推荐)

Valkey(推荐)

  • 版本:7.0, 8.0
  • 说明:Redis 的高性能分支,完全兼容 Redis 协议

Redis

  • 版本:6.0, 7.0
  • 说明:广泛使用的内存缓存

可选依赖

服务版本用途
Nginx1.18+反向代理、HTTPS
Docker20.10+容器化部署
Docker Compose2.0+容器编排

端口要求

DNS-Go 使用以下端口,请确保这些端口未被占用且防火墙允许访问:

端口协议用途必需安全建议
8085TCPWeb 管理界面和 API可限制内网访问
53UDPDNS 查询服务需要对外开放
53TCPDNS 查询服务需要对外开放
5432TCPPostgreSQL条件建议内网访问
3306TCPMySQL条件建议内网访问
6379TCPValkey/Redis条件建议内网访问

说明:

  • 必需:DNS-Go 核心功能必需
  • 条件:取决于使用的数据库和缓存

端口冲突处理

如果 53 端口被占用(如 systemd-resolved):

Linux 系统:

bash
# 停止 systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

# 或修改 DNS-Go 使用其他端口
# 然后使用 iptables 转发
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353
sudo iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 5353

网络要求

内网部署

  • DNS-Go 服务器与客户端在同一内网
  • Web 管理界面可限制内网访问
  • DNS 服务端口(53)需要对所有客户端开放

公网部署

  • 需要公网 IP 或端口映射
  • Web 管理界面建议配置 HTTPS
  • DNS 服务端口(53)需要对外开放
  • 建议配置防火墙限制访问源

配置要求

配置文件

DNS-Go 使用单一配置文件 config/config.toml,必需包含以下配置:

toml
# 数据库配置(必需)
[database]
driver = "postgres"      # 或 "mysql"
host = "127.0.0.1"
port = 5432              # PostgreSQL 默认 5432,MySQL 默认 3306
username = "postgres"    # 数据库用户名
password = "your_password"  # ⚠️ 必须修改
database = "dns_go"      # 数据库名称
sslmode = "disable"      # PostgreSQL 专用

# JWT 配置(必需)
[jwt]
secret_key = "your_jwt_secret_min_32_chars"  # ⚠️ 必须修改
expires_in = 24          # Token 过期时间(小时)

# Valkey/Redis 配置(可选但推荐)
[valkey]
ip = "127.0.0.1"
port = 6379
password = ""
db = 0

数据库初始化

首次启动前需要创建数据库和用户:

PostgreSQL:

bash
# 创建用户
sudo -u postgres psql -c "CREATE USER dnsgo WITH PASSWORD 'your_password';"

# 创建数据库
sudo -u postgres psql -c "CREATE DATABASE dns_go OWNER dnsgo;"

MySQL:

sql
CREATE USER 'dnsgo'@'localhost' IDENTIFIED BY 'your_password';
CREATE DATABASE dns_go CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON dns_go.* TO 'dnsgo'@'localhost';
FLUSH PRIVILEGES;

安全要求

系统安全

  • 防火墙:配置防火墙限制不必要的端口访问
  • SELinux:如启用 SELinux,需要配置允许 DNS-Go 绑定 53 端口
  • 权限:DNS-Go 不需要 root 权限(53 端口除外)

数据安全

  • 密码强度:数据库密码、JWT 密钥必须使用强密码
  • 数据备份:定期备份数据库
  • 访问控制:限制数据库和缓存的访问权限

网络安全

  • HTTPS:生产环境 Web 界面必须使用 HTTPS
  • 访问限制:管理界面限制可访问的 IP 范围
  • DNS 安全:考虑启用 DNSSEC(功能开发中)

验证环境

检查端口

bash
# Linux
sudo netstat -tlnp | grep -E '53|8085|5432|6379'

# 或使用 ss
sudo ss -tlnp | grep -E '53|8085|5432|6379'

检查服务

bash
# 检查 PostgreSQL
sudo systemctl status postgresql

# 检查 MySQL
sudo systemctl status mysql

# 检查 Redis/Valkey
sudo systemctl status redis

测试连接

bash
# 测试 PostgreSQL 连接
psql -h localhost -U dnsgo -d dns_go -c "SELECT 1;"

# 测试 MySQL 连接
mysql -h localhost -u dnsgo -p -e "SELECT 1;"

# 测试 Redis/Valkey 连接
redis-cli -h localhost ping

下一步

环境准备完成后,您可以选择以下部署方式:

故障排查

端口被占用

bash
# 查找占用 53 端口的进程
sudo lsof -i :53

# 或
sudo netstat -tlnp | grep :53

权限不足

bash
# Linux 非 root 用户绑定 53 端口
sudo setcap cap_net_bind_service=+ep /path/to/dns-go-app

数据库连接失败

bash
# 检查数据库服务状态
sudo systemctl status postgresql

# 检查数据库监听地址
sudo netstat -tlnp | grep 5432

# 检查防火墙
sudo iptables -L | grep 5432

相关文档

基于 MIT 许可发布