在Linux系统中配置DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器软件之一,下面将详细介绍在Linux环境下配置DNS服务器的步骤,包括安装、配置文件解析、区域文件创建、服务启动及测试等全过程。

安装BIND软件
首先需要确保系统已安装BIND相关软件包,以CentOS/RHEL为例,使用yum命令进行安装:
sudo yum install bind bind-utils -y
对于Ubuntu/Debian系统,则使用apt命令:
sudo apt install bind9 bind9utils -y
安装完成后,检查BIND服务状态:
sudo systemctl status named
若未启动,可使用sudo systemctl start named命令启动,并通过sudo systemctl enable named设置开机自启。

主配置文件解析
BIND的主配置文件为/etc/named.conf,该文件定义了服务器的全局参数、区域声明及访问控制等,以下是关键配置项说明:
-
全局选项:位于
options语句块中,定义服务器的基本行为,如监听地址、转发配置等。options { listen-on port 53 { any; }; // 监听所有接口的53端口 directory "/var/named"; // 区域文件存放目录 allow-query { any; }; // 允许所有客户端查询 recursion yes; // 启用递归查询 }; -
区域声明:用于定义DNS服务器 authoritative 的区域,添加一个正向区域
example.com和反向区域168.192.in-addr.arpa(假设内网网段为192.168.1.0/24):zone "example.com" IN { type master; // 主DNS服务器 file "example.com.zone"; // 区域文件名 allow-update { none; }; // 禁止动态更新 }; zone "1.168.192.in-addr.arpa" IN { type master; file "192.168.1.db"; };
创建区域文件
区域文件存储在/var/named目录下,需根据named.conf中定义的文件名创建,正向区域文件example.com.zone内容如下:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025081501 ; 序列号,需修改
3600 ; 刷新间隔
1800 ; 重试间隔
604800 ; 过期时间
86400 ) ; 最小TTL
IN NS ns1.example.com.
IN MX 10 mail.example.com.
ns1 IN A 192.168.1.10
mail IN A 192.168.1.20
www IN A 192.168.1.30
反向区域文件168.1.db内容如下:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2025081501
3600
1800
604800
86400 )
IN NS ns1.example.com.
10 IN PTR ns1.example.com.
20 IN PTR mail.example.com.
30 IN PTR www.example.com.
注意:区域文件的权限需设置为named用户可读,可通过sudo chown named:named /var/named/*.zone调整。
配置日志与安全
为增强安全性,可在named.conf中添加访问控制列表(ACL)和日志配置:
acl "trusted" {
192.168.1.0/24; // 信任的内网网段
};
options {
allow-query { trusted; }; // 仅允许信任网段查询
logging {
channel "default_log" {
file "/var/log/named/named.log" versions 3 size 1m;
severity info;
print-time yes;
};
category default { default_log; };
};
};
创建日志目录并设置权限:
sudo mkdir -p /var/log/named sudo chown named:named /var/log/named
启动服务与测试
-
检查配置文件语法:
sudo named-checkconf sudo named-checkzone example.com /var/named/example.com.zone sudo named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.db
若无输出则表示语法正确。
-
重启服务:
sudo systemctl restart named
-
测试DNS解析:
- 使用
dig或nslookup命令测试正向解析:dig @192.168.1.10 www.example.com nslookup 192.168.1.10
- 检查日志文件确认查询记录:
tail -f /var/log/named/named.log
- 使用
常见问题排查
- 权限问题:确保区域文件所有者为
named,且权限为640。 - 端口占用:若53端口被占用,可通过
netstat -tuln | grep 53检查,并修改named.conf中的listen-on端口。 - 序列号错误:区域文件中序列号未递增会导致区域传输失败。
相关问答FAQs
问题1:如何配置DNS转发器?
答:在named.conf的options语句块中添加forwarders参数,
options {
forwarders { 8.8.8.8; 114.114.114.114; }; // 转发至公共DNS
forward only; // 强制转发,不进行递归查询
};
修改后重启服务即可生效。
问题2:如何实现DNS动态更新?
答:需在区域声明中允许特定客户端动态更新,并配置TSIG密钥认证。
-
生成TSIG密钥:
sudo dnssec-keygen -a HMAC-MD5 -b 128 -n HOST update-client.example.com
-
提取密钥并添加至
named.conf的key和zone语句块:key "update-key" { algorithm HMAC-MD5; secret "生成的密钥字符串"; }; zone "example.com" IN { type master; file "example.com.zone"; allow-update { key update-key; }; }; -
在客户端使用
nsupdate命令动态更新记录。
