凌峰创科服务平台

RedHat DNS服务器配置如何操作?

总览:DNS 服务器工作流程

  1. 安装 BIND:在服务器上安装 DNS 软件包。
  2. 主配置文件 (named.conf):设置全局选项,并定义“区域”(Zone),区域是您要管理的 DNS 记录集合(example.com)。
  3. 区域文件:为每个区域创建一个文件,其中包含具体的 DNS 记录(如 A 记录、CNAME 记录等)。
  4. 配置解析:配置服务器如何为客户端递归查询(即帮助客户端查询其他域名的 IP)。
  5. 启动并设置防火墙:启动 DNS 服务并允许 DNS 端口通过防火墙。
  6. 测试:使用 dignslookup 等工具测试 DNS 服务是否正常工作。

第一步:安装 BIND

确保您的系统是最新的,然后安装 bindbind-utils 包。bind-utils 包含了用于测试 DNS 的客户端工具(如 dig, nslookup, host)。

RedHat DNS服务器配置如何操作?-图1
(图片来源网络,侵删)
# 1. 更新系统软件包
sudo dnf update -y
# 2. 安装 BIND 服务器和客户端工具
sudo dnf install -y bind bind-utils

安装完成后,BIND 的主配置文件位于 /etc/named.conf


第二步:配置主配置文件 (/etc/named.conf)

这是 BIND 的核心配置文件,我们将对其进行修改,以定义我们的区域和基本选项。

# 使用 vim 或您喜欢的编辑器打开文件
sudo vim /etc/named.conf

一个典型的 /etc/named.conf 文件结构如下:

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND DNS server as a
// caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
    listen-on port 53 { 127.0.0.1; any; }; // 监听所有网络接口,而不仅仅是本地回环
    listen-on-v6 port 53 { ::1; any; };   // 监听 IPv6
    directory       "/var/named";          // 区域文件存放目录
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { localhost; any; }; // 允许任何主机查询 (生产环境应限制为特定网络)
    // --- 递归和转发配置 ---
    // 如果您想将无法解析的请求转发到上游 DNS 服务器,取消下面这部分的注释
    // forwarders { 8.8.8.8; 1.1.1.1; };
    // forward only; // 或使用 forward first (默认)
    recursion yes; // 启用递归查询
    dnssec-validation yes; // 启用 DNSSEC 验证 (推荐)
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
    type hint;
    file "named.ca";
};
// --- 在这里添加您的区域定义 ---
// 示例:创建一个名为 "example.com" 的主区域
zone "example.com" IN {
    type master;      // 这是一个主 DNS 服务器
    file "example.com.zone"; // 区域文件名,位于 /var/named/ 目录下
    allow-update { none; }; // 不允许动态更新
};
// 示例:创建一个反向区域 (根据您的服务器 IP 地址)
// 假设服务器 IP 是 192.168.1.100,则反向区域是 1.168.192.in-addr.arpa
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.db"; // 反向区域文件名
    allow-update { none; };
};

关键配置项解释:

RedHat DNS服务器配置如何操作?-图2
(图片来源网络,侵删)
  • listen-on port 53 { any; };:让 DNS 服务监听服务器上所有网络接口的 53 端口,这对于作为内部或公共 DNS 服务器至关重要。
  • allow-query { any; };:允许任何 IP 地址向此服务器发起查询,在生产环境中,您应该将其限制为您的内部网络,allow-query { 192.168.1.0/24; };
  • zone "example.com" IN { ... }:定义一个名为 "example.com" 的区域。
    • type master;:表示此服务器是该区域的主权威服务器。
    • file "example.com.zone";:指定存储该区域 DNS 记录的文件。

保存并退出编辑器。


第三步:创建区域文件

我们需要为我们在 named.conf 中定义的区域创建实际的记录文件。

创建正向区域文件 (example.com.zone)

# 切换到 named 目录
cd /var/named
# 复制一个模板文件来创建新的区域文件
# 这是一个安全的做法,可以确保文件权限和所有者正确
sudo cp -p named.localhost example.com.zone

然后编辑这个新文件:

sudo vim example.com.zone

并根据您的实际情况修改:

$TTL 1D
@       IN SOA  ns1.example.com. admin.example.com. (
                                        2025051501 ; serial (YYYYMMDDVV)
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns1.example.com.
        A       192.168.1.100  ; 这台 DNS 服务器本身的 IP
; --- 记录开始 ---
ns1     IN A    192.168.1.100  ; 名称服务器记录
www     IN A    192.168.1.101  ; Web 服务器
mail    IN A    192.168.1.102  ; 邮件服务器
; --- 使用 CNAME 别名 ---
blog    IN CNAME www.example.com.

关键记录解释:

  • $TTL 1D:默认的生存时间,为 1 天。
  • SOA (Start of Authority):权威记录的开始,必须包含。
    • ns1.example.com.:主名称服务器的主机名。
    • admin.example.com.:管理员的邮箱地址(用 代替 )。
    • 2025051501:序列号。每次修改此文件后,都必须增加这个数字,以便从服务器知道需要重新下载区域文件。
  • NS:名称服务器记录,指定负责此区域的 DNS 服务器。
  • A:地址记录,将主机名映射到 IPv4 地址。
  • CNAME:规范名称记录,为一个主机名创建别名。

保存并退出。

创建反向区域文件 (168.1.db)

反向区域用于通过 IP 地址查询主机名(PTR 记录)。

# 再次复制模板
sudo cp -p named.loopback 192.168.1.db

编辑文件:

sudo vim 192.168.1.db
$TTL 1D
@       IN SOA  ns1.example.com. admin.example.com. (
                                        2025051501 ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns1.example.com.
; --- 记录开始 ---
        IN      PTR     example.com.        ; 192.168.1.100 的反向
100     IN      PTR     ns1.example.com.   ; 192.168.1.100 的反向
101     IN      PTR     www.example.com.   ; 192.168.1.101 的反向
102     IN      PTR     mail.example.com.  ; 192.168.1.102 的反向

关键记录解释:

  • PTR (Pointer):指针记录,将 IP 地址映射到主机名,反向区域文件中的 代表 168.192.in-addr.arpa.100 实际上代表 1.168.192.in-addr.arpa.,即 IP 168.1.100

保存并退出。


第四步:启动并设置防火墙

  1. 启动并启用 BIND 服务

    # 启动服务
    sudo systemctl start named
    # 设置为开机自启
    sudo systemctl enable named
  2. 配置防火墙

    RHEL/CentOS 使用 firewalld,需要允许 DNS (TCP/UDP 53) 端口。

    # 添加永久性的 DNS 服务规则
    sudo firewall-cmd --permanent --add-service=dns
    # 重新加载防火墙以应用新规则
    sudo firewall-cmd --reload
  3. 检查服务状态

    sudo systemctl status named

    确保输出显示 active (running)


第五步:测试 DNS 服务器

使用 dig 工具进行测试。请确保您的客户端 DNS 设置指向新配置的 DNS 服务器的 IP (192.168.1.100)

测试正向解析

# 查询 www.example.com
dig @192.168.1.100 www.example.com

预期输出:在 ANSWER SECTION 中,您应该能看到:

;; ANSWER SECTION:
www.example.com.         86400   IN      A       192.168.1.101

测试反向解析

# 查询 IP 192.168.1.101 的 PTR 记录
dig @192.168.1.100 -x 192.168.1.101

预期输出:在 ANSWER SECTION 中,您应该能看到:

;; ANSWER SECTION:
101.1.168.192.in-addr.arpa. 86400 IN   PTR     www.example.com.

测试递归查询

为了测试递归功能,查询一个您服务器上没有的域名,google.com

dig @192.168.1.100 google.com

如果配置正确,您应该能得到 Google 的 IP 地址,这证明您的服务器能够向根服务器和顶级域名服务器发起查询,并将结果返回给您。

检查配置文件语法

在修改配置后,如果服务无法启动,可以使用以下命令检查语法错误:

sudo named-checkconf
# 如果没有输出,说明主配置文件语法正确
sudo named-checkzone example.com /var/named/example.com.zone
# 检查特定区域文件的语法
# 预期输出: zone example.com/IN: loaded serial 2025051501

常见问题与排错

  • 问题dig 返回 SERVFAILREFUSED

    • 原因:通常是防火墙阻止了 53 端口,或者 named.conf 中的 allow-query 设置过于严格。
    • 解决:检查 firewall-cmd --list-allnamed.conf 中的 allow-querylisten-on 设置。
  • 问题:区域文件加载失败。

    • 原因:文件所有者或权限不正确,BIND 进程 (named) 用户需要对 /var/named 目录及其下的文件有读取权限。
    • 解决:确保文件所有者是 root.named,权限是 640
      sudo chown root:named /var/named/example.com.zone
      sudo chmod 640 /var/named/example.com.zone
  • 问题:客户端无法解析。

    • 原因:客户端的网络设置中,DNS 服务器地址没有指向您的 RHEL DNS 服务器。
    • 解决:在客户端机器上,将 DNS 服务器 IP 设置为 168.1.100

至此,您已经成功配置了一个功能齐全的 Red Hat DNS 服务器,您可以根据需要添加更多的 ACNAMEMX (邮件交换) 等记录。

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