Linux搭建DNS服务器详细教程
准备工作
在开始搭建之前,请确保已完成以下基础设置:

- 静态IP地址配置:为服务器分配固定的内网或外网IP(如
168.92.10
),避免因DHCP动态分配导致服务中断; - 关闭防火墙与SELinux:临时禁用防火墙和安全增强模块,防止干扰DNS端口通信;
- 更新软件源缓存:执行
yum clean all
并检查可用仓库,确保能正常下载安装包。
安装BIND软件包
BIND(Berkeley Internet Name Domain)是主流的开源DNS服务程序,以CentOS/RHEL系统为例:
yum -y install bind bind-chroot # 安装主程序及安全加固模块
注意:
bind-chroot
会将服务限制在虚拟根目录中运行,提升安全性,其他发行版如Ubuntu可使用apt-get install isc-dhcp-server
等替代方案。
安装完成后,默认配置文件位于/etc/named.conf
,区域文件存储路径为/var/named
。
配置主配置文件(named.conf)
- 备份原始文件
cp /etc/named.conf /etc/named.conf.backup
- 编辑核心参数
使用vim修改/etc/named.conf
,关键项如下: | 参数 | 示例值 | 作用说明 | |---------------------|---------------------------------|------------------------------| |listen-on port 53
|{ any; }
| 监听所有网络接口的53号端口 | |allow-query
|{ any; }
| 允许所有客户端发起递归查询 | |recursion yes
| — | 启用递归解析功能 | |dnssec-enable yes
| — | 支持DNSSEC安全扩展 | |directory
|"/var/named"
| 定义工作目录路径 |
保存后通过命令验证语法正确性:

named-checkconf -z /etc/named.conf
若提示无错误则继续下一步。
定义正向与反向解析区域
声明区域(编辑/etc/named.rfc1912.zones
)
添加示例域名example.com
及其对应的IP段:
zone "example.com" IN { type master; # 主DNS模式 file "example.com.zone"; # 关联的区域文件名 allow-update { none; }; # 禁止动态更新 }; zone "1.168.192.in-addr.arpa" IN { # 反向解析网段192.168.1.0/24 type master; file "192.168.1.arpa"; allow-update { none; }; };
编写正向解析文件(创建/var/named/example.com.zone
)
$TTL 86400 # TTL设置为24小时 @ SOA example.com. admin.example.com. ( 2025080901 # 序列号(建议日期+当天修订次数) 3H # 刷新间隔3小时 15M # 重试间隔15分钟 1W # 过期时间1周 1D # 最小生存周期1天 ) @ NS ns1.example.com. # 指定本机的NS记录 @ MX 10 mail.example.com. # 邮件交换记录优先级为10 www A 192.168.1.100 # www子域名指向IPv4地址 ftp CNAME www # ftp别名指向www主机
配置反向解析文件(创建/var/named/192.168.1.arpa
)
$TTL 86400 @ SOA example.com. admin.example.com. ( 2025080901 3H 15M 1W 1D ) @ NS ns1.example.com. 248 PTR ns1.example.com. # IP反查主机名 249 PTR webserver.example.com.
权限设置:执行
chmod 755 /var/named/
并更改所有者为named:named
。
启动与测试服务
- 启动BIND服务
systemctl start named # 立即启动 systemctl enable named # 加入开机自启项
- 验证配置有效性
分别检查正向/反向区域文件是否存在语法错误:named-checkzone example.com /var/named/example.com.zone named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.arpa
- 功能测试工具
- nslookup:
nslookup www.example.com
应返回正确IP; - dig:
dig +short example.com
直接显示结果; - ping:
ping www.example.com
若能正常响应则说明解析成功。
- nslookup:
高级优化与安全建议
功能需求 | 实现方式 |
---|---|
负载均衡 | 在A记录中配置多个IP地址轮询 |
缓存加速 | 调整options 中的statistics-file 监控性能指标 |
访问控制 | 替换allow-query { any; } 为特定网段(如allow-query { 192.168.1.0/24; } ) |
日志分析 | 查看/var/log/messages 或自定义日志路径 |
IPv6支持 | 新增AAAA记录类型并启用listen-on-v6 参数 |
常见问题与解答
Q1: 为什么客户端无法解析新添加的域名?
A: 可能原因包括:①未重启named服务使配置生效;②防火墙阻止了UDP/TCP的53端口;③区域文件中存在语法错误导致加载失败,建议依次执行systemctl restart named
, firewall-cmd --add-port=53/udp
, named-checkzone
进行排查。

Q2: 如何实现主从DNS同步?
A: 在主服务器上修改named.conf
添加also-notify
指令通知从服务器更新数据;从服务器侧通过zone
语句指向主服务器IP,并设置type slave; masters { IP地址; };
完成同步配置,需确保两台机器时间