本教程将引导你完成一个主 DNS 服务器的搭建,包括正向解析和反向解析,并确保它在启动后能自动运行。

第一步:准备工作
- 操作系统:已安装并正常运行的 CentOS 6.5 系统。
- 网络配置:确保服务器有一个静态的 IP 地址,本教程假设你的服务器 IP 地址为
168.1.100,域名为example.com。请根据你的实际情况修改这些值。 - 更新系统:更新你的系统软件包到最新状态,这是一个好习惯。
yum update -y
第二步:安装 BIND 软件包
CentOS 6.5 的官方软件仓库中包含了 BIND,我们可以直接使用 yum 来安装。
# 安装 bind 和相关的工具包 yum install -y bind bind-utils # bind-utils 包含了 dig, nslookup, host 筸常用 DNS 测试工具
安装完成后,BIND 的主配置文件位于 /etc/named.conf,区域数据文件默认存放在 /var/named/ 目录下。
第三步:配置主 DNS 服务器
这是整个教程的核心部分,我们需要修改几个配置文件。
修改主配置文件 /etc/named.conf
这个文件是 BIND 的全局配置文件,定义了服务器的基本行为。

# 使用 vi 或你喜欢的编辑器打开文件 vi /etc/named.conf
我们需要修改或关注以下几个部分:
a. 选项配置
找到 options { ... }; 部分,确保 listen-on 和 allow-query 的配置如下。listen-on 指定服务器监听的 IP 地址,allow-query 指定哪些客户端可以查询这个 DNS 服务器。
options {
// 监听所有网络接口上的 DNS 查询 (IPv4)
// 如果你只想监听特定IP,可以改为 listen-on port 53 { 127.0.0.1; 192.168.1.100; };
listen-on port 53 { 127.0.0.1; 192.168.1.100; };
// 监听所有网络接口上的 DNS 查询 (IPv6),如果不需要可以注释掉
// listen-on-v6 port 53 { ::1; };
// 允许任何客户端进行查询,如果是内网DNS服务器,可以这样配置
// 如果是公网DNS,需要限制为特定IP段,allow-query { 192.168.1.0/24; localhost; };
allow-query { localhost; any; };
// ... 其他配置保持默认 ...
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 { localhost; };
recursion yes;
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";
pid-file "/var/run/named/named.pid";
session-keyfile "/var/run/named/session.key";
};
b. 区域定义

在文件的末尾,我们需要定义我们的正向和反向解析区域,找到 zone "." { ... }; 部分,在其后面添加我们自己的区域声明。
// 在文件末尾添加以下内容
// ==================== 正向解析区域 ====================
zone "example.com" IN {
type master; // 这是一个主 DNS 区域
file "example.com.zone"; // 区域数据文件名,存放在 /var/named/ 目录下
allow-update { none; }; // 不允许动态更新
};
// ==================== 反向解析区域 ====================
// 1.168.192.in-addr.arpa 是 192.168.1.0/24 网段的反向表示
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone"; // 区域数据文件名
allow-update { none; };
};
注意:这里的 168.1.100 是你的服务器 IP,example.com 是你的域名,请务必替换成你自己的信息。
创建正向解析区域文件
根据 named.conf 中的定义,我们需要创建 /var/named/example.com.zone 文件。
# 复制一个模板文件作为起点 cp /var/named/named.local /var/named/example.com.zone # 编辑这个新文件 vi /var/named/example.com.zone
修改为以下格式:
$TTL 86400 ; 24 hours
@ IN SOA ns1.example.com. admin.example.com. (
2025102701 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name Server (NS) records
@ IN NS ns1.example.com.
; A records - 将主机名映射到IP地址
ns1 IN A 192.168.1.100
www IN A 192.168.1.101
ftp IN A 192.168.1.102
; CNAME records - 别名记录
; 将 www.example.com 指向 example.com
; www IN CNAME @
; Mail exchanger (MX) records
@ IN MX 10 mail.example.com.
mail IN A 192.168.1.103
关键点解释:
$TTL:默认的生存时间。SOA:授权区域的开始,包含管理员邮箱(admin.example.com.,注意最后的点)、序列号(每次修改区域文件后必须递增)、刷新时间等。NS:指定该区域的权威名称服务器。A:地址记录,将主机名(如www)指向一个 IP 地址。CNAME:规范名称记录,为一个主机名创建别名。MX:邮件交换记录,指定负责处理该域邮件的服务器。
创建反向解析区域文件
同样,根据 named.conf 的定义,创建 /var/named/192.168.1.zone 文件。
# 复制模板 cp /var/named/named.local /var/named/192.168.1.zone # 编辑文件 vi /var/named/192.168.1.zone
修改为以下格式:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025102701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name Server (NS) records
@ IN NS ns1.example.com.
; PTR records - 将IP地址映射到主机名
100 IN PTR ns1.example.com.
101 IN PTR www.example.com.
102 IN PTR ftp.example.com.
103 IN PTR mail.example.com.
关键点解释:
zone的名称168.192.in-addr.arpa对应的是 IP 地址168.1.x。PTR(Pointer) 记录是反向解析的核心,它将 IP 地址的最后一段(如100)指向一个完整的主机名(如ns1.example.com.,注意最后的点)。
第四步:设置文件权限和 SELinux
这是在 CentOS 上最容易出错的地方,必须正确设置。
-
设置文件所有者:
named是 BIND 运行时的用户,确保区域数据文件的所有者是named。chown root:named /var/named/example.com.zone chown root:named /var/named/192.168.1.zone
-
设置文件权限:确保
named用户可以读取这些文件。chmod 640 /var/named/example.com.zone chmod 640 /var/named/192.168.1.zone
-
处理 SELinux:CentOS 6.5 默认启用 SELinux,它会阻止 BIND 访问它不应该访问的文件,最简单的方法是为 BIND 设置正确的布尔值。
# 允许 BIND 在非标准端口(如果需要)和写 chroot 目录 setsebool
