作用:

  • DNS(Domain Name System)是互联网上的一项服务,用于将域名和IP地址进行相互映射,使人更方便的访问互联网

  • 正向解析:域名->IP

  • 反向解析:IP->域名

DNS域名解析过程

image-20260517090924389

过程分析

第一步:在浏览器中输入www . google .com 域名,本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的 IP 地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过 TTL 属性来设置。这个缓存时间太长和太短都不太好,如果时间太长,一旦域名被解析到的 IP 有变化,会导致被客户端缓存的域名无法解析到变化后的 IP 地址,以致该域名不能正常解析,这段时间内有一部分用户无法访问网站。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名

第二步:如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的 DNS 解析结果。其实操作系统也有一个[域名解析]的过程,在 Linux 中可以通过 / etc/hosts 文件来设置,而在 windows 中可以通过配置 C:\Windows\System32\drivers\etc\hosts 文件来设置,用户可以将任何域名解析到任何能够访问的 IP 地址。例如,我们在测试时可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地 DNS 解析的规程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的 IP 地址上,导致这些域名被劫持

第三步:前两步是在本地电脑上完成的,若无法解析时,就要用到我们网络配置中的 "DNS 服务器地址" 了。操作系统会把这个域名发送给这个本地 DNS 服务器。每个完整的内网通常都会配置本地 DNS 服务器。

第四步:如果本地 DNS 服务器仍然没有命中,就直接到根 DNS 服务器请求解析。

第五步:根 DNS 服务器返回给本地 DNS 域名服务器一个顶级 DNS 服务器地址,它是国际顶级域名服务器,如. com、.cn、.org 等,全球只有 13 台左右

第六步:本地 DNS 服务器再向上一步获得的顶级 DNS 服务器发送解析请求

第七步:接受请求的顶级 DNS 服务器查找并返回此域名对应的 Name Server 域名服务器的地址,这个 Name Server 服务器就是我要访问的网站域名提供商的服务器,其实该域名的解析任务就是由域名提供商的服务器来完成。 比如我要访问 www.baidu.com,而这个域名是从 A 公司注册获得的,那么 A 公司上的服务器就会有 www.baidu.com 的相关信息

第八步:返回该域名对应的 IP 和 TTL 值,本地 DNS 服务器会缓存这个域名和 IP 的对应关系,缓存时间由 TTL 值控制

第九步:Name Server 服务器收到查询请求后再其数据库中进行查询,找到映射关系后将其IP地址返回给本地DNS服务器

第十步:本地DNS服务器把解析的结果返回给本地电脑,本地电脑根据 TTL 值缓存在本地系统缓存中,域名解析过程结束在实际的 DNS 解析过程中,可能还不止这 10 步,如 Name Server 可能有很多级,或者有一个 GTM 来负载均衡控制,这都有可能会影响域名解析过程

注意:

  • 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询

搭建DNS域名解析服务器

安装软件

[root@server ~]# yum  install  bind  -y

bind服务中三个关键文件

/etc/named.conf : 主配置文件

/etc/named.rfc1912.zones : 区域配置文件(zone),用于保存域名和ip对应关系文件位置的一个文件。

/var/named 目录

 /var/named/named.localhost ----域名解析文件

主配置文件分析

一般需要修改三部分:

  • listen-on port 53 { 127.0.0.1; }; 即监听ip及端口-------ip也可以改为any,意思是可以监听所有主机

  • allow-query { localhost; }; 允许那些客户端访问------也可以改为any,意思是允许所有客户端来解析域名

  • recursion yes; 是否开启递归查询

区域配置文件

正向解析

配置时需要修改:localhost.localdomain---------这里改成你的根域名,例如:❗ 注意:只写根域名openlab.com),不写 www,www 在解析文件里写。

 type master;          # 服务类型:master表示主服务器,slave表示从服务器,hint根服务器

 file "named.localhost";----指定这个域名的解析记录存在哪个文件里

文件默认路径:/var/named/ 系统默认用 named.localhost 存放本机域名解析。

# allow-update:允许更新解析库内容,一般关闭
# allow-query: 允许查询的主机,白名单
# allow-tranfter : 允许同步的主机,白名单,常用
# allow-recursion: 允许递归的主机

反向解析:

zone "0.in-addr.arpa" IN {含义

in‑addr.arpa反向解析固定格式,用来做「IP → 域名」解析。 格式规则:网段倒着写,只需书写网段即可

  • 你的 IP 网段:192.168.88.0/24
  • 倒过来就是:88.168.192.in‑addr.arpa

正向解析资源文件

查看:

[root@server ~]# vim  /var/named/named.localhost 

$TTL 1D # 设置生存周期时间,为1天,$表示宏定义
@ (权威服务器的名字)   IN (intelnet)    SOA  @ (负责解析baidu.com的 DNS 服务器是 ns.baidu.com) rname.invalid. (
        0        ; serial
        1D       ; refresh
        1H       ; retry
        1W       ; expire
        3H )     ; minimum

  		IN	NS	ns.域名.
baidu.com.       IN    NS    ns.baidu.com.------用于告知客户端baidu.com这个区域的负责权威域名解析的主机是ns.baidu.com

这个机子的ip就在下方写
ns.baidu.com.    IN    A    192.168.88.150-------A用于映射主机域名和IP的关系
ns		IN	A	域名解析服务器IP地址
www		IN	A   域名解析服务器IP地址
bbs		IN	A   域名解析服务器IP地址
mail	IN	A   域名解析服务器IP地址

@

代表当前区域的根域名

  • 正向解析:@ = openlab.com
  • 反向解析:@ = 88.168.192.in‑addr.arpa

SOA

起始授权记录,DNS 必须有这条,代表这个区域的管理员信息

③ 第一个 @

= 当前 DNS 服务器的域名,必须改成你的 DNS 服务器域名 例:ns.openlab.com.

③ rname.invalid.

管理员邮箱,rname.invalid. = 系统默认无效邮箱

  • 格式:把 @ 换成 .,比如 123.qq.com.(代表邮箱 123@qq.com)

反向解析资源文件

[root@server ~]# vim  /var/named/named.loopback 
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
IN		 NS       ns.域名.   # 域名服务器记录,注意结尾的点
ns		 IN	  A   域名解析服务器的IP地址
IP地址	PTR      域名.   # PTR 指针记录,用于反向解析

实验1:正向解析

准备工作
# 服务端及客户端都关闭安全软件
[root@server ~]# setenforce  0

[root@server ~]# systemctl stop  firewalld

# 服务端安装bind软件
[root@server ~]# yum  install  bind  -y
DNS配置

第二步:服务端操作,编辑区域配置文件,可以选择一个模版修改局部(推荐),也可以全部清空重启写入数据

[root@server ~]# vim  /etc/named.rfc1912.zones 
zone "baidu.com" IN {  # 双引号中输入,表示管理那个区域
        type master;
        file "baidu.com.zone";  # 双引号中输入,表示ip和域名解析的配置文件的名称,注意:不写路径
        allow-update { none; };
};

第三步:服务端操作,编辑数据配置文件,使用拷贝命令将模版文件(/var/named/named.localhost)复制一份在修改局部,注意:拷贝时需要加-a参数,即拷贝内容及文件属性保证文件内容一致、权限等信息不变

[root@server ~]# cd  /var/named   # 切换到数据配置文件存储路径
[root@server named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@server named]# cp  -a  named.localhost baidu.com.zone # -a 完整拷贝
[root@server named]# vim  openlab.com.zone   # 完整格式修改如下

第四步:服务端重启服务

[root@server named]# systemctl restart named
测试

定义客户端,将客户端的dns修改为服务端的IP地址

[root@node1 ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens32 
dns=192.168.88.150;      # dns改为服务端的IP地址

[root@node1 ~]# nmcli c reload 
[root@node1 ~]# nmcli c up ens32

定位客户端测试

nslookup  ----- 进入交互模式

注意:第三步数据配置文件可以进行精简

精简原则:

  • 可以使用@替代域名,如@替代openlab.com.

  • 可以使用空格或tab重复继承上一行第一列的值

  • 可以省略域名,会自动补全,如:www为www.openlab.com.

  • 配置文件可以省略如下:

实验2:反向解析

DNS设置

第一步:服务端操作,编辑主配置文件

[root@server ~]# vim  /etc/named.conf 
# 需改2行
       listen-on port 53 { any; };  # any为允许所有主机
       
        allow-query     { 192.168.48.131; };  # 此处也可以写为IP地址  

第二步:服务端操作,编辑区域配置文件,添加反向解析记录,注意:区域名称中IP地址反向书写,只需书写网段号

[root@server named]# vim  /etc/named.rfc1912.zones

zone "48.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.48.arpa";-----文件名见名知意
        allow-update { none; };
};

第三步:服务端操作,编辑数据配置文件,复制一份反向解析模(/var/named/named.loopback),复制时需要加-a 参数,在修改局部即可

[root@server ~]# cd  /var/named
[root@server named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@server named]# cp -a named.loopback 192.168.88.arpa
[root@server named]# vim  192.168.88.arpa 

第四步:重启服务

[root@server named]# systemctl restart named
客户端测试

部署DNS从服务器

作用:

  • DNS作为重要的互联网基础设施服务,保证 DNS 域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名查询服务

  • DNS 域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率

  • 注意:

    • 时间同步必须保持一致性

    • bind最好使用同一版本

实验3:主从DNS服务器

完全区域传送
  1. 将一个区域文件复制到多个服务器上的过程叫做区域传送
  2. 将主服务器上的所有信息复制到辅助服务器上来实现完全区域传送,即复制整个区域文件

服务器说明:

设备IP系统
主服务器192.168.88.150Euler
从服务器192.168.88.151Euler

第一步:两个服务器恢复快照,预处理、安装软件、设置网卡信息

第二步:主服务端操作,编辑主配置文件设置监听IP

# 主服务端操作:
[root@server ~]# vim  /etc/named.conf

listen-on port 53 { 192.168.88.150; };  # {}中改为any。也可写为本机IP
         allow-query     { any; }; # {}中改为any,也可写为服务端

第三步:主服务端操作打开区域配置文件,添加如下内容,重点为:允许从服务器的同步请求,即修改为 allow-transfer {允许同步区域信息的主机IP;};参数

[root@server ~]# vim  /etc/named.rfc1912.zones

# 修改为以下内容:
zone "openlab.com" IN {
        type master;
        file "openlab.com.zone";
        allow-transfer { 192.168.88.151; }; 
};
zone "48.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.48.arpa";
        allow-transfer { 192.168.8.151; }; 
};

第四步:主服务端操作,设置正反向解析数据配置文件,内容如下

# 正向解析:
[root@server ~]# cd  /var/named
[root@server ~]# ls
[root@server ~]# cp  -a  named.localhost  baidu.com.zone
[root@server ~]# vim baidu.com.zone

# 反向解析:
[root@server ~]# cd  /var/named
[root@server ~]# ls
[root@server ~]# cp -a named.loopback  192.168.88.arpa
[root@server ~]# vim  /var/named/192.168.88.arpa

#配置内容如下:

第五步:主服务端操作,重启服务

[root@server ~]# systemctl restart named

第六步:从服务端操作,修改主配置文件:

[root@node1 ~]# vim   /etc/named.conf

11    listen-on port 53 { 192.168.88.131; }; ---从服务端的ip
19    allow-query    { any; }; 

第七步:从服务端操作,修改区域配置文件,填写主服务器的 IP 地址与要抓取的区域信息,注意此时的服务类型应该是 slave(从)

第八步:从服务端操作,重启服务,注意:当从服务器的 DNS 服务程序在重启后,就自动从主服务器上同步了数据配置文件,且该文件默认会放置在区域配置文件中所定义的目录位置中

[root@node1 ~]# cd  /var/named/slaves  
[root@node1 ~]# ls                       # 启动服务前查看解析配置文件为空
[root@node1 ~]# systemctl start named
[root@node1 ~]# ls                       # 启动服务后自动拉取

第九步:从服务端操作,确认从服务端的网卡DNS地址修改为自己的IP:192.168.88.131,使从服务器自身也能提供的 DNS 域名解析服务,在进行测试

[root@node1 ~]# nslookup  www.openlab.com
[root@node1 ~]# nslookup  192.168.48.130

实验4:增量区域传送

  • 功能:仅复制区域里变化的文
[root@server ~]# vim  /var/named/openlab.com.zone
$TTL 1D
@       IN SOA  baidu.com. admin.baidu.com. (
                                        1       ; serial  # 修改,需要加1
                                        3      ; refresh  # 修改
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.baidu.com.
       NS      slave.openlab.com.
ns      IN      A       192.168.48.130
www     IN      A       192.168.48.130
bbs     IN      A       192.168.48.130
mail    IN      A       192.168.48.130 # 添加
ftp     IN      CNAME   www
slave   IN      A       192.168.48.131
www1    IN      CNAME   www # 添加

# 注意:1 ; serial 处的序号数字必须加1,否则从服务端不更新

第二步:主服务端操作,重启服务

[root@server ~]# systemctl restart named

第三步:从服务端操作,重启服务

[root@node1 ~]# systemctl restart named

第四步:从服务端操作,测试

[root@node1 ~]# nslookup  mail.baidu.com
[root@node1 ~]# nslookup  www1.baidu.com

实验4:客户端访问外部网站,

客户端要问DNS服务器网站的域名解析地址是多少,找到之后把域名返回给客户,客户端再拿这个地址找网站

客户端要问DNS服务器网站的域名解析地址是多少,找到之后把域名返回给客户,客户端再拿这个地址找网站

node2web网站
masterDNS

第一步:创建web网站

[root@web ~]# mkdir /www/sczl
[root@web ~]# echo "sczl" > /www/sczl/index.html

第二步:

[root@web ~]# yum install nginx -y

第三步:编写配置文件

第四步:重启服务

[root@web ~]# systemctl restart nginx
[root@web ~]# curl 192.168.88.150
sczl

第五步选择一个为DNS的设备

第一步:

[root@web ~]# yum install nginx -y

第二步:编辑主配置文件

vim /etc/named.conf

第三步

vim /etc/named.rfc1912.zones 

配置正向解析模版

第四步:

cp -a /var/named/named.locahost   /var/named/sczl.com.zone

第五步:编写数据配置文件

vim  /var/named/sczl.com.zone

第六步:启动服务

systemctl enable --now named

客户端配置

DNS的ip要改为,DNS域名解析服务器的,并激活

[root@node1 ~]# nmcli c up ens32

测试

查这个网站域名对应的 IP 是多少。
nslookup  www.sczl.com

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐