凌峰创科服务平台

Linux域名解析服务器如何配置?

Linux 域名解析服务器是互联网基础设施中的重要组成部分,它负责将人类易于记忆的域名(如 www.example.com)转换为机器能够识别的 IP 地址(如 93.184.216.34),这一过程被称为 DNS(Domain Name System)解析,在 Linux 系统中,常用的 DNS 服务器软件包括 BIND(Berkeley Internet Name Domain)、Unbound、Dnsmasq 等,BIND 是功能最强大、使用最广泛的 DNS 服务器软件之一,本文将详细介绍在 Linux 系统中搭建和配置域名解析服务器的过程,包括安装、配置、安全优化及常见问题排查等内容。

DNS 服务器基础概念

在开始配置之前,需了解 DNS 的基本工作原理,DNS 采用分层分布式结构,包括根域名服务器、顶级域名服务器(TLD)、权威域名服务器和本地域名服务器(递归/缓存服务器),本地域名服务器负责接收用户查询,若缓存中无记录,则依次向各级服务器发起请求,最终将解析结果返回给用户,并将结果缓存以备后续查询,Linux 域名解析服务器可配置为权威服务器(负责管理特定域名的解析记录)或缓存服务器(仅提供递归解析和缓存服务)。

安装与基础配置(以 BIND 为例)

安装 BIND 软件

在基于 Debian/Ubuntu 的系统中,可通过以下命令安装 BIND:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

在基于 CentOS/RHEL 的系统中,使用:

sudo yum install bind bind-utils

安装完成后,启动 BIND 服务并设置为开机自启:

# Debian/Ubuntu
sudo systemctl start bind9
sudo systemctl enable bind9
# CentOS/RHEL
sudo systemctl start named
sudo systemctl enable named

配置 BIND 主配置文件

BIND 的主配置文件为 /etc/bind/named.conf(或 /etc/named.conf),其核心功能包括定义区域文件路径、设置访问控制、配置日志等,以下为简化后的配置示例:

options {
    directory "/var/cache/bind";  # 区域文件存放目录
    recursion yes;               # 允许递归查询
    allow-query { any; };        # 允许任何客户端查询(生产环境需限制)
    allow-recursion { localhost; 10.0.0.0/8; };  # 允许递归查询的客户端IP段
    forwarders { 8.8.8.8; 114.114.114.114; };  # 上游DNS服务器(可选)
    listen-on port 53 { any; };  # 监听所有网络接口的53端口
    listen-on-v6 port 53 { any; }; # 监听IPv6
};
// 定义正向解析区域
zone "example.com" {
    type master;                 # 为主权威服务器
    file "/etc/bind/db.example.com"; # 区域文件路径
    allow-update { none; };      # 禁止动态更新(安全考虑)
};
// 定义反向解析区域
zone "0.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.0";
};

创建区域文件

区域文件存储了域名与 IP 地址的对应记录,正向解析文件 /etc/bind/db.example.com 示例如下:

$TTL 86400      ; 缓存时间(1天)
@   IN  SOA ns1.example.com. admin.example.com. (
        2025100101  ; 序列号(修改记录时需递增)
        3600        ; 刷新间隔(1小时)
        1800        ; 重试间隔(30分钟)
        604800      ; 过期时间(7天)
        86400       ; 负缓存TTL(1天)
)
@       IN  NS      ns1.example.com.  ; 域名服务器记录
ns1     IN  A       192.168.0.10      ; ns1的IP地址
www     IN  A       192.168.0.20      ; www.example.com的IP
mail    IN  A       192.168.0.30      ; 邮件服务器IP
@       IN  MX  10  mail.example.com. ; 邮件交换记录

反向解析文件 /etc/bind/db.192.168.0 示例如下:

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2025100101
        3600
        1800
        604800
        86400
)
@       IN  NS      ns1.example.com.
10      IN  PTR     ns1.example.com.  ; 192.168.0.10反向解析
20      IN  PTR     www.example.com.  ; 192.168.0.20反向解析
30      IN  PTR     mail.example.com. ; 192.168.0.30反向解析

检查配置并重启服务

使用 named-checkconf 检查主配置文件语法,named-checkzone 检查区域文件语法:

sudo named-checkconf
sudo named-checkzone example.com /etc/bind/db.example.com
sudo named-checkzone 0.168.192.in-addr.arpa /etc/bind/db.192.168.0

若无错误,重启 BIND 服务:

sudo systemctl restart bind9

高级配置与安全优化

配置 DNSSEC(域名系统安全扩展)

DNSSEC 通过数字签名验证 DNS 响应的真实性,防止 DNS 欺骗攻击,配置步骤如下:

  • 生成密钥对:
    dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
  • 将生成的密钥添加到区域文件,并启用 DNSSEC 签名:
    zone "example.com" {
        type master;
        file "/etc/bind/db.example.com.signed";
        dnssec-policy default;  # 使用默认策略
    };
  • 使用 dnssec-signzone 对区域文件进行签名:
    dnssec-signzone -o example.com /etc/bind/db.example.com

访问控制与日志记录

  • 限制查询来源:在 options 段落中修改 allow-query,仅允许特定 IP 查询:
    allow-query { 192.168.0.0/24; 10.0.0.0/8; };
  • 启用日志记录:在 named.conf 中添加日志配置:
    logging {
        channel default_log {
            file "/var/log/named/default.log" versions 3 size 10m;
            severity info;
            print-time yes;
        };
        category default { default_log; };
    };

防止 DNS 放大攻击

禁用递归查询(仅对权威服务器)或限制递归客户端 IP:

options {
    recursion no;  # 若为权威服务器,可禁用递归
    // 或限制递归客户端
    allow-recursion { 192.168.0.0/24; };
};

测试与故障排查

测试 DNS 解析

使用 dignslookup 工具测试解析:

# 测试正向解析
dig www.example.com @192.168.0.10
# 测试反向解析
dig -x 192.168.0.20 @192.168.0.10
# 测试递归查询
dig example.com

常见问题排查

  • 权限问题:确保区域文件权限正确(通常为 640,属主为 named):

    sudo chown root:bind /etc/bind/db.example.com
    sudo chmod 640 /etc/bind/db.example.com
  • 端口未开放:检查防火墙是否允许 53 端口(TCP/UDP):

    # Ubuntu (ufw)
    sudo ufw allow 53
    # CentOS (firewalld)
    sudo firewall-cmd --permanent --add-port=53/tcp
    sudo firewall-cmd --permanent --add-port=53/udp
    sudo firewall-cmd --reload
  • 序列号未更新:修改区域文件后需递增序列号,否则可能导致 slave 服务器无法同步。

其他 DNS 服务器软件简介

除了 BIND,还有以下常用 DNS 服务器软件: | 软件名称 | 特点 | 适用场景 | |----------|------|----------| | Unbound | 轻量级、递归 DNS 服务器,支持 DNSSEC,适合缓存服务器 | 个人用户、小型企业 | | Dnsmasq | 简单易用,支持 DNS、DHCP、DHCPv6,适合小型网络 | 家庭路由器、小型办公室 | | CoreDNS | 插件化架构,支持 Kubernetes,云原生环境 | 容器化环境、微服务架构 |

相关问答 FAQs

Q1:如何配置 Linux DNS 服务器作为客户端的 DNS 解析服务器?
A1:在客户端 Linux 系统中,修改 /etc/resolv.conf 文件,将 DNS 服务器地址指向自建 DNS 服务器的 IP:

nameserver 192.168.0.10  # 替换为自建 DNS 服务器 IP

注意:某些系统(如 Ubuntu 18.04+)使用 systemd-resolved 管理 DNS,需修改 /etc/systemd/resolved.conf 并重启服务:

DNS=192.168.0.10
sudo systemctl restart systemd-resolved

Q2:如何验证 DNSSEC 签名是否生效?
A2:使用 dig 命令查询 DNSKEY 记录,并检查响应中的 AD(Authentic Data)标志位:

dig +dnssec example.com @192.168.0.10

若返回结果中包含 RRSIG 记录且 AD 标志位为 1,则表示 DNSSEC 签名生效,可通过 dnssec-verify 工具验证区域文件签名:

dnssec-verify /var/cache/bind/db.example.com.signed
分享:
扫描分享到社交APP
上一篇
下一篇