一、 实验环境
服务器 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-fuse 和 mount -o loop。

(四)总结与建议
1、环境准备是关键
在 RHEL 10 虚拟机中做实验,首先要确保 open-vm-tools 和 vmhgfs-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

核心要点:
$ TTL 和 SOA:与正向解析类似,定义缓存时间和区域权威信息。
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 记录相互对应,避免"指鹿为马"的错误配置。
按网段配置: 反向解析是按网段配置,不是按域名。只要 test、exam、https 的 IP 在同一个网段(如 172.25.2.0/24),就共用一个反向区域文件 。在反向文件中,用 PTR 记录把 IP 的主机位 映射到 完整的域名。








