环境要求
在部署 DNS-Go 之前,请确保您的系统满足以下要求。
系统要求
硬件要求
| 资源 | 最低配置 | 推荐配置 | 生产环境 |
|---|---|---|---|
| CPU | 1 核 | 2 核 | 4 核+ |
| 内存 | 512 MB | 1 GB | 2 GB+ |
| 磁盘 | 5 GB | 10 GB | 20 GB+ |
| 网络 | 100 Mbps | 1 Gbps | 1 Gbps+ |
说明:
- 最低配置:适合测试和开发环境
- 推荐配置:适合中小规模生产环境
- 生产环境:适合高并发、大规模部署
操作系统支持
DNS-Go 支持以下操作系统:
| 操作系统 | 支持版本 | 说明 |
|---|---|---|
| Linux | CentOS 7+, Ubuntu 18.04+, Debian 9+ | 推荐用于生产环境 |
| Windows | Windows 10, Windows Server 2016+ | 支持 |
| macOS | macOS 10.14+ | 支持开发环境 |
| FreeBSD | 12.0+ | 支持 |
| OpenBSD | 6.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
- 说明:广泛使用的内存缓存
可选依赖
| 服务 | 版本 | 用途 |
|---|---|---|
| Nginx | 1.18+ | 反向代理、HTTPS |
| Docker | 20.10+ | 容器化部署 |
| Docker Compose | 2.0+ | 容器编排 |
端口要求
DNS-Go 使用以下端口,请确保这些端口未被占用且防火墙允许访问:
| 端口 | 协议 | 用途 | 必需 | 安全建议 |
|---|---|---|---|---|
| 8085 | TCP | Web 管理界面和 API | ✅ | 可限制内网访问 |
| 53 | UDP | DNS 查询服务 | ✅ | 需要对外开放 |
| 53 | TCP | DNS 查询服务 | ✅ | 需要对外开放 |
| 5432 | TCP | PostgreSQL | 条件 | 建议内网访问 |
| 3306 | TCP | MySQL | 条件 | 建议内网访问 |
| 6379 | TCP | Valkey/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下一步
环境准备完成后,您可以选择以下部署方式:
- Docker Compose 部署 - 一键部署,最简单
- Docker 部署 - 手动容器部署
- 二进制部署 - 直接运行,性能最佳
故障排查
端口被占用
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