- 环境准备:安装和配置 BIND。
- 创建正向区域:将域名(如
example.com)解析为 IP 地址。 - 创建反向区域:将 IP 地址解析为域名(反向解析)。
- 配置主从 DNS:实现 DNS 的高可用性。
- 防火墙和 SELinux 配置:确保服务能被正常访问。
- 测试和验证:使用多种工具验证 DNS 服务器是否工作正常。
第 1 步:环境准备
确保您的服务器已经准备好,并且有一个静态的 IP 地址,在本教程中,我们假设:

- 操作系统: CentOS 7
- 服务器 IP 地址:
168.1.100(请替换为您自己的 IP) - 要管理的域名:
example.com(请替换为您自己的域名) - 域名服务器:
ns1.example.com
1 更新系统
sudo yum update -y
2 安装 BIND
BIND 是标准的 DNS 服务器软件。
sudo yum install bind bind-utils -y
bind: DNS 服务器本身。bind-utils: 包含了用于测试 DNS 的客户端工具,如dig,nslookup,host等。
3 检查 BIND 服务状态
systemctl status named
如果服务未运行,可以启动并设置为开机自启:
sudo systemctl start named sudo systemctl enable named
第 2 步:配置 BIND 主配置文件
BIND 的主配置文件是 /etc/named.conf,我们需要对其进行一些基础配置。
1 备份原始配置文件
sudo cp /etc/named.conf /etc/named.conf.bak
2 编辑主配置文件
使用您喜欢的文本编辑器(如 vim 或 nano)打开文件:

sudo vim /etc/named.conf
进行以下关键修改:
-
监听地址:默认情况下,BIND 只监听在本地回环地址
0.0.1上,要让它监听服务器的所有 IP 地址,找到listen-on port 53这一行,将其注释掉或修改为{ any; };。// listen-on port 53 { 127.0.0.1; }; // 注释掉这一行 listen-on port 53 { any; }; // 或者添加这一行 -
允许查询:默认只允许本地查询,我们需要修改为允许来自我们局域网的查询,找到
allow-query这一行,修改为{ any; };(仅用于测试和内网环境)或指定您的网段(如{ 192.168.1.0/24; };)。// allow-query { localhost; }; // 注释掉这一行 allow-query { any; }; // 或者添加这一行 -
允许递归查询:对于公共 DNS 服务器,应谨慎设置递归,但对于内部使用的 DNS 服务器,可以开启,找到
recursion和dnssec-validation部分:
(图片来源网络,侵删)recursion yes; dnssec-validation no; // 如果您的域名没有使用 DNSSEC,可以设为 no
-
区域文件路径:确保
include "/etc/named.rfc1912.zones";和include "/etc/named.root.key";这两行没有被注释掉,这些文件用于定义我们的区域。
修改后的 /etc/named.conf 关键部分可能如下所示:
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { 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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion yes;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
保存并退出文件。
第 3 步:创建正向区域
正向区域负责将域名解析为 IP 地址。
1 在区域配置文件中添加区域
编辑 /etc/named.rfc1912.zones 文件:
sudo vim /etc/named.rfc1912.zones
在文件末尾添加以下内容,创建一个名为 example.com 的主区域:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
type master: 表示这是一个主 DNS 服务器。file "example.com.zone": 指定存储区域数据的文件,这个文件将在/var/named/目录下创建。allow-update { none; }: 禁止动态更新,提高安全性。
2 创建区域数据文件
我们创建 /var/named/ 目录下的 example.com.zone 文件。
复制一个模板文件作为起点:
sudo cp /var/named/named.localhost /var/named/example.com.zone
然后编辑这个新文件:
sudo vim /var/named/example.com.zone
如下,请务必修改 serial、NS、A 记录等为您自己的信息:
$TTL 1D
@ IN SOA ns1.example.com. admin.example.com. (
2025102701 ; serial (YYYYMMDDNN)
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.example.com.
A 192.168.1.100
; Name Server (NS) records
ns1 IN A 192.168.1.100
; Mail exchanger (MX) records
MX 10 mail.example.com.
; Host (A) records
www IN A 192.168.1.101
mail IN A 192.168.1.102
; 可以添加更多记录,
; ftp IN A 192.168.1.103
关键点解释:
$TTL 1D: 默认的生存时间,这里是 1 天。SOA(Start of Authority): 区域的权威记录。serial号码非常重要,每次修改区域文件后,必须递增这个号码(通常按YYYYMMDD格式,后面加两位数字),这样从服务器才能知道区域已更新,我这里用了2025102701,表示 2025年10月27日的第一次更新。NS: 域名服务器记录,指定了哪个服务器负责这个域名。A: 地址记录,将主机名映射到 IP 地址。MX: 邮件交换记录,指定处理该域名邮件的服务器。- : 代表当前区域名,即
example.com。
3 设置正确的文件权限
BIND 进程 (named) 需要能够读取区域文件,确保文件所有者是 named 用户和组。
sudo chown named:named /var/named/example.com.zone sudo chmod 640 /var/named/example.com.zone
第 4 步:创建反向区域
反向区域负责将 IP 地址解析为域名,这对于邮件服务器等应用非常重要。
1 在区域配置文件中添加反向区域
再次编辑 /etc/named.rfc1912.zes 文件:
sudo vim /etc/named.rfc1912.zones
在文件末尾添加以下内容,反向区域的名字是基于 IP 地址网络部分的反向形式,168.1.0/24 的反向区域是 168.192.in-addr.arpa。
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168 