在CentOS 6.5系统上安装和配置BIND(Berkeley Internet Name Domain)服务,是搭建自定义DNS服务器的常见需求,尽管CentOS 6.5已是一个较旧的版本,但在许多遗留环境中仍有其应用价值,本文将提供一个清晰、分步的指南,帮助您完成整个过程。

第一步:准备工作
在开始安装之前,请确保您具备以下条件:
- 拥有CentOS 6.5服务器的root权限或sudo权限。
- 服务器已连接到互联网,以便通过YUM仓库下载软件包。
- 确认系统版本,可通过命令
cat /etc/redhat-release进行核对。
第二步:安装BIND软件包
CentOS的YUM包管理器极大地简化了软件的安装,我们将安装三个核心软件包:bind(主程序)、bind-chroot(提高安全性,将服务限制在特定目录)和bind-utils(提供dig、nslookup等测试工具)。
执行以下命令进行安装:
yum install bind bind-chroot bind-utils -y
-y 参数会自动回答所有提示为“是”,加快安装进程。
下表简要说明了各软件包的作用:
| 软件包 | 功能描述 |
|---|---|
| bind | DNS服务器的主程序,包含named守护进程。 |
| bind-chroot | 将BIND服务“囚禁”在/var/named/chroot目录下,增强系统安全性。 |
| bind-utils | 提供DNS查询和诊断工具,如dig、host、nslookup。 |
第三步:配置主配置文件
BIND的主配置文件是 /etc/named.conf,由于我们安装了bind-chroot,实际运行时,BIND会访问/var/named/chroot/etc/named.conf,但通常我们直接编辑 /etc/named.conf,系统会自动处理同步。
备份原始配置文件:

cp /etc/named.conf /etc/named.conf.bak
使用文本编辑器(如vi)打开并修改 /etc/named.conf,以下是一个基础配置示例,用于搭建一个可缓存、可解析特定域名的DNS服务器:
listen-on port 53 { any; }; // 监听所有网络接口
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; // 允许任何客户端查询
recursion yes; // 允许递归查询,作为缓存DNS服务器
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
// 定义根区域,通常无需修改
zone "." IN {
type hint;
file "named.ca";
};
// 定义我们自己的正向解析区域
zone "example.com" IN {
type master;
file "example.com.zone"; // 指定区域文件名
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
此配置允许服务器为example.com域提供权威解析,同时也能作为缓存服务器为其他域名提供解析服务。
第四步:创建区域文件
为我们在named.conf中定义的example.com域创建区域文件,该文件位于 /var/named/ 目录下。
创建 /var/named/example.com.zone 文件:
vi /var/named/example.com.zone
@ IN SOA ns1.example.com. admin.example.com. (
2025102701 ; Serial (序列号,修改后需递增)
3600 ; Refresh (刷新时间)
1800 ; Retry (重试时间)
604800 ; Expire (过期时间)
86400 ) ; Minimum TTL (最小TTL)
; 定义域名服务器
IN NS ns1.example.com.
; 定义A记录(主机名到IP地址的映射)
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
mail IN A 192.168.1.30
请确保文件权限正确,named用户需要能够读取它:
chown :named /var/named/example.com.zone chmod 640 /var/named/example.com.zone
第五步:启动服务与测试
配置完成后,启动BIND服务,并设置其开机自启:
service named start chkconfig named on
使用 named-checkconf 和 named-checkzone 命令检查配置文件和区域文件的语法是否有误:

named-checkconf named-checkzone example.com /var/named/example.com.zone
如果没有任何输出,表示语法正确,使用dig工具进行测试:
dig @localhost www.example.com
如果一切正常,您将在输出中看到www.example.com解析到168.1.20的记录。
相关问答 (FAQs)
我已经启动了named服务,但其他计算机无法查询到我的DNS服务器,这是为什么?
解答: 这通常是由于防火墙阻止了DNS服务的端口,在CentOS 6.5中,默认使用iptables防火墙,您需要开放TCP和UDP的53端口,执行以下命令:
iptables -I INPUT -p tcp --dport 53 -j ACCEPT iptables -I INPUT -p udp --dport 53 -j ACCEPT service iptables save service iptables restart
这样,外部客户端就能正常访问您的DNS服务器了。
在检查named状态时,发现服务无法启动,日志中提示权限错误,但文件权限看起来是正确的,该怎么办?
解答: 这很可能是SELinux(Security-Enhanced Linux)策略阻止了named进程访问文件,首先检查SELinux是否处于Enforcing模式:getenforce,如果是,您可以检查文件的安全上下文:ls -Z /var/named/example.com.zone,正确的上下文应该是system_u:object_r:named_zone_t:s0,如果不对,可以使用以下命令修复:
chcon -t named_zone_t /var/named/example.com.zone
或者,为了方便管理,您可以临时设置SELinux为Permissive模式进行测试:setenforce 0,如果问题解决,说明确实是SELinux导致,应按上述方法正确配置文件上下文,而不是长期禁用SELinux。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!