编写实现一个简易的域名服务器
文章目录
- 编写实现一个简易的域名服务器
- 完成如下测试:
- 另一台电脑的域名服务器设为你的IP,能正常解析所有域名
- **一、实现流程:**
- **步骤 1:安装 BIND 9**
- 1.1 在Linux操作系统上执行如下指令,安装 BIND 9
- **步骤 2:修改 BIND 配置文件**
- 2.1 编辑主配置文件 `/etc/bind/named.conf.options`:
- 2.2 我使用的是`nano` 编辑器,在完成BIND配置文件的修改后保存流程如下:
- **保存文件**:按下 **`Ctrl + O`进行保存操作。
- **确认文件名为`/etc/bind/named.conf.options`:**直接按 **`Enter`** 键确认保存。
- **退出编辑器**:保存之后,按 **`Ctrl + X`** 退出 `nano` 编辑器。
- **步骤 3:重启 BIND 服务器**
- 3.1 执行以下命令,重启BIND服务器,使配置生效:
- 3.2 检查 BIND 是否正常运行:
- **步骤 4:配置客户端使用你的 DNS 服务器**
- 4.1 Windows 客户端 (可通过 ipconfig 获取IP地址)
- 4.2 Linux 客户端(可通过 hostname -I 或者 ifconfig 获取IP地址)
- **步骤 5:测试 DNS 解析结果**
- 5.1 背景介绍:
- 1. 权威应答(Authoritative Answer)
- 2. 非权威应答(Non-Authoritative Answer)
- 5.2 在客户端 Windows运行(若已完成网络配置):
- 5.3 在客户端 Linux运行:
- 5.4 测试结果
- **二、参考链接**
- [nslookup 非权威应答 权威服务器 权威应答](https://blog.csdn.net/weixin_34161083/article/details/92648205?ops_request_misc=%257B%2522request%255Fid%2522%253A%25224c727753035767d58e98aefa5943df4e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=4c727753035767d58e98aefa5943df4e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-3-92648205-null-null.142^v102^control&utm_term=%E6%9D%83%E5%A8%81%E5%BA%94%E7%AD%94&spm=1018.2226.3001.4187)
- DNS
- 使用nslookup定位权威域名服务器得到权威应答
编写实现一个简易的域名服务器
完成如下测试:
另一台电脑的域名服务器设为你的IP,能正常解析所有域名
一、实现流程:
步骤 1:安装 BIND 9
1.1 在Linux操作系统上执行如下指令,安装 BIND 9
sudo apt update
sudo apt install bind9 -y
步骤 2:修改 BIND 配置文件
2.1 编辑主配置文件 /etc/bind/named.conf.options
:
sudo nano /etc/bind/named.conf.options
在 options {}
部分,做如下修改:
options {
directory "/var/cache/bind"; // 缓存目录
// 启用递归解析
recursion yes;
// 设置允许递归查询的 IP 范围
allow-recursion { any; };
// 设置转发 DNS 服务器
forwarders {
8.8.8.8;
8.8.4.4;
1.1.1.1;
};
dnssec-validation no;
// 监听所有 IPv6 地址
listen-on-v6 { any; };
// 监听所有 IPv4 地址
listen-on { any; };
};
2.2 我使用的是nano
编辑器,在完成BIND配置文件的修改后保存流程如下:
-
保存文件:按下 **
Ctrl + O
进行保存操作。 -
**确认文件名为
/etc/bind/named.conf.options
:**直接按Enter
键确认保存。 -
退出编辑器:保存之后,按
Ctrl + X
退出nano
编辑器。
步骤 3:重启 BIND 服务器
3.1 执行以下命令,重启BIND服务器,使配置生效:
sudo systemctl restart bind9
3.2 检查 BIND 是否正常运行:
sudo systemctl status bind9
测试结果:
lzc@Annihilation:~$ sudo systemctl restart bind9
lzc@Annihilation:~$ sudo systemctl status bind9
● named.service - BIND Domain Name Server
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-03-24 18:33:53 CST; 7s ago
Docs: man:named(8)
Main PID: 1227 (named)
Status: "running"
Tasks: 82 (limit: 9359)
Memory: 23.8M ()
CGroup: /system.slice/named.service
└─1227 /usr/sbin/named -f -u bind
Mar 24 18:33:53 Annihilation named[1227]: configuring command channel from '/etc/bind/rndc.key'
Mar 24 18:33:53 Annihilation named[1227]: command channel listening on ::1#953
Mar 24 18:33:53 Annihilation named[1227]: managed-keys-zone: loaded serial 3
Mar 24 18:33:53 Annihilation named[1227]: zone 0.in-addr.arpa/IN: loaded serial 1
Mar 24 18:33:53 Annihilation named[1227]: zone 255.in-addr.arpa/IN: loaded serial 1
Mar 24 18:33:53 Annihilation named[1227]: zone localhost/IN: loaded serial 2
Mar 24 18:33:53 Annihilation named[1227]: zone 127.in-addr.arpa/IN: loaded serial 1
Mar 24 18:33:53 Annihilation named[1227]: all zones loaded
Mar 24 18:33:53 Annihilation named[1227]: running
Mar 24 18:33:53 Annihilation systemd[1]: Started named.service - BIND Domain Name Server.>
步骤 4:配置客户端使用你的 DNS 服务器
4.1 Windows 客户端 (可通过 ipconfig 获取IP地址)
- 打开
控制面板
→网络和Internet
→网络和共享中心
。 - 点击
更改适配器设置
。 - 右键 当前网络连接,选择
属性
。 - 双击
Internet 协议版本 4 (TCP/IPv4)
,选择 手动设置 DNS 服务器:- 首选 DNS 服务器:
192.168.73.53
(当前服务器的 IP地址) - 备用 DNS 服务器:留空或填
8.8.8.8
- 首选 DNS 服务器:
4.2 Linux 客户端(可通过 hostname -I 或者 ifconfig 获取IP地址)
-
编辑
/etc/resolv.conf
:sudo nano /etc/resolv.conf
-
修改
nameserver
:nameserver 172.28.32.182
保存并退出(若使用nano编辑器,则操作流程见2.2)
步骤 5:测试 DNS 解析结果
5.1 背景介绍:
1. 权威应答(Authoritative Answer)
- 定义:如果 DNS 服务器是某个域名的 权威服务器(Authoritative Name Server),它直接存储该域名的 正式 DNS 记录(A 记录、MX 记录等)。当客户端查询时,服务器会直接返回准确的、权威性的 DNS 解析结果,这就是权威应答。
- 特点:
- 来自 权威 DNS 服务器(如根服务器、顶级域名服务器或具体域名的权威解析服务器)。
- 该 DNS 服务器 直接管理 该域名的数据。
2. 非权威应答(Non-Authoritative Answer)
- 定义:当 DNS 服务器 不是 查询域名的权威服务器,而是从缓存或递归查询其他服务器获取到的结果,这种应答称为非权威应答。
- 特点:
- 由 递归 DNS 服务器 或 缓存 DNS 服务器 返回(如本地 ISP 的 DNS 服务器)。
- 结果来自于其他权威服务器的查询或缓存,而非自身管理的正式 DNS 记录。
5.2 在客户端 Windows运行(若已完成网络配置):
nslookup google.com
5.3 在客户端 Linux运行:
nslookup google.com 172.28.32.182
或者:
dig google.com @172.28.32.182
5.4 测试结果
5.4.1 非权威应答:
lzc@Annihilation:~$ nslookup bilibili.com 172.28.32.182
Server: 172.28.32.182
Address: 172.28.32.182#53
Non-authoritative answer:
Name: google.com
Address: 142.250.196.206
Name: google.com
Address: 2404:6800:4004:822::200e
lzc@Annihilation:~$ nslookup bilibili.com 172.28.32.182
Server: 172.28.32.182
Address: 172.28.32.182#53
Non-authoritative answer:
Name: bilibili.com
Address: 119.3.70.188
Name: bilibili.com
Address: 8.134.50.24
Name: bilibili.com
Address: 47.103.24.173
Name: bilibili.com
Address: 139.159.241.37
5.4.2 权威应答:
lzc@Annihilation:~$ host -t ns bilibili.com
//查询权威域名服务器
bilibili.com name server ns4.dnsv5.com.
bilibili.com name server ns3.dnsv5.com.
lzc@Annihilation:~$ nslookup bilibili.com ns4.dnsv5.com
Server: ns4.dnsv5.com
Address: 49.7.107.152#53
Name: bilibili.com
Address: 139.159.241.37
Name: bilibili.com
Address: 8.134.50.24
Name: bilibili.com
Address: 47.103.24.173
Name: bilibili.com
Address: 119.3.70.188
lzc@Annihilation:~$ nslookup ns4.dnsv5.com 172.28.32.182
Server: 172.28.32.182
Address: 172.28.32.182#53
Non-authoritative answer:
Name: ns4.dnsv5.com
Address: 112.80.181.106
Name: ns4.dnsv5.com
Address: 1.12.0.16
Name: ns4.dnsv5.com
Address: 43.140.78.52
Name: ns4.dnsv5.com
Address: 1.12.0.19
Name: ns4.dnsv5.com
Address: 49.7.107.152
Name: ns4.dnsv5.com
Address: 117.135.128.152
Name: ns4.dnsv5.com
Address: 117.89.178.200
Name: ns4.dnsv5.com
Address: 240d:c000:f06f:fefe::f