Ubuntu 26.04部署 DNS 服务器

1. 概述

本文档介绍在 Ubuntu 26.04 上使用 BIND9 部署私有 DNS 服务器的完整步骤。通过配置正向解析(域名 → IP)和反向解析(IP → 域名),为内网提供域名解析服务。

示例环境:

项目
DNS 服务器 IP192.168.100.6
域名ns1.zycgl.com
允许查询网段192.168.100.0/24
上游转发器223.5.5.5,223.6.6.6(阿里云 DNS)

2. 环境准备

2.1 设置时区

sudotimedatectl set-timezone Asia/Shanghai

2.2 更新软件包列表

sudoaptupdate

3. 安装 BIND9

安装 BIND9 主程序及配套工具:

sudoaptinstallbind9 bind9-utils bind9-doc-y

安装完成后,BIND9 服务会自动启动。可通过以下命令检查状态:

sudosystemctl status named

4. 配置全局选项

编辑/etc/bind/named.conf.options,配置监听地址、查询权限和上游转发器。

sudovim/etc/bind/named.conf.options

完整配置内容:

options{directory"/var/cache/bind";listen-on port53{any;};listen-on-v6 port53{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;recursionyes;};

参数说明

参数说明
listen-on port 53 { any; }监听所有 IPv4 地址的 53 端口
allow-query允许发起查询的地址范围
allow-transfer { none; }禁止区域传输,防止 DNS 信息泄露
forwarders上游 DNS 转发地址
forward first优先使用转发器,失败时尝试递归解析
recursion yes允许递归查询

校验配置

sudonamed-checkconf

无输出表示配置语法正确。


5. 配置解析区域

编辑/etc/bind/named.conf.local,添加正向解析和反向解析区域。

sudovim/etc/bind/named.conf.local

配置内容:

zone"zycgl.com"{typemaster;file"/etc/bind/db.zycgl.com";};zone"100.168.192.in-addr.arpa"{typemaster;file"/etc/bind/db.192.168.100";};

6. 配置正向解析区域文件

创建并编辑正向解析区域文件/etc/bind/db.zycgl.com

sudovim/etc/bind/db.zycgl.com

完整内容:

$TTL604800@ IN SOA ns1.zycgl.com. root.zycgl.com.(2026062801;Serial604800;Refresh86400;Retry2419200;Expire604800);Negative Cache TTL @ IN NS ns1.zycgl.com. @ IN A192.168.100.6 ns1 IN A192.168.100.6 web01 IN A192.168.100.7 mysql01 IN A192.168.100.8

记录说明

记录类型解析目标说明
@NSns1.zycgl.com.域名服务器记录
@A192.168.100.6根域名指向 DNS 服务器本身
web01A192.168.100.7Web 服务器 01
mysql01A192.168.100.8MySQL 数据库服务器

7. 配置反向解析区域文件

创建并编辑反向解析区域文件/etc/bind/db.192.168.100

sudovim/etc/bind/db.192.168.100

完整内容:

$TTL604800@ IN SOA ns1.zycgl.com. root.zycgl.com.(2026062801;Serial604800;Refresh86400;Retry2419200;Expire604800);Negative Cache TTL @ IN NS ns1.zycgl.com.6IN PTR ns1.zycgl.com.7IN PTR web01.zycgl.com.8IN PTR mysql01.zycgl.com.

记录说明

IP 末尾PTR 记录对应域名
6ns1.zycgl.com.根域名
7web01.zycgl.com.Web 服务器 01
8mysql01.zycgl.com.MySQL 数据库服务器

设置文件权限

sudochownroot:bind /etc/bind/db.zycgl.com /etc/bind/db.192.168.100sudochmod640/etc/bind/db.zycgl.com /etc/bind/db.192.168.100

8. 校验区域文件

在重启服务前,务必校验区域文件语法:

校验正向区域

sudonamed-checkzone zycgl.com /etc/bind/db.zycgl.com

期望输出:

zone zycGL.com/IN: loaded serial 1 OK

校验反向区域

sudonamed-checkzone100.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 服务

sudosystemctl restart namedsudosystemctlenablenamed

检查服务状态:

sudosystemctl status named

10. 防火墙配置

如果启用了 UFW 防火墙,需放行 DNS 服务端口:

sudoufw allow53/tcpsudoufw allow53/udpsudoufw reload

11. 测试验证

11.1 本地测试

在 DNS 服务器本机执行:

# 测试正向解析dig@127.0.0.1 web01.zycgl.com# 测试反向解析dig@127.0.0.1-x192.168.100.8# 测试外网域名(验证转发器)dig@127.0.0.1 www.baidu.com

11.2 客户端测试

在局域网其他机器上,将 DNS 服务器地址设置为192.168.100.6,然后测试:

nslookupweb01.zycgl.com192.168.100.6

12. 维护与排错

查看日志

sudojournalctl-unamed-f

重新加载配置(不中断服务)

sudorndc 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/bindBIND 工作缓存目录

常用命令

命令作用
named-checkconf检查主配置文件语法
named-checkzone <zone> <file>检查区域文件语法
rndc reload热重载配置
rndc status查看服务器状态
systemctl restart named重启 BIND 服务