一、概念
Linux 系统中的 DNS(Domain Name System,域名系统)是互联网中用于将人类可读的域名(如 www.example.com)转换为计算机可识别的 IP 地址(如 192.168.1.1)的核心服务。
1、核心功能:
-
正向解析:将域名转换为 IP 地址。
-
反向解析:将 IP 地址转换为域名。
-
支持多种记录类型(如 A、AAAA、CNAME、MX、NS 等)。
2、解析流程:
-
本地缓存 → 本地配置的 DNS 服务器 → 递归查询(根域名服务器 → 顶级域名服务器 → 权威域名服务器)。
3、域:
一个网站,如www.bilibili.com,其中:
- www.bilibili.com —— 域名
- bilibili.com —— 域
- www —— 名
4、解析
网站转IP 或者 IP转网站 的转变过程就叫解析
(1)域名网站 ——> IP地址(正向解析 )
www.bilibili.com 转变为> 192.168.76.254(一个ip地址,这里博主只是举例,不代表b站网址ip是这个),把域名变成IP的过程叫正向解析
(2)IP地址 ——> 域名网站(反向解析 )
192.168.76.254 转变为> www.bilibili.com,把IP变成域名的过程叫反向解析
5、分布式
(1)分布式的优势
避免单点故障:
-
没有单一服务器控制所有数据,任一节点故障不会导致全网瘫痪。
负载均衡:
-
查询请求分散到不同层级的服务器,减轻单个节点的压力。
扩展性:
-
新域名只需在对应的权威服务器注册,无需修改全局配置。
地理分布优化:
-
权威服务器可部署在靠近用户的位置,降低延迟(例如 CDN 利用 DNS 返回用户最近的节点 IP)。
(2)简单的讲
比如:
非分布式是一个加法式子:1+2+3+4 = 10
那分布式就是把加法式子拆分:1+2=3 | 3+4 =7 | 3+7 =10
这个拆分的思想,就是把复杂的业务拆分成若干步骤,由不同的服务器分别完成
(3)与集中式系统的对比
数据存储 | 分片存储,各层级独立管理 | 单一数据库存储所有数据 |
故障影响 | 局部故障不影响整体 | 单点故障导致全网瘫痪 |
扩展性 | 易于扩展新域 | 扩展需修改全局配置 |
延迟 | 通过缓存和地理分布优化 | 依赖中心节点的响应速度 |
二、命令
注意:本篇的命令配置涉及两个虚拟机(模拟一个DNS服务端,一个客户端)的配置和测试,请自行克隆准备两个虚拟机哦!
1、安装dns(dns端进行,后续只要表明“dns端”即说明在dns端主机进行命令配置)
(1)软件BIND介绍
Linux 中的 DNS 服务器软件:BIND (Berkeley Internet Name Domain)
-
最广泛使用的开源 DNS 服务器,支持权威 DNS 和递归 DNS。
-
特点:
-
支持 DNSSEC(DNS 安全扩展)。
-
高度可配置,适用于大型网络。
-
主/从服务器架构支持数据同步。
-
-
配置文件:
-
主配置文件:/etc/named.conf
-
区域文件:/var/named/ 目录下(如 example.com.zone)。
-
(2)安装命令
安装需要搭建软件仓库,详情请见之前博客,该命令在dns端主机进行!(后续只要表明“dns端”即说明在dns端主机进行命令配置)
dnf install bind.x86_64 -y
示例
2、火墙允许(dns端进行)
如果系统开启firewalld,则需要放行火墙
(1)放行火墙
firewall-cmd –permanent –add-service=dns
示例
(2)重启火墙
firewall-cmd –reload
示例
3、启动服务(dns端进行)
启动dns服务
systemctl enable –now named
示例
4、DNS配置(dns端进行)
(1)进入/etc/named.conf
vim /etc/named.conf
示例
(2) 进行修改
找到options项,在其下进行修改,具体看图片
示例
解释:
- listen-on port 53 { any; }; —— 在系统所有接口上开启53端口
- allow-query { any; }; —— 允许所有人查询dns上的信息
(3)重启服务
重启服务来刷新状态
systemctl restart named
示例
做到这里,我们就确保能够访问dns
(4)测试(客户端进行)
在客户端指定服务端dns的ip,并在客户端进行测试
1)进入/etc/resolv.conf
vim /etc/resolv.conf
示例
2)进行编辑
进入后添加nameserver,后面跟的ip地址是dns端主机的ip地址
nameserver 192.168.76.100
示例
dns自己的主机端也顺带这样做了:
3)测试
dig www.baidu.com
示例
能访问成功,但延迟巨大
那么,怎么解决延迟大的问题呢?接下来就解决这个问题
5、dns高速缓存的配置(解决毫秒延迟大的问题)
(1)进入/etc/named.conf(dns端进行)
vim /etc/named.conf
示例
(2)进行修改
进入后,找回options项,添加forwarders,指定当本地没有要查询的信息时去8.8.8.8
wq保存
(3)重启服务
systemctl restart named
示例
这样就优化了延迟高的问题
(4)测试(客户端进行)
d1g Www.baidu.com
示例
三、 dns高速缓存测试报错信息
如果没有做上述的操作而测试的话,大概率会报错,以下是一些报错信息解析:
1、报错一
# dig www.baidu.com
; <<>> DiG 9.16.23-RH <<>> www.baidu.com
;; global options: +cmd
;; connection timed out; no servers could be reached
此报错的问题:
- DNS的软件没安装,或者服务没开
- 火墙未放行
- dns本身设置未开放网络功能(端口未在ip上开放)
2、报错二
# dig www.baidu.com
; <<>> DiG 9.16.23-RH <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED(#被拒绝), id: 59820
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 99e3ac0c78b8353c0100000068200e77611b08638708a7c5 (good)
;; QUESTION SECTION:
;www.baidu.com. IN A
;; Query time: 2 msec
;; SERVER: 172.25.254.10#53(172.25.254.10)
;; WHEN: Sun May 11 10:41:56 CST 2025
;; MSG SIZE rcvd: 70
此报错的问题:
- dns的配置中限制了当前主机访问服务的请求
四、搭建dns正向解析
并不是所有的网站都希望或者能够放到世界的DNS服务器中,或者说在世界所有dns中没有记录可以查询,此时就可以搭建dns正向解析,该容器内彼此访问都是用域名的方式
1、创建要维护的域
(1)进入/etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
示例
该文件为dns的域名维护子配置文件,文件被包含在主配置文件中
(2)编辑修改
按照下图进行修改
示例
图中框内的一些解释:
- "lincoln.org" —— 引号内表示维护的域名,lincoln为博主的用户名,这里你们随便取名即可,.org是网站的一种后缀(类似.com)
- type master; —— 表示当前dns为主dns,master就是主人的意思,代表此dns为主dns
- file "lincoln.org.zone"; —— 指定此域中的数据存放文件
2、建立维护域所需要的数据文件
如标题所示,建立维护域是需要一些必要的数据文件的
(1)复制一份named.localhost并进行修改
cp -p /var/named/named.localhost /var/named/lincoln.org.zone
示例
进入复制的文件:
vim /var/named/lincoln.org.zone
示例
进行修改:
示例
原图:
(2)重启服务
systemctl restart named
示例
(3)测试(客户端进行)
测试刚刚自己写的域名
dig www.lincoln.org
示例
访问成功,正向dns解析搭建完成
五、辅助dns的部署
dns服务器可能会面临访问人数太多,导致dns相应速度变慢,甚至会因为访问压力太大导致dns崩溃,这时辅助dns就能够帮忙分流,分担压力
1、安装dns相关软件(客户端进行)
这里是要把客户端变成辅助dns,所以客户端也要安装dns的相关软件,操作和上面的服务端安装dns大差不差,所以只是简单的过一下命令,详细介绍就看上面的即可
dnf install bind -y
示例
2、火墙放行(客户端进行)
firewall-cmd –permanent –add-service=dns
示例
火墙重启 (客户端进行)
firewall-cmd –reload
示例
3、DNS配置(客户端进行)
vim /etc/named.conf
示例
进入后修改编辑
示例
开启服务
systemctl enable –now named
示例
进入此文件
vim /etc/named.rfc1912.zones
示例
修改编辑
示例
辅助dns的配置和主dns配置有些许不同
重启服务
systemctl restart named
示例
测试
(1)dns端(也就是主dns端)的测试
dig www.lincoln.org
示例
(2)客户端(也就是辅助dns端)的测试
先修改:
vim /etc/resolv.conf
示例
进入后:
开始测试:
六、辅助dns的数据同步优化
主dns在更新域名的A记录时,辅助dns默认是不会跟着同步的,这样就会出现数据差异,从而导致使用辅助dns作为解析服务器的用户得到的地址就是错的
如何解决?
—— 让主dns主动通知辅助dns,我的A记录已经被更改,请同步数据到辅助dns上即可
1、设置同步参数(主dns端进行)
(1)进入/etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
示例
(2)修改编辑
示例
(3)测试
是先解释:
在辅助dns做从新同步时,使用数据文件中的serial从而确定主dns上的A记录被改变,此值变化代表A记录更新。serial值只能做增量变化,最大10位
vim /var/named/lincoln.org.zone
示例
进入修改
重启
systemctl restart named
示例
查看在主dns中的更改生效情况
示例
查看辅助dns中的A记录是否自动更新
示例
评论前必须登录!
注册