在内部网络环境中,自建DNS服务器可以让主机之间通过域名互相访问,而不必记忆IP地址。CentOS作为常见的Linux服务器发行版,软件仓库中自带了Bind9,部署一套内部解析服务并不复杂。整个过程包括安装软件、编写主配置和区域文件、启动服务以及验证解析结果。下面先从安装和基础环境准备开始。

安装Bind9与检查运行环境
在CentOS 7及以上的发行版中,bind软件包直接由官方仓库提供,使用yum或dnf命令即可完成安装。安装前建议先更新系统软件源索引,然后安装bind和bind-utils两个包。bind是DNS服务主程序,bind-utils提供dig、nslookup、host等实用的解析测试工具。安装完成后,主要的配置文件位于/etc/named.conf,区域数据文件默认放在/var/named目录下,服务名称为named。
安装完bind之后,不要急着启动服务,先确认系统防火墙和SELinux的策略。DNS服务使用TCP和UDP的53端口,TCP 53主要用于区域传送和较大的响应,UDP 53负责常规查询。如果防火墙处于运行状态,需要放行这两个协议端口。对于SELinux,named服务在默认策略下已经可以读取/var/named目录,但如果把区域文件放在自定义路径,就需要修改文件上下文或设置named_write_master_zones布尔值。
检查named的版本和配置文件基本结构,可以用named -v命令查看版本。此时可以顺便确认named用户是否存在,因为named服务通常以named用户身份运行,区域文件必须允许该用户读取。环境准备完毕后,再开始编写配置。
yum install -y bind bind-utils systemctl enable named firewall-cmd --permanent --add-service=dns firewall-cmd --reload
配置主DNS区域与解析记录
named.conf是Bind9的主配置文件,采用C语言风格的语句块。打开/etc/named.conf后,首先会看到options段落,里面包含listen-on、listen-on-v6、directory、allow-query等指令。如果要让DNS监听所有网卡,需要把listen-on port 53改成any,或者直接注释掉该行。directory指令指定区域文件的默认目录,通常保持/var/named即可。allow-query控制哪些客户端可以查询,默认localhost,局域网使用时可以改成any或者具体的网段。
在options后面或者文件末尾,可以添加zone声明。正向解析区域负责将域名映射为IP地址,反向解析区域则根据IP查询域名。一个典型的主区域声明包含type master、file文件名和allow-update等参数。file参数指定的文件必须放在directory定义的目录中。
创建区域文件时,需要从SOA记录开始。SOA记录包含主DNS服务器名称、管理员邮箱、序列号以及刷新、重试、过期等时间参数。括号内的时间单位可以是数字,默认秒。之后的NS记录声明区域中的名称服务器,A记录把主机名指向IP,CNAME负责别名,MX记录处理邮件路由。反向区域文件则使用PTR记录,把IP地址最后一段映射回完整域名。
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
directory "/var/named";
allow-query { any; };
recursion yes;
};
zone "ipipp.com" IN {
type master;
file "ipipp.com.zone";
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
};
正向区域文件的内容相对固定,开头设置默认生存时间,然后定义SOA和NS记录。主机记录根据实际网络规划填写,例如将www主机的A记录指向Web服务器IP。CNAME记录用于别名,MX记录指向邮件服务器。需要注意的是,区域文件中域名后面要加上点号表示完整名称,否则会被当作相对于当前域名的名称。
$TTL 86400
@ IN SOA ns1.ipipp.com. admin.ipipp.com. (
2025010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.ipipp.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
mail IN A 192.168.1.30
@ IN MX 10 mail.ipipp.com.
ftp IN CNAME www.ipipp.com.
反向区域文件用于根据IP查询域名,PTR记录将IP最后一段指向完整域名。反向区域的名称通常写作反写的网段加上in-addr.arpa,例如192.168.1.0/24对应的区域名是1.168.192.in-addr.arpa。反向解析不强制要求配置,但在某些需要验证来源的系统中比较有用。
$TTL 86400
@ IN SOA ns1.ipipp.com. admin.ipipp.com. (
2025010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.ipipp.com.
10 IN PTR ns1.ipipp.com.
20 IN PTR www.ipipp.com.
30 IN PTR mail.ipipp.com.
启动服务与验证解析结果
完成配置后,不要直接重启named。先使用named-checkconf检查主配置文件语法,如果没有任何输出,说明语法正确;如果有错误,会显示具体行号和提示。接着用named-checkzone命令检查区域文件。例如检查正向区域ipipp.com,命令格式是named-checkzone ipipp.com /var/named/ipipp.com.zone。反向区域同理。确认所有配置无误后,再通过systemctl start named启动服务。
启动后,使用systemctl status named查看运行状态。如果启动失败,可以查看/var/log/messages或使用journalctl -u named查看详细日志。常见问题包括区域文件权限不足、SOA记录括号不匹配、缺少NS记录、序列号格式错误等。对于权限问题,可以使用chown named:named /var/named/ipipp.com.zone来调整所有者。
服务运行正常后,用dig和nslookup进行实际查询。dig @127.0.0.1 www.ipipp.com可以直接指定本地DNS服务器进行解析,如果返回ANSWER SECTION中包含192.168.1.20,说明正向解析成功。反向解析使用dig -x 192.168.1.20,或者nslookup 192.168.1.20。测试时注意域名末尾的点代表绝对域名,区域配置中不能省略。
named-checkconf named-checkzone ipipp.com /var/named/ipipp.com.zone systemctl start named systemctl status named dig @127.0.0.1 www.ipipp.com dig -x 192.168.1.20
配置转发器与安全加固
如果内部DNS需要解析外部域名,可以在options中配置forwarders,将无法解析的请求转发给运营商DNS或公共DNS,例如223.5.5.5和223.6.6.6。开启转发后,Bind9会先尝试本地区域解析,未命中时转发给上游DNS。通常设置forward only,避免递归查询直接访问根服务器,降低解析延迟和外部流量。
为了安全,除非是面向所有客户端开放的公共DNS,否则建议将allow-query和allow-recursion限制为内网网段。allow-query控制谁能查询,allow-recursion控制谁能使用递归服务。如果只允许192.168.1.0/24网段访问,可以写成allow-query { 192.168.1.0/24; };。同时关闭不需要的查询来源,减少被利用进行DNS放大攻击的风险。
另外,Bind9支持chroot环境运行,但CentOS仓库版本默认没有启用,需要手动配置比较繁琐。对于一般内部部署,更实际的做法是限制named进程运行用户、设置区域文件为只读,并定期查看查询日志。如果需要对外提供DNS服务,还应该配置allow-transfer,只允许指定从服务器进行区域传送,避免区域数据被恶意拉取。
options {
directory "/var/named";
allow-query { 192.168.1.0/24; };
allow-recursion { 192.168.1.0/24; };
allow-transfer { none; };
forwarders {
223.5.5.5;
223.6.6.6;
};
forward only;
};
完成以上步骤后,一台基于CentOS的Bind9 DNS服务器就可以稳定运行了。无论是内部主机名解析,还是作为上游DNS的转发节点,这套配置都能满足日常需求。遇到解析不生效时,优先检查区域文件序列号是否递增、SOA记录括号是否闭合,以及防火墙是否真正放行了53端口。
CentOS DNS服务器Bind9部署DNS区域解析修改时间:2026-09-21 00:00:50