凌峰创科服务平台

Ubuntu服务器DNS如何配置?

在Ubuntu服务器上配置DNS(域名系统)是一项基础且重要的任务,DNS服务器负责将人类可读的域名(如www.example.com)解析为机器可读的IP地址(如192.168.1.100),或在反向解析中将IP地址映射回域名,本文将详细介绍在Ubuntu服务器上安装、配置和管理DNS服务器的完整流程,以常用的BIND9(Berkeley Internet Name Domain)为例展开说明。

Ubuntu服务器DNS如何配置?-图1
(图片来源网络,侵删)

安装BIND9 DNS服务器

在Ubuntu系统中,BIND9是最常用的DNS软件实现,通过apt包管理器安装BIND9,打开终端,执行以下命令更新软件包列表并安装BIND9:

sudo apt update
sudo apt install bind9

安装完成后,BIND9服务会自动启动,可通过systemctl status bind9检查服务状态,若未启动,使用sudo systemctl start bind9启动,并可通过sudo systemctl enable bind9设置开机自启。

配置BIND9核心文件

BIND9的主配置文件位于/etc/bind/named.conf,该文件负责定义全局参数和包含其他配置文件(如区域配置文件),默认情况下,BIND9已包含本地回环地址和根服务器的配置,无需修改,需配置正向解析区域和反向解析区域。

配置正向解析区域

正向解析将域名解析为IP地址,假设要配置域名为example.com,对应IP段为168.1.0/24,步骤如下:

Ubuntu服务器DNS如何配置?-图2
(图片来源网络,侵删)
  • 创建区域配置文件:在/etc/bind/named.conf.local中添加以下内容(该文件用于定义自定义区域):
    zone "example.com" {
        type master;
        file "/etc/bind/zones/db.example.com";  # 区域数据文件路径
    };
  • 创建区域数据文件:首先创建 zones 目录(若不存在):sudo mkdir -p /etc/bind/zones,然后复制正向解析模板文件并修改:
    sudo cp /etc/bind/db.local /etc/bind/zones/db.example.com

    编辑db.example.com示例如下:

    ; TTL (Time To Live) 定义记录缓存时间
    $TTL    604800
    @       IN      SOA     ns1.example.com. admin.example.com. (
                                2         ; Serial
                            604800         ; Refresh
                             86400         ; Retry
                          2419200         ; Expire
                            604800 )       ; Negative Cache TTL
    ; NS 记录:域名服务器
    @       IN      NS      ns1.example.com.
    ; A 记录:域名到IP的映射
    ns1     IN      A       192.168.1.100
    www     IN      A       192.168.1.101
    mail    IN      A       192.168.1.102

    SOA记录包含区域管理信息(序列号、刷新时间等),NS记录指定域名服务器,A记录实现域名到IP的映射。

配置反向解析区域

反向解析将IP地址映射回域名,需基于网络段创建.in-addr.arpa区域,以168.1.0/24为例:

  • /etc/bind/named.conf.local中添加反向区域
    zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/zones/db.192.168.1";
    };
  • 创建反向解析数据文件:复制模板文件并修改:
    sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.1

    编辑db.192.168.1示例如下:

    $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.
    ; PTR 记录:IP到域名的映射
    100     IN      PTR     ns1.example.com.
    101     IN      PTR     www.example.com.
    102     IN      PTR     mail.example.com.

    注意:反向区域名称为网络段的反向格式(如168.1.0/24对应168.192.in-addr.arpa),PTR记录实现IP到域名的映射。

配置权限与重启服务

为确保BIND9能正确读取区域文件,需设置正确的文件权限,区域文件应属bind用户和组,权限为644:

sudo chown -R bind:bind /etc/bind/zones
sudo chmod 644 /etc/bind/zones/*

配置完成后,检查配置文件语法是否正确:

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

测试DNS解析

使用dignslookup工具测试解析是否正常,测试正向解析:

dig @127.0.0.1 www.example.com

返回结果中应包含ANSWER SECTION,显示www.example.com对应的IP地址(如192.168.1.101),测试反向解析:

dig @127.0.0.1 -x 192.168.1.101

应返回1.168.192.in-addr.arpa对应的域名www.example.com

安全与优化建议

  • 限制查询范围:在/etc/bind/named.conf.options中设置allow-query { localhost; };,仅允许本地查询,防止未授权访问。
  • 启用DNSSEC:通过dnssec-keygen生成密钥,并在区域配置中添加dnssec-signzone签名,增强域名解析安全性。
  • 日志监控:配置/etc/bind/named.conf中的logging选项,将日志输出到指定文件(如/var/log/named.log),便于排查问题。

相关问答FAQs

Q1: 如何在Ubuntu服务器上配置DNS转发,将外部域名查询转发到上游DNS服务器?
A1: 在/etc/bind/named.conf.options中添加forwarders选项,将查询转发到公共DNS服务器(如8.8.8.8):

options {
    directory "/var/cache/bind";
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    allow-query { any; };  # 根据需求调整查询范围
};

保存后重启BIND9服务即可生效。

Q2: 如何排查DNS服务无法解析的问题?
A2: 可按以下步骤排查:

  1. 检查BIND9服务状态:systemctl status bind9,确认服务正在运行。
  2. 检查配置文件语法:named-checkconfnamed-checkzone命令是否有报错。
  3. 查看日志文件:tail -f /var/log/syslog | grep named,分析错误信息(如权限问题、区域文件路径错误等)。
  4. 测试端口监听:netstat -tuln | grep 53,确认DNS服务监听53端口。
  5. 检查防火墙规则:若使用ufw,确保允许53端口(TCP/UDP)的访问,如sudo ufw allow 53
分享:
扫描分享到社交APP
上一篇
下一篇