主题
DNS服务部署指南
🚀 DNS服务安装步骤
📋 1. 实验环境准备
需要两台虚拟机,一台作为DNS服务器,一台作为客户端
null
🔧 2. 安装DNS服务
安装之前先执行:更换源方法
bash
# 安装BIND DNS服务
yum install bind bind-utils -y
# 查看安装的包
rpm -qa | grep bind
# 查看BIND版本
named -v1
2
3
4
5
6
7
8
2
3
4
5
6
7
8

🚀 3. 配置网络环境
3.1 设置固定IP
将DNS服务器设置为固定IP:固定IP设置方法
bash
# DNS服务器配置示例
IP地址:192.168.4.128 # 【需要替换】替换为实际的DNS服务器IP地址
子网掩码:255.255.255.0 # 【需要替换】根据实际网络环境修改
网关:192.168.4.2 # 【需要替换】替换为实际网关IP地址
DNS:192.168.4.128 # 【需要替换】替换为实际的DNS服务器IP地址1
2
3
4
5
2
3
4
5
3.2 关闭防火墙和安全机制
bash
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld
setenforce 0 # 关闭SELinux1
2
3
2
3
🔧 DNS配置步骤
📋 4. 配置主配置文件
BIND的主要配置文件位于 /etc/named/ 目录:
bash
# 查看配置目录结构
ls -la /etc/named/
# 主要配置文件:
# /etc/named.conf - 主配置文件
# /var/named/ - 区域数据库文件目录1
2
3
4
5
6
2
3
4
5
6
4.1 备份并编辑主配置文件
bash
# 备份原始配置文件
cp /etc/named.conf /etc/named.conf.backup
# 编辑主配置文件
vim /etc/named.conf1
2
3
4
5
2
3
4
5
修改后的主配置文件内容:
bash
// /etc/named.conf
options {
listen-on port 53 { any; }; // 监听所有接口的53端口
listen-on-v6 port 53 { 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 { any; }; // 允许任何客户端查询
recursion yes; // 允许递归查询
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
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";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
// 自定义区域配置
zone "test.com" IN { // 【需要替换】test.com 替换为实际域名
type master;
file "test.com.zone"; // 【需要替换】文件名要与域名保持一致
allow-update { none; };
};
zone "4.168.192.in-addr.arpa" IN { // 【需要替换】根据实际IP网段修改反向解析区域
type master;
file "192.168.4.arpa"; // 【需要替换】文件名要与反向解析区域一致
allow-update { none; };
};1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
🌐 5. 创建正向解析区域文件
bash
# 创建正向解析区域文件
# 【需要替换】test.com.zone 替换为实际域名.zone
vim /var/named/test.com.zone1
2
3
2
3
正向解析区域文件内容:
bash
$TTL 86400
@ IN SOA ns.test.com. admin.test.com. ( ; 【需要替换】ns.test.com 和 admin.test.com 替换为实际域名
2023121501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name servers
IN NS ns.test.com. ; 【需要替换】替换为实际的DNS服务器域名
; A records
ns IN A 192.168.4.128 ; 【需要替换】替换为实际的DNS服务器IP地址
www IN A 192.168.4.128 ; 【需要替换】替换为实际的Web服务器IP地址
mail IN A 192.168.4.128 ; 【需要替换】替换为实际的邮件服务器IP地址
ftp IN A 192.168.4.128 ; 【需要替换】替换为实际的FTP服务器IP地址
web IN A 192.168.4.128 ; 【需要替换】替换为实际的Web服务器IP地址
; CNAME records
bbs IN CNAME www.test.com. ; 【需要替换】www.test.com 替换为实际域名1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
🔙 6. 创建反向解析区域文件
bash
# 创建反向解析区域文件
# 【需要替换】192.168.4.arpa 根据实际IP网段修改文件名
vim /var/named/192.168.4.arpa1
2
3
2
3
反向解析区域文件内容:
bash
$TTL 86400
@ IN SOA ns.test.com. admin.test.com. ( ; 【需要替换】ns.test.com 和 admin.test.com 替换为实际域名
2023121501 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; Name servers
IN NS ns.test.com. ; 【需要替换】替换为实际的DNS服务器域名
; PTR records (反向解析)
128 IN PTR ns.test.com. ; 【需要替换】128替换为实际IP地址的最后一段,ns.test.com替换为实际域名
128 IN PTR www.test.com. ; 【需要替换】128替换为实际IP地址的最后一段,www.test.com替换为实际域名
128 IN PTR mail.test.com. ; 【需要替换】128替换为实际IP地址的最后一段,mail.test.com替换为实际域名
128 IN PTR ftp.test.com. ; 【需要替换】128替换为实际IP地址的最后一段,ftp.test.com替换为实际域名1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
⚙️ 7. 设置文件权限
bash
# 设置区域文件权限
# 【需要替换】test.com.zone 和 192.168.4.arpa 替换为实际文件名
chown named:named /var/named/test.com.zone
chown named:named /var/named/192.168.4.arpa
chmod 640 /var/named/test.com.zone
chmod 640 /var/named/192.168.4.arpa
# 设置配置文件权限
chown root:named /etc/named.conf
chmod 640 /etc/named.conf1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
✅ 8. 启动DNS服务
bash
# 检查配置文件语法
named-checkconf
# 检查区域文件语法
# 【需要替换】test.com 和 test.com.zone 替换为实际域名和文件名
named-checkzone test.com /var/named/test.com.zone
named-checkzone 4.168.192.in-addr.arpa /var/named/192.168.4.arpa
# 启动DNS服务
systemctl start named
systemctl enable named
# 检查服务状态
systemctl status named1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14


🧪 DNS测试方法
🌐 9. 服务器端测试
在DNS服务器上测试:
bash
# 检查DNS服务状态
systemctl status named
# 检查端口监听
netstat -tlnp | grep :53
ss -tlnp | grep :53
# 检查BIND进程
ps aux | grep named
# 测试本地解析
# 【需要替换】ns.test.com、www.test.com、mail.test.com 替换为实际域名
nslookup ns.test.com localhost
dig @localhost www.test.com
host mail.test.com localhost1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
以下则是运行正常的测试结果 


🌍 10. 客户端测试
10.1 配置客户端DNS
在客户端虚拟机上配置DNS服务器地址:
bash
# 编辑网络配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改或添加DNS1参数
# 【需要替换】192.168.4.128 替换为实际的DNS服务器IP地址
DNS1=192.168.4.128
# 重启网络服务
systemctl restart network1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9

10.2 客户端测试DNS解析
bash
# 清除DNS缓存
systemctl restart network
# 正向解析测试(基础测试)
# 【需要替换】www.test.com 替换为实际域名
nslookup www.test.com
nslookup ns.test.com
nslookup mail.test.com
# 权威DNS服务器验证
# 直接查询指定DNS服务器,验证其是否为权威服务器(应显示aa标志)
# 【需要替换】192.168.38.137 替换为实际的DNS服务器IP地址
# 【需要替换】test.com 替换为实际域名
dig @192.168.38.137 test.com
# 反向解析测试(验证PTR记录)
# 【需要替换】192.168.38.137 替换为实际的IP地址
nslookup 192.168.38.137
dig -x 192.168.38.137 # 显示的结果更详细
# 【需要替换】www.test.com 替换为实际域名
ping www.test.com1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
如果DNS服务正常应该显示如下




🔍 12. 远程测试
在Windows宿主机上测试: 运行,输入cmd进入命令窗口,然后ping 192.168.4.128 替换为实际的DNS服务器IP地址,看到类似以下截图,说明宿主机和DNS服务器通信正常 
- 修改Windows DNS设置:
- 网络连接 → 右键属性 → TCP/IPv4 → DNS服务器设为
192.168.4.128【替换为实际的DNS服务器IP地址】
- 网络连接 → 右键属性 → TCP/IPv4 → DNS服务器设为
网络连接属性截图:把IPV6的勾选去掉,然后双击进入IPV4
设置DNS服务器为192.168.4.128(替换为实际的DNS服务器IP地址)
2. 命令行测试:
cmd
nslookup www.test.com # 【需要替换】替换为实际域名
nslookup 192.168.4.128 # 【需要替换】替换为实际IP地址
ping www.test.com # 【需要替换】替换为实际域名1
2
3
2
3

🔍 Windows DNS深度诊断(重启后仍无效时)
如果重启后ping仍然无法解析,则推荐使用以下修改host文件方案
修改hosts文件(推荐解决方案)
这是Windows环境最稳定可靠的解决方案,强烈推荐使用。
如果遇到 nslookup 能解析但 ping 无法解析的情况,修改hosts文件是最直接有效的方法:
cmd
# 以管理员身份打开记事本
notepad C:\Windows\System32\drivers\etc\hosts1
2
2
在文件末尾添加以下内容(根据你的实际IP和域名修改):
192.168.38.137 www.test.com
192.168.38.137 ns.test.com
192.168.38.137 mail.test.com
192.168.38.137 ftp.test.com1
2
3
4
2
3
4
保存后立即测试,无需重启:
cmd
ping www.test.com
ping ns.test.com
ping mail.test.com1
2
3
2
3

为什么推荐使用hosts文件?
- 直接绕过Windows DNS客户端服务的所有问题
- 立即生效,无需重启或清除缓存
- 配置简单,一次设置永久有效
- 适用于学习和测试环境