> 技术文档 > 【Linux笔记】DNS域名解析服务器(dns的安装、named.conf、resolv.conf、named.rfc1912.zones、slave辅助dns)_named 域名服务安装

【Linux笔记】DNS域名解析服务器(dns的安装、named.conf、resolv.conf、named.rfc1912.zones、slave辅助dns)_named 域名服务安装


一、概念

Linux 系统中的 DNS(Domain Name System,域名系统)是互联网中用于将人类可读的域名(如 www.example.com)转换为计算机可识别的 IP 地址(如 192.168.1.1)的核心服务。


1、核心功能

  • 正向解析:将域名转换为 IP 地址。

  • 反向解析:将 IP 地址转换为域名。

  • 支持多种记录类型(如 AAAAACNAMEMXNS 等)。

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)分布式的优势

  1. 避免单点故障

    • 没有单一服务器控制所有数据,任一节点故障不会导致全网瘫痪。

  2. 负载均衡

    • 查询请求分散到不同层级的服务器,减轻单个节点的压力。

  3. 扩展性

    • 新域名只需在对应的权威服务器注册,无需修改全局配置。

  4. 地理分布优化

    • 权威服务器可部署在靠近用户的位置,降低延迟(例如 CDN 利用 DNS 返回用户最近的节点 IP)。

(2)简单的讲

比如:

非分布式是一个加法式子:1+2+3+4 = 10

分布式就是把加法式子拆分:1+2=3  |  3+4 =7  |  3+7 =10

这个拆分的思想,就是把复杂的业务拆分成若干步骤由不同的服务器分别完成

(3)与集中式系统的对比

特性 分布式 DNS 集中式系统(假设) 数据存储 分片存储,各层级独立管理 单一数据库存储所有数据 故障影响 局部故障不影响整体 单点故障导致全网瘫痪 扩展性 易于扩展新域 扩展需修改全局配置 延迟 通过缓存和地理分布优化 依赖中心节点的响应速度

二、命令

注意:本篇的命令配置涉及两个虚拟机(模拟一个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记录是否自动更新

示例