Ubuntu Linux 如何部署DNS服务器

2025-10-28 21:33:00
丁国栋
原创 24
摘要:本文记录和汇总与Ubuntu Linux 搭建DNS服务器相关的知识。

在 Ubuntu Linux 上部署 DNS 服务器并配置域名解析可以通过 BIND9(Berkeley Internet Name Domain)实现。


一、安装 BIND9

sudo apt update
sudo apt install bind9 bind9utils bind9-dnsutils -y

二、配置 BIND9 主配置文件

  1. 编辑主配置文件 /etc/bind/named.conf.options

    sudo vim /etc/bind/named.conf.options

    添加以下内容(根据需求调整):

    options {
       directory "/var/cache/bind";
       recursion yes; // 允许递归查询(适用于本地客户端)
       allow-query { any; }; // 允许所有客户端查询(或限制为特定IP,如 192.168.1.0/24)
       forwarders {
           119.29.29.29;
           223.6.6.6;
       }; // 转发未知查询到公共DNS
       dnssec-validation auto;
       listen-on { any; }; // 监听所有接口
    };
  2. 检查语法错误:

    sudo named-checkconf

三、添加自定义域名(正向和反向解析)

1. 创建正向解析文件

假设域名为 example.com,编辑新文件:

sudo vim /etc/bind/db.example.com

内容示例:

$TTL 86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                          2025102801 ; Serial
                          3600       ; Refresh
                          1800       ; Retry
                          604800     ; Expire
                          86400      ; Minimum TTL
                      )
@       IN      NS      ns1.example.com.
@       IN      A       192.168.1.100    ; 域名指向的IP
ns1     IN      A       192.168.1.100    ; DNS服务器记录
www     IN      A       192.168.1.101    ; 子域名解析
*       IN      A       192.168.1.102    ; 通配符解析

注:默认最小 TTL:1 秒。TTL 过小:客户端频繁查询,增加服务器负载。TTL 过大:变更生效延迟(需等待缓存过期)。

根据场景选择合理的 TTL:

场景 推荐 TTL 说明
生产环境(稳定记录) 86400(24 小时) 适合极少变更的记录(如 NS 记录、主域名 A 记录)。
通用默认值 3600(1 小时) 平衡缓存效率与变更灵活性。
频繁变更的记录 300(5 分钟) 适用于测试环境或需要快速生效的变更(如 CDN、负载均衡)。
临时调试 60(1 分钟) 快速验证变更,但会增加 DNS 服务器负载。

2. 创建反向解析文件(可选)

编辑反向解析文件(假设IP段为 192.168.1):

sudo vim /etc/bind/db.192.168.1

内容示例:

$TTL 86400
@       IN      SOA     ns1.example.com. admin.example.com. (
                          2025102801 ; Serial
                          3600       ; Refresh
                          1800       ; Retry
                          604800     ; Expire
                          86400      ; Minimum TTL
                      )
@       IN      NS      ns1.example.com.
100     IN      PTR     ns1.example.com. ; 192.168.1.100
101     IN      PTR     www.example.com. ; 192.168.1.101

在 BIND9 的正向解析文件(如 /etc/bind/db.example.com)中,SOA 记录中的邮件地址并不强制要求使用 example.com域名,但需要符合 DNS 标准格式: 1. 用点 '.' 替代 '@';2. 允许使用其他域名;3. 末尾必须带根域点(.)。SOA 记录中的邮件地址不必是 example.com,但必须符合 DNS 格式规范(用 .替代 @并补全根域点)。实际应用中,建议使用管理员真实邮箱以方便运维。

在 BIND9 的 DNS 配置中,SOA(Start of Authority)记录中的 Serial 字段是非常重要的,它用于标识 DNS 区域文件的版本号,确保 DNS 记录的变更能够被正确同步到从服务器(Slave DNS)和客户端缓存。Serial 必须递增以触发同步。推荐格式:YYYYMMDDNN(如 2025102801)。

注意: SOA 邮件地址是公开信息,若担心垃圾邮件,可使用专用邮箱(如 dns@example.com)。

注:明确指定的子域名记录优先级高于泛解析。泛解析(*)不匹配根域名(如 example.com),需单独配置根域名记录。反向解析(PTR记录)不支持通配符,必须为每个IP单独配置。


四、引用域配置文件

编辑 /etc/bind/named.conf.local

sudo vim /etc/bind/named.conf.local

添加以下内容:

zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
};
zone "1.168.192.in-addr.arpa" { // 反向解析区域(根据IP段调整)
    type master;
    file "/etc/bind/db.192.168.1";
};

五、检查配置语法

sudo named-checkzone example.com /etc/bind/db.example.com
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
sudo named-checkconf

六、重启 BIND9 并测试

sudo systemctl restart bind9
sudo systemctl enable bind9

测试解析结果

# 使用dig测试正向解析
dig @localhost ns1.example.com
# 测试反向解析
dig @localhost -x 192.168.1.100

七、客户端配置

将客户端的DNS服务器设置为Ubuntu服务器的IP地址(如 192.168.1.100),或在路由器中全局配置。

DNS 服务器自身的配置,以 netplan 为例:

network:
  version: 2
  renderer: networkd  # 或 NetworkManager(Ubuntu Desktop)
  ethernets:
    eth0:  # 替换为你的网卡名称(如 ens33、enp0s3)
      dhcp4: true
      dhcp4-overrides:
        use-dns: false  # 禁用 DHCP 提供的 DNS
      nameservers:
        addresses: [127.0.0.1]  # 强制使用本地 DNS

使用 resolvectl status 查看当前 DNS 服务器配置。


常见问题

  1. 防火墙放行DNS端口(53)

    sudo ufw allow 53/tcp
    sudo ufw allow 53/udp
  2. 日志查看

    tail -f /var/log/syslog | grep named
  3. 修改Serial:每次更新解析记录后,需递增SOA记录中的Serial(如 2025102801 → 2025102802)。如果没有从服务器,可以忽略。修改后建议使用命令 rndc reload 重载配置。


发表评论
博客分类