Ubuntu 26.04部署 DNS 服务器

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 服务