CentOS系统下DNS服务器设置指南
安装BIND软件包
使用YUM安装BIND及相关工具
在CentOS系统中,可通过YUM包管理器安装BIND DNS服务器软件,执行以下命令进行安装:
sudo yum install y bind bindutils
该命令将安装BIND主程序以及常用的DNS工具,如dig
、nslookup
等,安装完成后,系统会自动创建必要的目录结构和配置文件。
验证安装结果
安装完成后,可通过以下命令检查BIND服务状态:
sudo systemctl status named
若显示服务已启动且启用,则表示安装成功,默认情况下,BIND配置文件位于/etc/named.conf
,区域文件存储在/var/named/
目录下。
配置主配置文件(named.conf)
修改监听地址和端口
默认配置中,BIND仅监听本地回环地址(127.0.0.1),需修改为监听所有IP地址:
options { listenon port 53 { 127.0.0.1; }; + listenon port 53 { any; }; listenonv6 port 53 { ::1; }; ... };
允许查询的客户端范围
根据需求设置允许访问的IP范围:
allowquery { localhost; + any; };
注意:生产环境中建议限制为特定IP或子网,例如allowquery { 192.168.1.0/24; }
。
其他关键配置项
配置项 | 说明 |
---|---|
recursion |
设置为no 以禁用递归查询(权威DNS服务器推荐) |
dnssecenable |
启用DNSSEC安全扩展(建议开启) |
forwarders |
指定上游DNS服务器IP(用于转发非本域查询) |
allowtransfer |
指定允许区域传输的IP(从服务器同步数据时需要) |
创建正向解析区域
定义域名区域
编辑/etc/named.conf
,添加以下内容:
zone "example.com" { type master; file "/var/named/example.com.zone"; };
编写区域文件
在/var/named/
目录下创建example.com.zone
如下:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023091101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) @ IN NS ns1.example.com. ns1 IN A 192.168.1.10 ; DNS服务器IP www IN A 192.168.1.20 ; Web服务器IP
配置反向解析区域(可选)
定义反向解析区域
在named.conf
中添加:
zone "1.168.192.inaddr.arpa" { type master; file "/var/named/1.168.192.zone"; };
编写反向区域文件
创建/var/named/1.168.192.zone
示例:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023091101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ; Minimum TTL ) @ IN NS ns1.example.com. 10 IN PTR ns1.example.com. 20 IN PTR www.example.com.
启动与测试服务
启动并设置自启
sudo systemctl start named sudo systemctl enable named
测试DNS解析
(1) 正向解析测试
dig www.example.com @192.168.1.10
(2) 反向解析测试
dig x 192.168.1.20 @192.168.1.10
(3) Windows客户端测试
- 修改网卡DNS服务器地址为CentOS服务器IP
- 使用
ipconfig /flushdns
刷新缓存 - 通过
ping www.example.com
验证解析
常见问题与解决方案
问题1:DNS查询超时
原因:防火墙未开放53端口或SELinux限制。
解决方案:
# 开放防火墙端口 sudo firewallcmd permanent addport=53/tcp sudo firewallcmd permanent addport=53/udp sudo firewallcmd reload # 设置SELinux策略 sudo setsebool P named_write_master_zones on
问题2:区域文件语法错误
原因:区域文件格式不符合规范。
解决方案:
# 检查语法错误 sudo namedcheckconf /etc/named.conf sudo namedcheckzone example.com /var/named/example.com.zone
安全加固建议
措施 | 说明 |
---|---|
限制allowquery 范围 |
仅允许可信网络访问DNS服务 |
禁用递归查询 | 权威服务器无需递归查询(设置recursion no; ) |
启用DNSSEC | 通过签名防止DNS欺骗(需生成密钥并签名区域) |
配置访问控制列表(ACL) | 细化不同客户端的查询权限 |
日志与监控
配置日志文件
在named.conf
的logging
部分添加:
logging { channel default_log { file "/var/named/data/named.log" versions 3 size 5m; severity info; printtime yes; printseverity yes; printcategory yes; }; category default { default_log; }; };
查看日志内容
sudo tail f /var/named/data/named.log
相关问题与解答
问题1:如何将CentOS DNS服务器配置为局域网的缓存服务器?
解答:需修改named.conf
中的recursion
为yes
,并添加上游DNS服务器:
options { recursion yes; forwarders { 8.8.8.8; 8.8.4.4; }; };
同时确保allowquery
包含局域网IP范围。
问题2:如何实现主从DNS架构?
解答:
- 在主服务器
named.conf
中添加从服务器IP到allowtransfer
:allowtransfer { 192.168.1.20; };
- 在从服务器创建相同的区域配置,并将
type
改为hint
:zone "example.com" { type slave; masters { 192.168.1.10; }; file "/var/named/example.com.zone