
在本文中,我将通过实践演示如何在 Debian 12 上设置 BIND DNS 服务器。对于网络管理员和开发人员来说,设置域名系统(DNS)服务器是一项至关重要的任务。BIND(伯克利互联网域名)是使用最广泛的 DNS 软件解决方案之一,以其可靠性和灵活性著称。
在开始安装过程之前,请确保您具备以下条件:
首先,在 Debian 12 系统上安装 BIND 及其相关实用程序。
首先,更新系统的软件包列表,确保安装的是最新版本:
sudo apt update
使用以下命令安装 BIND 软件和相关工具:
sudo apt install bind9 bind9utils dnsutils
该命令安装 BIND DNS 服务器、实用程序和 DNS 查找工具。
安装完成后,验证 BIND 版本:
sudo named -v
将看到显示已安装 BIND 版本的输出。

BIND 版本输出
BIND 使用位于 /etc/bind/ 目录下的多个配置文件。让我们来看看这些关键文件:

bind目录文件
named.conf: 这是主配置文件,你会看到最后几行包含其他配置文件的语句。如下:
oneh@ns-01:~$ cat /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
named.conf.options: 该文件包含 DNS 服务器的全局选项:
oneh@ns-01:~$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// ...
// 省略中间的注释
dnssec-validation auto;
listen-on-v6 { any; };
};
named.conf.local: 在这里,可以定义本地区域文件:
oneh@ns-01:~$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
配置 BIND 服务器的主要选项。
使用任意编辑器打开并编辑 named.conf.options 文件,添加以下配置:
options {
directory "/var/cache/bind"; //工作目录
recursion yes; // 开启递归查询
allow-recursion { trusted; };
listen-on { 192.168.2.201; };
allow-transfer { none; };
forwarders {
223.5.5.5;
223.6.6.6;
}; // 转发查询到公共DNS
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; }; // 监听所有IPv6地址
};
该配置设置了转发器(使用 阿里云 服务器),启用了受信任客户端的递归,并配置了监听接口。
要限制对受信任网络的查询,请在 named.conf.options 文件开头添加 ACL:
acl "trusted" {
192.168.2.0/24;
localhost;
localnets;
};

为域名设置正向和反向区域。
编辑named.conf.local文件,添加如下定义:
zone "oneh.com" {
type master; // 主服务器
file "/etc/bind/zones/cluster.oneh.com"; // 区域文件路径
allow-transfer { none; };
};
为区域文件创建一个新目录:
sudo mkdir /etc/bind/zones
创建并编辑区域文件添加如下内容:
oneh@ns-01:/etc/bind$ sudo vi /etc/bind/zones/cluster.oneh.com
oneh@ns-01:/etc/bind$ cat /etc/bind/zones/cluster.oneh.com
$TTL 604800
@ IN SOA ns-01.oneh.com. admin.oneh.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns-01.oneh.com.
@ IN A 192.168.2.201
ns-01 IN A 192.168.2.201
www IN A 192.168.2.201
将反向区域添加到 named.conf.local:
// 反向区域
zone "2.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/cluster.192.168.2";
allow-transfer { none; };
};
创建并编辑区域文件添加如下内容:
oneh@ns-01:/etc/bind$ sudo vi /etc/bind/zones/cluster.192.168.2
oneh@ns-01:/etc/bind$ cat /etc/bind/zones/cluster.192.168.2
$TTL 604800
@ IN SOA ns-01.oneh.com. admin.oneh.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns-01.oneh.com.
201 IN PTR ns-01.oneh.com.
201 IN PTR www.oneh.com.
在重新启动 BIND 服务之前,检查是否存在任何配置错误至关重要。
运行命令 sudo named-checkconf 检查配置文件的语法是否正确。如果正确将没有任何输出,否则将予以提示错误语法的文件以及出错的位置。
使用如下命令验证区域文件:
sudo named-checkzone oneh.com /etc/bind/zones/cluster.oneh.com
sudo named-checkzone 2.168.192.in-addr.arpa /etc/bind/zones/cluster.192.168.2
如果区域文件格式正确,这些命令应返回 “OK”,如下图:

现在已经配置好 BIND,启动服务并使其在开机时启动。
注意:下面的命令如果提示报错找不到 bind9 服务,请使用 named。
sudo systemctl start bind9sudo systemctl enable bind9sudo systemctl status bind9

测试 BIND 服务器,确保它能正确解析名称。
测试正向查找:
dig @192.168.2.201 www.oneh.com

测试反向查找:
dig @192.168.2.201 -x 192.168.2.201

测试正向查找:
nslookup www.oneh.com 192.168.2.201
测试反向解析:
nslookup 192.168.2.201 192.168.2.201

在正向区域文件添加两条记录,重启 bind9 服务后测试:
esxi-01 IN A 192.168.2.200
vcenter IN A 192.168.2.202

在反向区域添加两条记录,重启 bind9 服务后在局域网内其他设备添加DNS服务器地址后测试:


即使进行了细心配置,也可能会遇到一些问题。
使用命令sudo journalctl -u named查找可能显示配置问题的错误信息。
如果域名解析没用,请: