在 Rocky Linux 上搭建 DNS 服务器详细教程
📋 概述
本教程将手把手教你在 Rocky Linux(RHEL 系列)上部署和配置 BIND(named) DNS 服务器。我们会覆盖从系统准备、BIND 安装、区域文件配置、服务启动、防火墙设置到常见问题排查的完整流程。
🛠️ 环境准备
系统要求
- Rocky Linux 9(或 8)
- root 权限或 sudo 权限
- 静态 IP 地址(建议使用内网 192.168.x.x 段)
- 网络连通性
系统更新
# 更新系统包列表
sudo dnf update -y
# 安装常用工具
sudo dnf install -y curl wget vim htop net-tools
📦 第一步:安装 BIND
1.1 安装 BIND 包
sudo dnf install -y bind bind-utils
1.2 检查 BIND 版本
named -v
# 输出类似: BIND 9.18.4 (Rocky Linux)
1.3 启用并启动服务
sudo systemctl enable named
sudo systemctl start named
sudo systemctl status named
⚙️ 第二步:配置 BIND
2.1 备份默认配置文件
sudo cp /etc/named.conf /etc/named.conf.bak
sudo mkdir -p /etc/named/zones
2.2 编辑主配置文件 named.conf
sudo nano /etc/named.conf
示例 named.conf(请根据实际 IP 替换)
options {
directory "/var/named";
pid-file "/run/named/named.pid";
listen-on port 53 { 127.0.0.1; 192.168.1.100; }; // 替换为服务器 IP
listen-on-v6 { none; };
allow-query { localhost; 192.168.1.0/24; }; // 替换为你的网段
allow-recursion { localhost; 192.168.1.0/24; };
recursion yes;
dnssec-validation auto;
auth-nxdomain no;
forwarders { 8.8.8.8; 8.8.4.4; };
forward only;
// 日志配置
logging {
channel default_log {
file "/var/log/named.log" versions 3 size 5m;
severity info;
print-time yes;
};
channel error_log {
file "/var/log/named.err" versions 3 size 5m;
severity error;
print-time yes;
};
category default { default_log; };
category error { error_log; };
};
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named/zones.conf";
2.3 创建区域配置文件 zones.conf
sudo nano /etc/named/zones.conf
示例内容
// 正向解析区域(example.com)
zone "example.com" IN {
type master;
file "zones/example.com.zone";
allow-update { none; };
};
// 反向解析区域(192.168.1.x)
zone "1.168.192.in-addr.arpa" IN {
type master;
file "zones/192.168.1.rev";
allow-update { none; };
};
📁 第三步:创建区域文件
3.1 正向解析区域 example.com.zone
sudo nano /etc/named/zones/example.com.zone
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2026042801 ; Serial(每次修改后递增)
3600 ; Refresh(1 小时)
1800 ; Retry(30 分钟)
604800 ; Expire(7 天)
86400 ) ; Minimum(1 天)
; NS 记录
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
ns1 IN A 192.168.1.100
ns2 IN A 192.168.1.101
; 主机记录
@ IN A 192.168.1.100
www IN A 192.168.1.102
mail IN A 192.168.1.103
ftp IN A 192.168.1.104
; MX 记录
@ IN MX 10 mail.example.com.
@ IN MX 20 mail2.example.com.
; CNAME 记录
www IN CNAME www1.example.com.
api IN CNAME www.example.com.
; TXT 记录
@ IN TXT "v=spf1 mx ~all"
@ IN TXT "Rocky Linux DNS Tutorial"
3.2 反向解析区域 192.168.1.rev
sudo nano /etc/named/zones/192.168.1.rev
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2026042801 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum
; NS 记录
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; PTR 记录
100 IN PTR ns1.example.com.
101 IN PTR ns2.example.com.
102 IN PTR www.example.com.
103 IN PTR mail.example.com.
104 IN PTR ftp.example.com.
🔑 第四步:生成 rndc 密钥(可选)
sudo rndc-confgen -a -b 256
sudo chown root:named /etc/rndc.key
sudo chmod 640 /etc/rndc.key
🚀 第五步:启动并验证服务
# 重启 BIND 使配置生效
sudo systemctl restart named
# 检查状态
sudo systemctl status named
# 语法检查
sudo named-checkconf
sudo named-checkzone example.com /etc/named/zones/example.com.zone
sudo named-checkzone 1.168.192.in-addr.arpa /etc/named/zones/192.168.1.rev
5.1 本地解析测试
# 正向查询
dig @localhost www.example.com
# 反向查询
dig @localhost -x 192.168.1.102
5.2 远程查询(从另一台机器)
dig @192.168.1.100 www.example.com
🔒 第六步:防火墙配置(firewalld)
sudo systemctl enable firewalld
sudo systemctl start firewalld
# 开放 DNS 端口
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload
🛠️ 第七步:常用维护命令
# 重新加载配置而不中断服务
sudo rndc reload
# 刷新缓存
sudo rndc flush
# 查看统计信息
sudo rndc stats
# 查看日志(实时)
sudo tail -f /var/log/named.log
📊 第八步:监控与性能调优
- 日志轮转:编辑
/etc/logrotate.d/named,保持日志文件大小可控。 - 缓存优化:在
named.conf中加入
options {
max-cache-size 512M;
max-ncache-size 64M;
};
- 监控工具:
htop,netstat -anp | grep :53,named-checkconf等。
🐛 第九步:常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
dig 返回 REFUSED | 防火墙未放通 53 端口或 allow-query 限制 | 检查 firewall-cmd 与 named.conf 中的 allow-query 配置 |
| 区域文件加载失败 | 语法错误或文件路径错误 | 使用 named-checkzone 验证;确保 named.conf 中 file 路径正确 |
| 递归查询失败 | recursion 未启用或 forwarders 配置错误 | 确认 options { recursion yes; forwarders {...}; } |
| 服务启动失败 | SELinux 阻止 | setsebool -P named_write_master_zones 1 并检查 /var/log/audit/audit.log |
📚 参考资源
- BIND 官方文档
- Rocky Linux 官方文档
- RFC 1034 – Domain Names – Concepts and Facilities
- RFC 1035 – Domain Names – Implementation and Specification
🎉 祝你部署顺利! 如有疑问,随时联系我进行进一步调试。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END













暂无评论内容