在Linux系统中配置DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器软件之一,下面将详细介绍在Linux系统上安装、配置和管理DNS服务器的完整步骤,包括主配置文件、区域文件设置、启动服务及常见问题处理。

安装BIND软件
首先需要确保系统已安装BIND相关软件包,以Ubuntu/Debian系统为例,使用以下命令安装:
sudo apt update sudo apt install bind9 bind9utils bind9-doc
对于CentOS/RHEL系统,则使用:
sudo yum install bind bind-utils
安装完成后,BIND服务会自动启动,可通过systemctl status bind9(Ubuntu)或systemctl status named(CentOS)检查服务状态。
主配置文件解析
BIND的主配置文件为/etc/bind/named.conf(Ubuntu)或/etc/named.conf(CentOS),该文件包含全局参数、区域声明和选项设置,以下是关键配置项说明:

| 配置项 | 说明 | 示例 |
|---|---|---|
| options | 定义服务器全局行为 | directory "/var/cache/bind"; 指定区域文件存储目录 |
| zone | 定义DNS区域 | zone "example.com" { type master; file "/etc/bind/db.example.com"; }; |
| acl | 访问控制列表 | acl "trusted" { 192.168.1.0/24; localhost; }; |
在options段落中,需修改listen-on和allow-query参数以限制访问:
listen-on port 53 { 127.0.0.1; 192.168.1.1; }; // 监听特定IP
allow-query { localhost; 192.168.1.0/24; }; // 允许查询的网段
创建区域文件
区域文件存储DNS记录的详细信息,以正向区域example.com为例,创建文件/etc/bind/db.example.com:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025081501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
IN A 192.168.1.1
ns1 IN A 192.168.1.1
www IN A 192.168.1.10
mail IN CNAME www.example.com.
反向区域文件/etc/bind/db.192.168.1用于解析IP到域名:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025081501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
1 IN PTR ns1.example.com.
10 IN PTR www.example.com.
配置区域声明
在named.conf中添加正向和反向区域声明:

zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-transfer { 192.168.1.2; }; // 允许从服务器同步
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};
启动与测试服务
配置完成后,检查语法错误并重启服务:
sudo named-checkconf // 检查主配置文件 sudo named-checkzone example.com /etc/bind/db.example.com // 检查区域文件 sudo systemctl restart bind9
使用dig或nslookup测试解析:
dig @127.0.0.1 www.example.com nslookup 192.168.1.10
安全加固建议
- 限制查询范围:在
options中设置allow-query { localhost; trusted; };仅允许授权客户端查询。 - 启用DNSSEC:通过
dnssec-keygen生成密钥并在区域中添加DNSKEY和RRSIG记录。 - 日志监控:配置
logging段落记录查询日志,便于审计。
常见问题处理
- 服务启动失败:检查
/var/log/syslog或/var/log/named/named.log中的错误信息,常见问题包括权限错误或区域文件语法错误。 - 解析超时:确认防火墙(如ufw)允许53端口通信,检查
allow-query设置是否正确。
相关问答FAQs
Q1: 如何配置DNS服务器实现域名转发?
A1: 在named.conf的options段落中添加forwarders指令,
forwarders { 8.8.8.8; 114.114.114.114; };
forward only; // 仅转发不递归
这样所有无法本地解析的查询将转发至指定的上游DNS服务器。
Q2: 如何为子域(如test.example.com)创建独立的DNS区域?
A2: 需在named.conf中新增子域区域声明,并创建对应的区域文件。
zone "test.example.com" {
type master;
file "/etc/bind/db.test.example.com";
};
在区域文件中添加子域的NS和A记录,同时确保父域example.com的NS记录指向子域的权威服务器。
