在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。