1. 概述
本文档介绍在 Ubuntu 26.04 上使用 BIND9 部署私有 DNS 服务器的完整步骤。通过配置正向解析(域名 → IP)和反向解析(IP → 域名),为内网提供域名解析服务。
示例环境:
| 项目 | 值 |
|---|---|
| DNS 服务器 IP | 192.168.100.6 |
| 域名 | ns1.zycgl.com |
| 允许查询网段 | 192.168.100.0/24 |
| 上游转发器 | 223.5.5.5, 223.6.6.6(阿里云 DNS) |
2. 环境准备
2.1 设置时区
bash
sudo timedatectl set-timezone Asia/Shanghai
2.2 更新软件包列表
bash
sudo apt update
3. 安装 BIND9
安装 BIND9 主程序及配套工具:
bash
sudo apt install bind9 bind9-utils bind9-doc -y
安装完成后,BIND9 服务会自动启动。可通过以下命令检查状态:
bash
sudo systemctl status named
4. 配置全局选项
编辑 /etc/bind/named.conf.options,配置监听地址、查询权限和上游转发器。
bash
sudo vim /etc/bind/named.conf.options
完整配置内容:
bash
options {
directory "/var/cache/bind";
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
allow-query { 127.0.0.1; 192.168.100.0/24; };
allow-transfer { none; };
forwarders {
223.5.5.5;
223.6.6.6;
};
forward first;
dnssec-validation auto;
auth-nxdomain no;
recursion yes;
};
参数说明
| 参数 | 说明 |
|---|---|
listen-on port 53 { any; } |
监听所有 IPv4 地址的 53 端口 |
allow-query |
允许发起查询的地址范围 |
allow-transfer { none; } |
禁止区域传输,防止 DNS 信息泄露 |
forwarders |
上游 DNS 转发地址 |
forward first |
优先使用转发器,失败时尝试递归解析 |
recursion yes |
允许递归查询 |
校验配置
bash
sudo named-checkconf
无输出表示配置语法正确。
5. 配置解析区域
编辑 /etc/bind/named.conf.local,添加正向解析和反向解析区域。
bash
sudo vim /etc/bind/named.conf.local
配置内容:
bash
zone "zycgl.com" {
type master;
file "/etc/bind/db.zycgl.com";
};
zone "100.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.100";
};
6. 配置正向解析区域文件
创建并编辑正向解析区域文件 /etc/bind/db.zycgl.com:
bash
sudo vim /etc/bind/db.zycgl.com
完整内容:
bash
$TTL 604800
@ IN SOA ns1.zycgl.com. root.zycgl.com. (
2026062801 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.zycgl.com.
@ IN A 192.168.100.6
ns1 IN A 192.168.100.6
web01 IN A 192.168.100.7
mysql01 IN A 192.168.100.8
记录说明
| 记录 | 类型 | 解析目标 | 说明 |
|---|---|---|---|
@ |
NS | ns1.zycgl.com. |
域名服务器记录 |
@ |
A | 192.168.100.6 |
根域名指向 DNS 服务器本身 |
web01 |
A | 192.168.100.7 |
Web 服务器 01 |
mysql01 |
A | 192.168.100.8 |
MySQL 数据库服务器 |
7. 配置反向解析区域文件
创建并编辑反向解析区域文件 /etc/bind/db.192.168.100:
bash
sudo vim /etc/bind/db.192.168.100
完整内容:
bash
$TTL 604800
@ IN SOA ns1.zycgl.com. root.zycgl.com. (
2026062801 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns1.zycgl.com.
6 IN PTR ns1.zycgl.com.
7 IN PTR web01.zycgl.com.
8 IN PTR mysql01.zycgl.com.
记录说明
| IP 末尾 | PTR 记录 | 对应域名 |
|---|---|---|
6 |
ns1.zycgl.com. |
根域名 |
7 |
web01.zycgl.com. |
Web 服务器 01 |
8 |
mysql01.zycgl.com. |
MySQL 数据库服务器 |
设置文件权限
bash
sudo chown root:bind /etc/bind/db.zycgl.com /etc/bind/db.192.168.100
sudo chmod 640 /etc/bind/db.zycgl.com /etc/bind/db.192.168.100
8. 校验区域文件
在重启服务前,务必校验区域文件语法:
校验正向区域
bash
sudo named-checkzone zycgl.com /etc/bind/db.zycgl.com
期望输出:
zone zycGL.com/IN: loaded serial 1
OK
校验反向区域
bash
sudo named-checkzone 100.168.192.in-addr.arpa /etc/bind/db.192.168.100
期望输出:
zone 100.168.192.in-addr.arpa/IN: loaded serial 1
OK
9. 重启并启用 BIND9 服务
bash
sudo systemctl restart named
sudo systemctl enable named
检查服务状态:
bash
sudo systemctl status named
10. 防火墙配置
如果启用了 UFW 防火墙,需放行 DNS 服务端口:
bash
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw reload
11. 测试验证
11.1 本地测试
在 DNS 服务器本机执行:
bash
# 测试正向解析
dig @127.0.0.1 web01.zycgl.com
# 测试反向解析
dig @127.0.0.1 -x 192.168.100.8
# 测试外网域名(验证转发器)
dig @127.0.0.1 www.baidu.com
11.2 客户端测试
在局域网其他机器上,将 DNS 服务器地址设置为 192.168.100.6,然后测试:
bash
nslookup web01.zycgl.com 192.168.100.6
12. 维护与排错
查看日志
bash
sudo journalctl -u named -f
重新加载配置(不中断服务)
bash
sudo rndc reload
修改区域文件后递增 Serial
每次修改区域文件中的记录时,必须 将 Serial 值加 1,否则从服务器和缓存不会同步更新。
13. 附录
文件清单
| 文件路径 | 用途 |
|---|---|
/etc/bind/named.conf.options |
全局选项配置 |
/etc/bind/named.conf.local |
本地区域声明 |
/etc/bind/db.zycgl.com |
正向解析区域数据 |
/etc/bind/db.192.168.100 |
反向解析区域数据 |
/var/cache/bind |
BIND 工作缓存目录 |
常用命令
| 命令 | 作用 |
|---|---|
named-checkconf |
检查主配置文件语法 |
named-checkzone <zone> <file> |
检查区域文件语法 |
rndc reload |
热重载配置 |
rndc status |
查看服务器状态 |
systemctl restart named |
重启 BIND 服务 |