Linux DNS服务器配置的核心是掌握BIND(Berkeley Internet Name Domain)的安装、区域文件编写与安全加固,无论你是为内网提供域名解析,还是搭建公网权威DNS,只要遵循“安装BIND → 配置主配置文件 → 定义区域文件 → 设置防火墙与SELinux → 验证解析”这条主线,就能快速构建稳定、安全的DNS服务,对于大多数中小企业,建议采用主从架构提升高可用性,并开启DNSSEC与ACL访问控制来抵御常见攻击。
安装BIND并启动服务
在主流Linux发行版中,BIND软件包名称通常为bind或bind9,以CentOS/RHEL系为例:
yum install -y bind bind-utils systemctl enable --now named
Ubuntu/Debian系使用:
apt install -y bind9 systemctl enable --now bind9
安装完成后,务必检查named进程是否正常运行,并确认监听端口53(TCP/UDP):
ss -lunpt | grep :53
核心配置文件解析
BIND的主配置文件为/etc/named.conf(CentOS)或/etc/bind/named.conf(Ubuntu),配置逻辑分为三部分:
- 全局选项:定义监听地址、允许查询的客户端范围、转发器等。
- 区域声明:指定域名对应的区域文件路径以及区域类型(master/slave/forward)。
- ACL与日志:定义访问控制列表并记录查询日志。

一个典型的基础配置片段:
options {
listen-on port 53 { any; };
allow-query { 192.168.1.0/24; 127.0.0.1; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
};
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
重点:allow-query 务必限定为内网网段或具体IP,避免成为开放递归解析器,被利用发起DDoS反射攻击。
编写区域文件(正向与反向)
区域文件存放在/var/named/(CentOS)或/var/lib/bind(Ubuntu)目录下,正向区域文件示例:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2026031401 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
IN NS ns1.example.com.
IN MX 10 mail.example.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
mail IN A 192.168.1.30
反向区域文件用于IP反解,文件名应与网段对应,如168.1.zone包含PTR记录:
10 IN PTR ns1.example.com. 20 IN PTR www.example.com.

编写区域文件时,特别注意SOA记录中的serial序列号,每次修改文件后必须递增该数字,否则从服务器不会同步更新。
防火墙与SELinux放行
许多配置完就失败的案例,根因是防火墙或SELinux拦截,执行:
firewall-cmd --permanent --add-service=dns firewall-cmd --reload
SELinux开启时,必须给区域文件添加正确的上下文标签:
restorecon -Rv /var/named
验证配置语法:
named-checkconf /etc/named.conf named-checkzone example.com /var/named/example.com.zone
全部通过后,重启named服务并测试:
dig @127.0.0.1 www.example.com
经验案例:将DNS服务与云主机监控联动
在酷番云部署DNS服务器时,我们建议将BIND运行在高性能云主机上,并利用酷番云的云监控产品对UDP 53端口进行可用性探测,有一次客户的内网DNS解析突然超时,排查发现是某条攻击流量占满了带宽,我们通过酷番云控制台的流量监控图表,精准定位到攻击来源IP,随后在named.conf中添加ACL黑名单并启用rate-limit,问题立即解决。
具体方案:在options中加入
rate-limit {
responses-per-second 5;
slip 2;
};

同时配合酷番云的安全组,只允许内网subnet访问53端口,从而将云平台的安全能力与BIND自身防护结合,形成双重防线。
常见问题与解决方案
- 解析成功但ping不到域名:检查云主机安全组是否放行ICMP,以及
/etc/resolv.conf是否指向DNS服务器。 - 从服务器无法同步区域:确认主服务器的
allow-transfer已允许从服务器IP,并保证序列号已递增。
相关问答
问题1:CNAME记录和A记录应该优先使用哪种?
解答:如果目标主机IP可能变化,推荐用CNAME指向一个稳定的A记录别名,这样IP变更时只需修改一条记录,但注意CNAME不能与MX、NS等其他记录共存于同一名称,根域名也不能使用CNAME,对于性能极端敏感的高并发场景,直接使用A记录可减少一次额外查询,但维护成本稍高。
问题2:非权威DNS服务器如何缓存并加速外部域名解析?
解答:配置forwarders指向公共DNS(如223.5.5.5、119.29.29.29),并开启递归查询,同时调大cache-file或使用rndc flush管理缓存,更进阶的做法是部署Unbound作为递归层,将BIND作为权威层,各自发挥优势。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/756545.html

