DNS 服务器配置实验

实验目标

在指定虚拟机(IP `192.168.66.135`)上搭建 BIND DNS 服务,实现三个域名的正向解析:

  • `www.test.com` → `192.168.66.135`

  • `www.exam.com` → `192.168.66.135`

  • `www.https.com` → `192.168.66.135`

同时支持对应 NS 记录的解析,最终客户端可通过该 DNS 服务器解析域名并访问 Web 服务。

前置条件

  • 虚拟机 IP 固定为 `192.168.66.135`,网络正常

  • 已配置 YUM 仓库(使用本地 ISO 或网络源)

  • 建议关闭防火墙对 DNS 端口的限制(后续会开放 53 端口)


实验步骤及讲解

1. 安装 DNS 服务(BIND)

dnf install -y bind bind-utils

  • bind:DNS 服务主程序(named)

  • bind-utils:提供 `dig`、`nslookup` 等测试工具

扩展:`bind` 包安装后,主配置文件位于 `/etc/named.conf`,区域文件默认存放于 `/var/named/`。


2. 修改主配置文件 `/etc/named.conf`

备份原始配置(可选)

cp /etc/named.conf /etc/named.conf.bak

编辑配置文件

vim /etc/named.conf

将内容修改为(IP 替换为实际 IP):

options {

listen-on port 53 { 127.0.0.1; 192.168.66.135; };

directory "/var/named";

allow-query { any; };

recursion yes;

dnssec-validation no; # 实验环境关闭 DNSSEC 验证

};

zone "test.com" IN {

type master;

file "test.com.named";

};

zone "exam.com" IN {

type master;

file "exam.com.named";

};

zone "https.com" IN {

type master;

file "https.com.named";

};

配置项解释:

  • `listen-on`:指定 named 监听的 IP 和端口,必须包含本机 IP,否则外部无法访问。

  • `directory`:区域文件存放目录。

  • `allow-query`:允许查询的客户端,`any` 表示所有。

  • `recursion`:允许递归查询(DNS 会向根域迭代查询)。

  • `dnssec-validation`:DNSSEC 验证,实验环境可关闭避免密钥问题。

  • `zone`:定义区域,`type master` 表示主 DNS,`file` 指定区域文件名(位于 `/var/named/`)。


3. 创建正向区域文件

cd /var/named/

创建三个区域文件

touch test.com.named exam.com.named https.com.named

设置属主和权限(重要!)

chown named:named *.com.named

chmod 640 *.com.named

编写 `test.com.named`(其他文件类似,仅域名不同)

vim test.com.named

内容:

$TTL 1D

@ IN SOA ns.test.com. admin.test.com. (

2025032701 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

IN NS ns.test.com.

ns IN A 192.168.66.135

www IN A 192.168.66.135

区域文件格式说明:

  • `$TTL`:默认生存时间,1D 表示一天。

  • `SOA`:起始授权记录,包含域名、管理员邮箱、序列号等。序列号每次修改区域文件应递增,用于主从同步。

  • `NS`:名称服务器记录,指明该区域的权威 DNS。

  • `A`:地址记录,将域名映射到 IPv4 地址。

  • 注意:管理员邮箱中的 `@` 用 `.` 代替,如 `admin.test.com` 表示 `admin@test.com`。

同样方式编辑 `exam.com.named` 和 `https.com.named`,将域名和 NS 记录中的域名替换为对应值。


4. 检查配置并启动服务

检查主配置语法

named-checkconf /etc/named.conf

检查每个区域文件语法

named-checkzone test.com /var/named/test.com.named

named-checkzone exam.com /var/named/exam.com.named

named-checkzone https.com /var/named/https.com.named

启动 named 并设置开机自启

systemctl enable --now named

查看状态

systemctl status named

可能遇到的错误:

  • `recursion redefined`:配置文件中 `recursion` 指令重复出现,删除多余的行即可。

  • `zone has no NS records`:区域文件中缺少 `NS` 记录,必须添加。

  • `could not find file`:区域文件路径错误或不存在,检查文件名和路径。

  • `permission denied`:区域文件权限错误,使用 `chown named:named` 修复。

验证:`systemctl status named` 应显示 `active (running)`。


5. 防火墙与 SELinux 配置

防火墙(开放 DNS 端口)

firewall-cmd --permanent --add-service=dns

firewall-cmd --reload

  • DNS 服务对应 TCP 和 UDP 的 53 端口。

SELinux

恢复区域文件默认上下文(通常已正确)

restorecon -R /var/named

SELinux 策略允许 named 读取 `/var/named` 下标记为 `named_zone_t` 的文件,使用 `restorecon` 可修复上下文。


6. 本地测试 DNS 解析

使用 dig 指定 DNS 服务器查询

dig @192.168.66.135 www.test.com

dig @192.168.66.135 www.exam.com

dig @192.168.66.135 www.https.com

使用 nslookup

nslookup www.test.com 192.168.66.135

预期输出应包含 `ANSWER SECTION`,显示 `www.test.com. 86400 IN A 192.168.66.135`。


7. 配置客户端使用该 DNS 服务器

在需要解析的客户端(如另一台虚拟机)上:

临时修改(重启网络后失效)

echo "nameserver 192.168.66.135" > /etc/resolv.conf

永久修改(通过 NetworkManager)

查看网卡名称

nmcli connection show

修改 DNS

nmcli connection modify ens160 ipv4.dns 192.168.66.135

nmcli connection modify ens160 ipv4.ignore-auto-dns yes

nmcli connection up ens160

验证客户端解析:

dig www.test.com # 应解析为 192.168.66.135

curl http://www.test.com # 如果 Web 服务已配置,应正常访问


常见问题与解决

| 错误现象 | 可能原因 | 解决方法 |

|---------|----------|----------|

| `named.service: failed`,日志显示 `recursion redefined` | `/etc/named.conf` 中有重复的 `recursion` 指令 | 删除多余的 `recursion` 行 |

| `named-checkzone` 报 `has no NS records` | 区域文件缺少 `NS` 记录 | 添加 `IN NS ns.domain.com.` 行 |

| 客户端 `dig` 返回 `REFUSED` | `allow-query` 未允许客户端 IP | 将 `allow-query` 改为 `any` 或包含客户端 IP |

| `dig` 返回 `SERVFAIL` | 区域文件语法错误或 SOA 序列号未更新 | 检查区域文件,用 `named-checkzone` 验证 |

| 客户端无法连接 Web 服务但 DNS 解析正常 | Web 服务(nginx)未运行或防火墙未放行 80 端口 | 检查 `systemctl status nginx`,开放 http 服务 |

| 客户端解析仍使用旧 hosts 记录 | `/etc/hosts` 优先级高于 DNS | 注释或删除 hosts 中的相关域名 |


扩展命令与目录

| 类别 | 目录/文件 | 常用命令 |

|------|-----------|----------|

| 主配置 | `/etc/named.conf` | `named-checkconf` 检查语法 |

| 区域文件 | `/var/named/` | `named-checkzone` 检查区域文件 |

| 日志 | `/var/log/messages` 或 `journalctl -u named` | `journalctl -u named -n 20` 查看最近日志 |

| 服务管理 | - | `systemctl {start\|stop\|restart\|status} named` |

| 测试工具 | - | `dig @dns_ip domain`,`nslookup domain dns_ip` |

| 防火墙 | - | `firewall-cmd --add-service=dns` |

| SELinux | - | `restorecon -R /var/named`,`semanage port -l \| grep 53` |

| 动态加载 | - | `rndc reload`(需配置 rndc 密钥) |


与之前 Web 实验的关联

  • DNS 服务为 Web 站点提供域名解析,使客户端可通过域名访问。

  • Web 服务(nginx)需要监听 80/443 端口,且 `server_name` 应与 DNS 解析的域名匹配。

  • 客户端需将 DNS 服务器指向本实验搭建的 DNS 服务器(或修改 `/etc/hosts`),才能通过域名访问。

  • 两者可独立运行,但需协调配置(如防火墙开放 80/443/53 端口,SELinux 分别允许 httpd 和 named 相应操作)。


实验总结

本实验完整演示了:

  • BIND 的基本安装与配置

  • 正向区域文件的编写与语法

  • 配置检查与启动服务

  • 防火墙与 SELinux 对 DNS 服务的影响

  • 客户端 DNS 设置与验证

通过这些步骤,可搭建一个简单的权威 DNS 服务器,为内网提供域名解析服务。后续可扩展配置反向解析、主从同步、DNSSEC 等高级功能。

相关推荐
认真的薛薛2 小时前
Docker网络模式
linux·运维·数据库·面试·github
民乐团扒谱机2 小时前
【读论文】Frequency Comb Based Optical Time Transfer基于光频梳的光时间传递
运维·服务器
UP_Continue2 小时前
Linux--日志的模拟实现
linux·运维·服务器
东北甜妹2 小时前
playbook
linux·服务器·网络
YMWM_2 小时前
docker在jetson thor的应用
运维·docker·容器·jetson thor
我爱学习好爱好爱2 小时前
Ansible 入门:ad-hoc 临时命令与常用模块
linux·服务器·ansible
lwx9148522 小时前
Linux-sftp命令详解
linux·运维·服务器
舒一笑2 小时前
客户现场没有外网,Docker 服务怎么部署?
运维·后端·自动化运维
奥升新能源平台3 小时前
奥升充电最小化高可用机房部署方案
运维·安全·开源·能源·springcloud