DNS(BIND) 正反向解析文件的部署实验

一、 实验环境

服务器 IP:172.25.2.132 (假设网段为 172.25.2.0/24)

软件版本:BIND 9.18.33

核心工具 :Xshell, VMware (含 Open-vm-tools), dig,systemctl

二、DNS (BIND) 正向解析实验

(一)实验目的与难点

实验目的 :实现域名(如 http://www.test.com)到 IP(172.25.2.100)的解析。

实验难点:离线环境下的源修复、新版本 BIND 的严格策略、SELinux 干扰。

(二) 详细实验步骤

阶段 1:环境修复与依赖安装

1、挂载 VMware 共享文件夹 (获取安装介质)
复制代码
vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

验证ls /mnt/hgfs 确认能看到主机共享的文件(如 ISO 镜像)。

2、挂载 RHEL 10 ISO 镜像 (构建本地源)

操作 :在 /mnt/hgfs 中找到 rhel-10.0-x86_64-dvd.iso,将其挂载到系统目录:

复制代码
mkdir -p /mnt/iso
mount -o loop /mnt/hgfs/VM/rhel-10.0-x86_64-dvd.iso /mnt/iso
3、配置 YUM 源
复制代码
vim /etc/yum.repos.d/rpm.repo

[baseos]
name=baseos
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=appstream
baseurl=/mnt/AppStream
gpgcheck=0
4、安装 BIND 软件包
复制代码
dnf install bind bind-utils -y

预期结果 :成功安装 bind (服务端) 和 bind-utils (dig, nslookup 等工具)。

阶段 2:防火墙与基础配置

(此阶段解决"外部无法连接"的问题)

1、防火墙放行
复制代码
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
2、配置主配置文件 /etc/named.conf

原始配置文件named.conf:

复制代码
[root@localhost ~]# vim /etc/named.conf 

修改后(修改listen on和allow-query处的地址、以及zone):

复制代码
options {
    /* 1. 监听所有 IP 的 53 端口 */
    listen-on port 53 { any; };
    /* 2. 允许所有客户端查询 */
    allow-query     { any; };
    /* 3. 开启递归查询(作为缓存服务器)*/
    recursion yes;
    /* 4. 指定工作目录 */
    directory       "/var/named";
    /* 5. 忽略 IPv6(实验环境简化)*/
    listen-on-v6    { none; };
    /* 6. 根提示文件(保持默认)*/
/*    include "/etc/named.root.key"; */
};

/* 3. 正向解析区域声明:test.com */
zone "test.com" IN {
    type master;            /* 主服务器 */
    file "test.com.named";  /* 对应的数据文件名 */
    allow-update { none; }; /* 禁止动态更新 */
};

/* 4. 正向解析区域声明:exam.com */
zone "exam.com" IN {
    type master;
    file "exam.com.named";
    allow-update { none; };
};

/* 5. 正向解析区域声明:https.com */
zone "https.com" IN {
    type master;
    file "test.com.named";  /* 对应的数据文件名 */
    allow-update { none; }; /* 禁止动态更新 */
};

/* 4. 正向解析区域声明:exam.com */
zone "exam.com" IN {
    type master;
    file "exam.com.named";
    allow-update { none; };
};

/* 5. 正向解析区域声明:https.com */
zone "https.com" IN {
    type master;
    file "https.com.named";
    allow-update { none; };
};

/* 6. 反向解析区域声明:172.25.2.0/24 网段 */
zone "2.25.172.in-addr.arpa" IN {
    type master;
    file "2.25.172.named";   /* 反向区域文件名 */
    allow-update { none; };
};

核心修改点

监听设置listen-on port 53 { 172.25.2.132; }; (必须包含本机 IP,不能仅留 127.0.0.1)。

访问控制allow-query { 172.25.2.132; }; (实验环境建议放开,生产环境需指定网段)。

递归查询recursion yes; (作为缓存服务器必须开启)。

注意: 建议直接复制粘贴,按照自己的需求修改部分即可,这个格式要求很严格,注意注释符不能是#和//,否则后续执行会报错!!!

3、添加正向解析区域(注意格式要求严格)
复制代码
[root@localhost ~]# vim /var/named/test.com.named
[root@localhost ~]# vim /var/named/exam.com.named
[root@localhost ~]# vim /var/named/https.com.named

test.com.named:

复制代码
$TTL 1D
@       IN  SOA     ns1.test.com. admin.test.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   ns1.test.com.
ns1     IN A    172.25.2.132          ; DNS服务器自己的IP
www     IN A    172.25.2.130          ; test.com的www主机

exam.com.named:

复制代码
$TTL 1D
@       IN  SOA     ns1.exam.com. admin.exam.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   ns1.exam.com.
ns1     IN A    172.25.2.132          ; DNS服务器自己的IP
www     IN A    172.25.2.131          ; exam.com的www主机

https.com.named:

复制代码
$TTL 1D
@       IN  SOA     ns1.https.com. admin.https.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN NS   ns1.https.com.
ns1     IN A    172.25.2.132          ; DNS服务器自己的IP
www     IN A    172.25.2.132          ; https.com的www主机 (指向本机)

阶段 3:数据文件配置与启动

(此阶段解决"数据不存在"的问题)

1、创建区域数据文件
复制代码
touch /var/named/test.com.named
touch /var/named/exam.com.named
touch /var/named/https.com.named
2、文件内容

test.com.named:

复制代码
$TTL 1D
@       IN SOA  ns1.test.com. root.test.com. (
                                2026040101 ; Serial (必须递增)
                                1D         ; Refresh
                                1H         ; Retry
                                1W         ; Expire
                                3H )       ; Minimum
                IN NS   ns1.test.com.
ns1             IN A    172.25.2.132
www             IN A    172.25.2.100

exam.com.named:

复制代码
$TTL 1D
@       IN SOA  ns1.exam.com. root.exam.com. (
                                2026040101 ; Serial (必须递增)
                                1D         ; Refresh
                                1H         ; Retry
                                1W         ; Expire
                                3H )       ; Minimum
                IN NS   ns1.exam.com.
ns1             IN A    172.25.2.132
www             IN A    172.25.2.100

https.com.named:

复制代码
$TTL 1D
@       IN SOA  ns1.https.com. root.https.com. (
                                2026040101 ; Serial (必须递增)
                                1D         ; Refresh
                                1H         ; Retry
                                1W         ; Expire
                                3H )       ; Minimum
                IN NS   ns1.https.com.
ns1             IN A    172.25.2.132
www             IN A    172.25.2.100
3、启动服务
复制代码
[root@localhost ~]# systemctl enable named
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl status named

阶段四:测试验证

复制代码
[root@localhost etc]# dig -t A www.test.com @172.25.2.132
[root@localhost etc]# dig -t A www.exam.com @172.25.2.132
[root@localhost etc]# dig -t A www.https.com @172.25.2.132

(三) 所遇故障及排查思路

YUM 源校验失败 (Checksum Error)

日志证据

Error opening /mnt/iso/AppStream/Packages/bind-...: 没有那个文件或目录

checksum 不正确

根本原因

系统试图从 /mnt/iso 读取 RPM 包,但该目录为空或挂载点丢失。

可能是 VMware Tools 服务重启导致 FUSE 挂载断开,或者 ISO 镜像未正确 Loopback 挂载。

排查思路

ls /mnt/iso -> 发现目录为空。

mount | grep hgfs -> 发现 VMware 共享未挂载。

修复 :重新执行 vmhgfs-fusemount -o loop

(四)总结与建议

1、环境准备是关键

在 RHEL 10 虚拟机中做实验,首先要确保 open-vm-toolsvmhgfs-fuse 正常工作,这是离线环境下获取软件包的唯一途径。

复制代码
# 1. 检查 vmtoolsd 服务状态
[root@localhost etc]# systemctl status vmtoolsd

# 2. 检查 vmhgfs 内核模块
# grep 没有输出,说明系统中没有加载 vmhgfs 模块。
[root@localhost etc]# lsmod | grep vmhgfs

# 执行 modprobe vmhgfs 后,系统报错 FATAL: Module vmhgfs not found...。(正常现象,非错误提醒)
[root@localhost etc]# modprobe vmhgfs

# 3. 检查 fuse 内核模块
[root@localhost etc]# lsmod | grep fuse

# 4. 手动挂载 VMware 共享文件夹
[root@localhost etc]# vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

2、新版本的坑

RHEL 10 的 BIND 版本较高,对安全性和配置规范性要求极高。遇到 REFUSED 且日志无明显报错时,优先检查 SELinux 和配置文件的严格语法。

REFUSED出现的核心原因:

1、ACL (访问控制列表) 限制 :默认配置可能只允许 localhost 查询。如果你的客户端 IP 不在允许列表中,就会被静默拒绝。

2、区域文件错误(未被日志记录):如果区域文件存在语法错误(如 SOA 记录格式不对),BIND 可能会加载主配置文件,但在尝试查询该区域时,因为无法解析区域数据而返回 REFUSED。

3、SELinux 拦截:这是 RHEL 10 最大的"坑"。即使配置文件全对,如果 BIND 没有权限读取区域文件或写入缓存目录,它会拒绝提供服务。

在 BIND 中,REFUSED 通常意味着服务器收到了请求,但根据配置规则决定不回答。

三、DNS (BIND) 反向解析实验

(一)实验目标

实验目标:配置 BIND 服务,实现根据 IP 地址查询对应域名

(例如:查询 172.25.2.130 得到 http://www.test.com)。

(二)详细实验步骤

阶段 1:配置主配置文件 (named.conf)

操作 :打开 BIND 的主配置文件 /etc/named.conf

目的 :声明一个新的反向区域(Zone),告诉 BIND 如何处理针对 172.25.2.0/24 网段的查询请求。

复制代码
// /etc/named.conf

// ... 前面的正向区域配置保持不变 ...

/* 6. 反向解析区域声明:172.25.2.0/24 网段 */
zone "2.25.172.in-addr.arpa" IN {
    type master;
    file "2.25.172.named";   /* 反向区域文件名 */
    allow-update { none; };
};

说明

zone "2.25.172.in-addr.arpa" IN :这行定义了反向解析区域的完整名称。所有 IPv4 的反向解析都在 in-addr.arpa 这个特殊的顶级域下进行。

区域名 2.25.172.in-addr.arpa 是 IP 网段 172.25.2.0倒序写法(去掉主机位)。

file "2.25.172.named":指定了该区域的具体数据存储在哪个文件中。

阶段 2:配置反向区域数据文件

操作:根据主配置文件的指向,创建反向解析数据文件。

复制代码
[root@localhost ~]# touch /var/named/2.25.172.named 
[root@localhost ~]# chown named:named /var/named/2.25.172.named 
[root@localhost ~]# chmod 640 /var/named/2.25.172.named 

阶段3:编辑数据文件内容

操作:编辑 vim /var/named/2.25.172.named ,添加 SOA、NS 和 PTR 记录。

复制代码
[root@localhost ~]# vim /var/named/2.25.172.named 

$TTL 1D
@       IN      SOA     ns1.test.com. root.localhost. (
                                0       ; serial
                                1D      ; refresh
                                1H      ; retry
                                1W      ; expire
                                3H )    ; minimum
@       IN      NS      ns1.test.com.
130     IN      PTR     www.test.com.     ; 对应 172.25.2.130
131     IN      PTR     www.exam.com.     ; 对应 172.25.2.131
132     IN      PTR     www.https.com.    ; 对应 172.25.2.132

核心要点

$ TTLSOA:与正向解析类似,定义缓存时间和区域权威信息。

NS 记录:声明该区域的 DNS 服务器(ns1.test.com)。

PTR 记录这是反向解析的核心

格式:[主机位IP] IN PTR [对应的域名].

例如:132 IN PTR www.test.com. 表示 IP 末尾是 132 的主机对应 www.test.com

阶段 4:启动服务与防火墙配置

操作:重新加载或重启 named 服务,使配置生效。

复制代码
[root@localhost ~]# systemctl enable named
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl status named

防火墙放行

复制代码
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

阶段5:SELinux 修正

操作:如果之前修改过文件路径,确保 SELinux 上下文正确。

复制代码
restorecon -Rv /var/named

(三)验证测试

1、区域文件检查

操作 :使用 named-checkzone 检查反向区域文件。

复制代码
named-checkzone 2.25.172.in-addr.arpa /var/named/test.com.rev

预期结果 :显示 zone 2.25.172.in-addr.arpa/IN: loaded serial 2024040101

3、功能验证 (dig 命令)

操作 :使用 dig 命令进行反向查询。

复制代码
dig -x 172.25.2.130 @172.25.2.132
dig -x 172.25.2.131 @172.25.2.132
dig -x 172.25.2.132 @172.25.2.132

(四)常见故障及排查思路 (参考)

1、故障现象 1

dig -x 查询返回 NXDOMAIN 或无结果

排查思路

检查 named.conf 中的 zone 名称是否为 IP 的倒序 (例如 2.25.172.in-addr.arpa)。

检查数据文件中 PTR 记录的 IP 主机位是否正确(例如 132 IN PTR ...)。

检查 named-checkzone 的输出是否有报错。

2、故障现象 2

systemctl start named 启动失败

排查思路

查看日志:journalctl -xe

常见原因:文件权限问题(/var/named 下的文件必须属主为 named)或 SELinux 上下文错误。

执行修改权限命令:

chown named:named /var/named/2.25.172.named

chmod 640 /var/named/2.25.172.named

修复上下文:

restorecon -Rv /var/named

(五)总结

正反向互补:DNS 服务通常需要正向和反向解析同时配置,才能构成一个完整的域名服务体系。

邮件服务器依赖:反向解析在邮件服务器(SMTP)中至关重要,许多邮件服务器会拒绝接收来自没有反向解析记录的 IP 发送的邮件,以防止垃圾邮件。

配置一致性 :确保正向区域文件中的 A 记录与反向区域文件中的 PTR 记录相互对应,避免"指鹿为马"的错误配置。

按网段配置: 反向解析是按网段配置,不是按域名。只要 testexamhttps 的 IP 在同一个网段(如 172.25.2.0/24),就共用一个反向区域文件 。在反向文件中,用 PTR 记录把 IP 的主机位 映射到 完整的域名

相关推荐
Fcy6482 小时前
Linux下 进程控制(三) —— ⾃主Shell命令⾏解释器
linux·服务器
计算机安禾2 小时前
【Linux从入门到精通】第19篇:SSH远程管理进阶——不只是输入密码
linux·ssh·github
煜3642 小时前
环境变量与虚拟内存
linux·运维·服务器
安逸sgr2 小时前
Hermes Agent + Obsidian 打造第二大脑(三):Docker 部署详解——从零到生产环境的完整实战指南!
运维·docker·容器·obsidian·hermes·hermesagent
byoass2 小时前
自动化任务系列之二:批量建目录树——Excel模板驱动千人项目初始化
运维·网络·安全·自动化·云计算
脆皮炸鸡7552 小时前
Linux~~基础IO
linux·运维·服务器·经验分享·算法·学习方法
众少成多积小致巨2 小时前
Android 初始化语言入门
android·linux·c++
思麟呀2 小时前
在Select的基础上学习poll
linux·网络·学习·tcp/ip
wuyoula2 小时前
尹之盾企业版网络验证
服务器·开发语言·javascript·c++·人工智能·ui·c#