凌峰创科服务平台

Ubuntu如何配置DNS服务器?

  1. 配置本地 DNS 缓存服务器 (推荐家庭/办公室用户)

    Ubuntu如何配置DNS服务器?-图1
    (图片来源网络,侵删)
    • 目的:加速域名解析,减少对外部 DNS 服务器的请求,提高上网速度,并能实现简单的域名过滤。
    • 软件dnsmasq,它轻量、高效,集成了 DNS 缓存、DHCP 和 TFTP 功能。
  2. 配置权威 DNS 服务器 (推荐网站管理员/网络管理员)

    • 目的:为你的域名(如 yourdomain.com)提供 DNS 记录,让互联网上的用户能够通过域名访问你的服务。
    • 软件bind9 (Berkeley Internet Name Domain),是目前最流行、功能最强大的开源 DNS 服务器软件。

配置本地 DNS 缓存服务器 (使用 Dnsmasq)

这是在 Ubuntu 桌面或服务器上最简单、最有效的优化 DNS 的方法。

第 1 步:安装 Dnsmasq

sudo apt update
sudo apt install dnsmasq

安装完成后,dnsmasq 会自动作为一个服务启动。

第 2 步:配置 Dnsmasq

我们需要创建一个自定义的配置文件,而不是直接修改主配置文件 /etc/dnsmasq.conf,以便于后续升级。

Ubuntu如何配置DNS服务器?-图2
(图片来源网络,侵删)
sudo nano /etc/dnsmasq.d/custom.conf

粘贴到文件中,下面是一个配置示例,并附有详细解释:

# 监听所有网络接口 (0.0.0.0),默认只监听 localhost (127.0.0.1)。
# 如果你希望局域网内的其他设备也能使用这个 DNS 服务器,需要取消注释这行。
# listen-address=127.0.0.1,192.168.1.1 
# 指定上游 DNS 服务器,当 dnsmasq 缓存中没有结果时,会向这些服务器查询。
# 推荐使用公共 DNS,如 Cloudflare (1.1.1.1) 或 Google (8.8.8.8)。
server=1.1.1.1
server=8.8.8.8
# 强制所有 DNS 查询都通过 dnsmasq,而不是使用系统默认的 DNS。
# 这对于防止 DNS 泄露非常重要。
no-resolv
# 添加自定义的域名解析。
# 格式:address=/域名/IP地址
# 将 allinone.local 解析到 192.168.1.100
# address=/allinone.local/192.168.1.100
# 添加自定义的域名到服务器的映射。
# 格式:server=/域名/上游DNS服务器IP
# 将 *.internal.yourdomain.com 的查询转发到内部 DNS 服务器 192.168.1.53
# server=/internal.yourdomain.com/192.168.1.53
# 启用日志功能,方便排查问题。
# 日志会输出到 /var/log/syslog
log-queries

保存并退出:在 nano 中,按 Ctrl+X,然后按 Y,最后按 Enter

第 3 步:配置系统使用 Dnsmasq

我们需要修改系统的网络配置,让所有 DNS 请求都指向 dnsmasq

  1. 编辑 Netplan 配置文件 (适用于 Ubuntu 18.04 及更新版本):

    Ubuntu如何配置DNS服务器?-图3
    (图片来源网络,侵删)
    sudo nano /etc/netplan/01-netcfg.yaml

    找到 dns 部分,并将其修改为 nameservers,并指向 localhost

    network:
      version: 2
      renderer: networkd
      ethernets:
        ens33: # 替换为你的网卡名称
          dhcp4: yes
          # --- 修改下面这部分 ---
          nameservers:
            addresses: [127.0.0.1]
            search: [yourlocaldomain.com] # 可选,添加本地域名后缀
          # --- 修改结束 ---
  2. 编辑 /etc/resolv.conf (传统方法,Netplan 可能会覆盖它): 我们可以将 resolv.conf 设置为由 systemd-resolved 管理,而 systemd-resolved 又会使用 dnsmasq,这是一个更现代和稳健的方法。

    确保 systemd-resolved 正在运行:

    sudo systemctl status systemd-resolved

    如果未运行,启用并启动它:

    sudo systemctl enable --now systemd-resolved

    创建一个指向 dnsmasq 的符号链接:

    sudo rm /etc/resolv.conf
    sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

第 4 步:重启 Dnsmasq 并测试

# 重启 dnsmasq 服务以应用新配置
sudo systemctl restart dnsmasq
# 检查服务状态
sudo systemctl status dnsmasq

测试 DNS 解析和缓存

  1. 第一次查询 (会向上游服务器请求,并缓存结果)

    dig google.com
  2. 第二次查询 (应该会非常快,因为结果已从本地缓存返回)

    dig google.com
  3. 查看日志 (如果启用了日志)

    # 查看最近的 DNS 查询日志
    sudo grep 'dnsmasq' /var/log/syslog | tail

配置权威 DNS 服务器 (使用 BIND9)

这个过程更复杂,通常用于管理你自己的域名。

第 1 步:安装 BIND9

sudo apt update
sudo apt install bind9

第 2 步:配置 BIND9

BIND9 的配置文件位于 /etc/bind/ 目录下,核心文件是 named.conf.optionsnamed.conf.local

  1. 编辑主配置文件 (named.conf.options)

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

    这个文件用于设置全局选项,如监听的 IP 地址、允许哪些客户端查询、以及转发查询等。

    options {
            // 监听在本地回环地址和你的服务器公网 IP (如果需要)
            listen-on port 53 { 127.0.0.1; YOUR_SERVER_IP; }; // 替换 YOUR_SERVER_IP
            listen-on-v6 port 53 { ::1; };
            // 允许查询的客户端
            // "any" 表示允许所有人查询你的权威记录
            // "localhost" 表示只允许本机查询
            allow-query { any; };
            // 允许递归查询的客户端
            // 递归查询是客户端要求 DNS 服务器帮忙完成整个查询过程
            // 对于权威 DNS 服务器,通常设置为 "none" 或只信任的 IP
            allow-recursion { none; };
            // 转发器:当 BIND9 收到的查询不在其管辖的区域内时,转发到这里
            // forwarders { 8.8.8.8; 1.1.1.1; };
            // 数据目录
            directory "/var/cache/bind";
    };

    保存并退出

  2. 创建区域文件 (named.conf.local)

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

    这个文件用于定义你管理的“区域”(Zone),即一个完整的域名。

    // 定义一个正向区域 (example.com -> IP)
    zone "example.com" {
            type master; // 表示这是主权威服务器
            file "/etc/bind/zones/db.example.com"; // 区域数据文件路径
    };
    // 定义一个反向区域 (IP -> example.com)
    // 这用于反向 DNS 查询 (PTR 记录)
    zone "1.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/zones/db.192.168.1";
    };

    保存并退出

  3. 创建正向区域数据文件

    sudo mkdir -p /etc/bind/zones
    sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com
    sudo nano /etc/bind/zones/db.example.com

    修改文件内容如下:

    ;
    ; BIND data file for example.com
    ;
    $TTL    604800
    @       IN      SOA     ns1.example.com. admin.example.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
    ;
    @       IN      NS      ns1.example.com.
    @       IN      A       YOUR_SERVER_IP  # 替换为你的服务器IP
    ns1     IN      A       YOUR_SERVER_IP  # 替换为你的服务器IP
    www     IN      A       YOUR_SERVER_IP  # www.example.com 指向同一个IP
    mail    IN      A       YOUR_SERVER_IP  # mail.example.com 指向同一个IP

    重要

    • Serial:每次修改此文件后,必须增加这个数字,否则你的 DNS 服务器不会更新到其他服务器。
    • YOUR_SERVER_IP:替换为你的服务器 IP 地址。
  4. 创建反向区域数据文件

    sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.1
    sudo nano /etc/bind/zones/db.192.168.1

    修改文件内容如下(注意 IP 地址是反写的):

    ;
    ; BIND reverse data file for 192.168.1.0/24
    ;
    $TTL    604800
    @       IN      SOA     ns1.example.com. admin.example.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
    ;
    @       IN      NS      ns1.example.com.
    1       IN      PTR     example.com.   ; 192.168.1.1 -> example.com

    重要1 对应的是 168.1.1 的主机号。

第 3 步:检查配置并重启 BIND9

# 检查配置文件语法是否正确
sudo named-checkconf
sudo named-checkzone example.com /etc/bind/zones/db.example.com
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1
# 如果没有输出,说明语法正确,现在重启 BIND9
sudo systemctl restart bind9
# 检查服务状态
sudo systemctl status bind9

第 4 步:测试

使用 dig 命令从你的服务器或其他机器上进行测试。

  1. 测试正向解析

    dig @127.0.0.1 example.com
  2. 测试反向解析

    dig @127.0.0.1 -x 192.168.1.1
  3. 测试 NS 记录

    dig @127.0.0.1 NS example.com

第 5 步:注册域名和修改 NS 记录

要让你的 DNS 服务器在互联网上生效,你需要:

  1. 在你的域名注册商(如 GoDaddy, Namecheap 等)处购买一个域名(yourdomain.com)。
  2. 登录注册商的控制面板,将域名的 NS 记录修改为你新配置的 DNS 服务器的名称,ns1.yourdomain.com
  3. 等待 DNS 传播(可能需要几分钟到 48 小时)。

总结与常见问题

  • 选择哪个方案?

    • 只是想加速自己电脑或局域网的上网速度?用 Dnsmasq
    • 是要管理自己的网站域名,让其他人能访问?用 BIND9
  • 如何检查 DNS 是否生效?

    • 使用 nslookup yourdomain.comdig yourdomain.com
    • 使用在线 DNS 检查工具,如 whatsmydns.net,可以查看全球 DNS 服务器的解析状态。
  • 权限问题:确保 BIND9 配置文件的所有者是 root,组是 bind,并且权限正确。named 守护进程以 bind 用户身份运行。

    sudo chown -R root:bind /etc/bind
    sudo chmod -R 755 /etc/bind

希望这份详细的指南能帮助你成功配置 Ubuntu 上的 DNS 服务器!

分享:
扫描分享到社交APP
上一篇
下一篇