在CentOS 7系统中搭建DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件包,它是目前最常用的DNS服务器实现之一,以下是详细的配置步骤和说明,包括安装、配置主配置文件、区域文件设置、启动服务及常见问题处理等内容。
安装BIND软件包
首先需要更新系统软件包列表并安装BIND相关组件,打开终端,执行以下命令:
sudo yum update y sudo yum install bind bindutils y
bind是DNS服务器的主程序,bindutils包含常用的DNS查询工具如dig、nslookup和host等,用于测试DNS服务是否正常工作。
配置BIND主配置文件
BIND的主配置文件是/etc/named.conf,需要修改全局选项和区域声明,使用文本编辑器(如vim)打开该文件:
sudo vim /etc/named.conf
在文件中进行如下关键配置:
-
全局选项设置:修改
options段落,定义监听地址、允许查询的客户端、数据目录等参数。options { listenon port 53 { any; }; # 监听所有网络接口的53端口 listenonv6 port 53 { ::1; }; # 监听IPv6的本地回环地址 directory "/var/named"; dumpfile "/var/named/data/cache_dump.db"; statisticsfile "/var/named/data/named_stats.txt"; memstatisticsfile "/var/named/data/named_mem_stats.txt"; allowquery { any; }; # 允许任何客户端查询(生产环境建议限制IP) recursion yes; dnssecvalidation no; bindkeysfile "/etc/named.iscdlv.key"; managedkeysdirectory "/var/named/dynamic"; pidfile "/run/named/named.pid"; sessionkeyfile "/run/named/session.key"; };listenon:若仅允许内网访问,可将any替换为具体IP段(如168.1.0/24)。allowquery:控制哪些客户端可以发起查询,建议生产环境限制为可信网络。
-
区域声明:在文件末尾添加正向和反向解析区域,为域名
example.com和网段168.1.0/24添加区域:zone "example.com" IN { type master; file "example.com.zone"; allowupdate { none; }; }; zone "1.168.192.inaddr.arpa" IN { type master; file "192.168.1.zone"; allowupdate { none; }; };type master:表示该区域为主DNS服务器。file:指定区域数据文件的存储路径(默认在/var/named/目录下)。
创建区域数据文件
区域数据文件定义了域名与IP地址的映射关系,需要为每个区域创建对应的文件,并设置正确的权限。
-
正向解析区域文件(
/var/named/example.com.zone):sudo vim /var/named/example.com.zone ```示例: ```conf $TTL 1D @ IN SOA ns1.example.com. admin.example.com. ( 2025101501 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1.example.com. IN MX 10 mail.example.com. ns1 IN A 192.168.1.10 www IN A 192.168.1.20 mail IN A 192.168.1.30$TTL:默认生存时间,1天(86400秒)。SOA:起始授权机构,包含管理员邮箱(用点代替@)、序列号(需修改以触发区域传输)等信息。NS:域名服务器记录,指向ns1.example.com。MX:邮件交换记录,优先级为10。A:将主机名映射到IPv4地址。
-
反向解析区域文件(
/var/named/192.168.1.zone):sudo vim /var/named/192.168.1.zone ```示例: ```conf $TTL 1D @ IN SOA ns1.example.com. admin.example.com. ( 2025101501 1D 1H 1W 3H ) IN NS ns1.example.com. 10 IN PTR ns1.example.com. 20 IN PTR www.example.com. 30 IN PTR mail.example.com.PTR记录:将IP地址映射到域名,需与正向记录对应。
文件权限设置:确保区域文件属主为named用户,权限为640:
sudo chown named:named /var/named/example.com.zone /var/named/192.168.1.zone sudo chmod 640 /var/named/example.com.zone /var/named/192.168.1.zone
启动并启用DNS服务
配置完成后,启动named服务并设置开机自启:
sudo systemctl start named sudo systemctl enable named
检查服务状态:
sudo systemctl status named
若显示active (running),则服务启动成功。
防火墙与SELinux配置
CentOS 7默认使用firewalld和SELinux,需开放DNS服务端口并调整SELinux策略。
-
防火墙设置:
sudo firewallcmd permanent addservice=dns sudo firewallcmd reload
-
SELinux设置:若SELinux为 enforcing 模式,需调整策略:
sudo setsebool P named_write_master_zones on sudo semanage port a t dns_port p udp 53 sudo semanage port a t dns_port p tcp 53
测试DNS服务
使用nslookup或dig工具测试解析功能:
nslookup www.example.com nslookup 192.168.1.20
若能正确返回域名对应的IP和IP对应的域名,则配置成功。
常见问题处理
-
服务启动失败:检查
/var/log/messages日志,常见原因包括配置语法错误、区域文件权限问题或端口占用,可通过namedcheckconf检查配置文件语法,namedcheckzone验证区域文件:namedcheckconf /etc/named.conf namedcheckzone example.com /var/named/example.com.zone
-
客户端无法解析:确认客户端DNS服务器地址指向CentOS 7服务器的IP(如
168.1.10),并检查防火墙和SELinux设置是否阻止了53端口访问。
相关问答FAQs
问题1:如何配置DNS服务允许动态更新?
答:在区域声明中添加allowupdate参数,并配置TSIG密钥进行安全验证,在/etc/named.conf的区域段落中添加:
zone "example.com" IN {
type master;
file "example.com.zone";
allowupdate { key "dynamickey"; };
};
然后生成TSIG密钥并添加到/etc/named.rfc1912.zones中,最后重启named服务,动态更新通常用于DHCP环境,需谨慎配置以防止安全风险。
问题2:如何实现DNS主从服务器同步?
答:在主服务器上配置区域时,设置allowtransfer参数允许从服务器同步:
zone "example.com" IN {
type master;
file "example.com.zone";
allowtransfer { 192.168.1.20; }; # 从服务器IP
};
在从服务器上配置区域类型为slave,并指定主服务器IP:
zone "example.com" IN {
type slave;
file "slaves/example.com.zone";
masters { 192.168.1.10; }; # 主服务器IP
};
重启从服务器named服务,区域文件会自动同步到/var/named/slaves/目录。
