DNS详解(正/反向解析)

发布时间:2024年01月16日

目录

一、对DNS初步理解

1、DNS存在的意义

2、概念介绍

3、DNS服务器的类型

?二、DNS查询类型及原理

1、查询方式

1.1 递归查询

1.2 迭代查询

2、查询过程

三、正向解析

1、各种资源记录

1.1 SOA记录

1.2 NS记录

1.3 MX记录

1.4 A记录

1.5 PTR记录

1.6 CNAME记录

四、软件bind

1、安装及正向解析的配置方法

1.1 安装bind

1.2 正向解析

2、反向解析的配置方法

3、主从复制


一、对DNS初步理解

1、DNS存在的意义

? ? ? 当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.baidu.com,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。

2、概念介绍

  • ?DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。
  • ?它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp:名字解析, 53/tcp:主从服务器之间的同步。
  • ?实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。
  • ?根据地址解析的方向不同,DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区域(包含 IP 地址到域名的解析记录)

3、DNS服务器的类型

  • 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,

    但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定

    其他 DNS 服务器作为解析来源。

  • 主域名服务器:管理和维护所负责解析的域内解析库的服务器

  • 从域名服务器

    从主服务器或从服务器"复制"(区域传输)解析库副本

    序列号:解析库版本号,主服务器解析库变化时,其序列递增

    刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔

    重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔

    过期时长:从服务器联系不到主服务器时,多久后停止服务

    通知机制:主服务器解析库发生变化时,会主动通知从服务器

?二、DNS查询类型及原理

1、查询方式

1.1 递归查询

一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手)

1.2 迭代查询

一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。(需要自己动手)

2、查询过程

正向解析查询过程:

①先查本机的缓存记录

②查询hosts文件

③查询dns域名服务器,交给dns域名服务器处理 以上过程成为递归查询:我要一个答案你直接会给我结果

④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步

⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器

⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器

⑦求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器

⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端

三、正向解析

1、各种资源记录

区域解析库:由众多资源记录RR(Resource Record)组成

name [TTL] IN rr_type value

记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX,TXT

  • SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。

  • A(internet Address):作用,域名解析成IP地址

  • AAAA(FQDN): --> IPV6

  • PTR(PoinTeR):反向解析,ip地址解析成域名

  • NS(Name Server):,专用于标明当前区域的DNS服务器,服务器类型为域名服务器

  • CNAME : Canonical Name,别名记录

  • MX(Mail eXchanger)邮件交换器

  • TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等

SOA记录与NS记录的区别:

NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;

SOA记录设置一些数据版本和更新以及过期时间等信息。

1.1 SOA记录

name: 当前区域的名字,例如"kgc.com."

value: 有多部分组成

注意:

  1. 当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字

  2. 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换。例如:admin.kgc.com

  3. 主从服务区域传输相关定义以及否定的答案的统一的TTL

范例:

name ? ? ? ? ? ? ?[TTL] ? ? ? ? ? ?IN ? ? ? ? ?rr_type ? ? ? ? ? ? value
域名 ? ? ? ? ? ? ? 缓存 ? ? ? ? ? ? Internet协议 资源类型 ? ? ? ? ?值


1. TTL可从全局继承缓存时间
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机


$TTL 1D(统一的ttl定义1天,不写D 是秒)
@ ? ? ? IN SOA ?master.kgc.com. admin.kgc.com. (
? ? ? ? ? ? ? ? ?当前服务器的名称 ? ? 邮箱地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0 ? ? ? ; serial ? #是否有更新 ?版本号 更新文件 手动把 0 加1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1D ? ? ?; refresh ?#刷新时间 拉取时间
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1H ? ? ?; retry ? ?#失败后一个小时 后再试一次
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1W ? ? ?; expire ? #过期时间,老是拉取不了,1周以后过期
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3H ) ? ?; minimum ?#老是去查错误的解析地址,3小时内的缓存下,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用户再查直接返回找不到

1.2 NS记录

name: 当前区域的名字

value: 当前区域的某DNS服务器的名字,例如: ns.kgc.org.

注意:

  1. 相邻的两个资源记录的name相同时,后续的可省略

  2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

  3. 一个区域可以有多个NS记录

范例:

master IN NS kgc.com.

master? ? ? A? ? 192.168.80.5

1.3 MX记录

name: 当前区域的名字

value: 当前区域的某邮件服务器(smtp服务器)的主机名

注意:

  1. 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高

  2. 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

范例:

mail? ? ?IN MX 10 mx1.kgc.org.
? ? ? ? ? ? IN MX 20 mx2.kgc.org.
mx1? A ??192.168.91.10
mx2? A ??192.168.91.10

1.4 A记录

name: 某主机的域名解析,例如:www.kgc.com

value:主机名对应主机的IP地址

避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

范例:

www.kgc.com. IN A 1.1.1.1
www.kgc.com. IN A 2.2.2.2
www.kgc.com. IN ??A 3.3.3.3
www.kgc.com. IN ??A 4.4.4.4
* IN A 5.5.5.5
#代表泛域名
@ ? IN ??A 6.6.6.6
#代表不需要名字

1.5 PTR记录

name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:inaddr.arpa.,所以完整写法为:

4.3.2.1.in-addr.arpa.
value: FQDN

例如:

3.2.1.in-addr.arpa. IN PTR www.kgc.org.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.kgc.com

1.6 CNAME记录

name: 别名的FQDN
value: 真正名字的FQDN

ftp.kgc.com. ?IN CNAME www.kgc.com

四、软件bind

1、安装及正向解析的配置方法

1.1 安装bind

①下载安装包

?②关闭防火墙和selinux,并开启named服务

③查看named服务对应端口号和地址,修改ens33的DNS地址

④重新启动网络ping www.baidu.com 是否能ping通

1.2 正向解析

①编辑DNS 主配置文件

  • ?把第13行127.0.0.1修改为any,表示服务器上的所有IP地址均可提供DNS域名解析服务。
  • ?把第19行的localhost修改为any,表示本服务器接受所有DNS查询请求。
vim /etc/named.conf
 
 12 options {
 13         listen-on port 53 { any; };
 14         listen-on-v6 port 53 { ::1; };
 15         directory       "/var/named";
 16         dump-file       "/var/named/data/cache_dump.db";
 17         statistics-file "/var/named/data/named_stats.txt";
 18         memstatistics-file "/var/named/data/named_mem_stats.txt";
 19         allow-query     { any; };

②复制正向解析数据文件模板。作为服务器的正向解析数据文件

cp -p /var/named/named.localhost /var/named/ly.com.zone
说明:
①文件名必须和区域配置文件中定义的file的名称相同。 
②保留权限

③编辑正向解析数据文件。注意域名后面的“.”,不要漏了。

vim /var/named/ly.com.zone
 
   $TTL 1D
   @       IN SOA  master.ly.com. admin.ly.com (    
   #域名=ly.cpm. admin的邮箱=admin.ly.com.
                                           0       ; serial
                                           1D      ; refresh
                                           1H      ; retry 
                                           1W      ; expire
                                           3H )    ; minimum
           NS      mater          #域名服务器记录
   master     IN A    192.168.80.111          #地址记录
   www        IN A    192.168.80.222           #地址记录
   mail       IN A    192.168.80.5          #地址记录

④重启named服务并将其设置为开机启动。

systemctl restart named
systemctl enable named

⑤在服务器上进行测试,使用命令ping和nslookup进行测试。

[root@localhost ~]# ping www.lw.com.cn

[root@localhost ~]# nslookup
> www.ly.com                   #在这里输入需要解析的域名

> exit

2、反向解析的配置方法

国家  省  市    区
www.baidu.com.           192.168.80.100   地址
.         192          
com       168  
baidu     80
www       100


[root@localhost named]#vim /etc/named.rfc1912.zones 
#先修改区域配置文件
zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "yun.com.zone";
        allow-update { none; };
};
[root@localhost named]#cp -p kgc.com.zone yun.com.zone
#复制正向解析文件
[root@localhost named]#chmod 640 yun.com.zone ;chgrp named yun.com.zone
[root@localhost named]#vim yun.com.zone  
#编辑文件
TTL 1D
@       IN SOA  master.yun.com. admin.yun.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master.yun.com.
master   A      192.168.80.100
100 IN PTR      www.yun.com.
88  IN PTR      ftp.yun.com.



rndc reload
host 192.168.80.100

3、主从复制

###从服务器的配置
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils.x86_64 -y
#从服务器先安装bind软件
[root@localhost etc]# vim /etc/named.conf 
#两段改成any
listen-on port 53 { any; };
allow-query     { any; }; 
[root@localhost etc]# vim /etc/named.rfc1912.zones
#添加从服务器的配置文件
zone "kgc.com" IN {
        type slave;
        #类型从
        file "slaves/kgc.com.zone";
        #文件地址在/var/named/slaves/ 下
        masters { 192.168.91.100; };
        #申明主服务器的地址
};
[root@localhost etc]# ls /var/named/slaves
kgc.com.zone
[root@localhost etc]# systemctl start named
#主服务器配置好后再启动


#主服务器配置
[root@localhost etc]# vim /etc/named.rfc1912.zones
zone "kgc.com" IN {
        type master;
        file "kgc.com.zone";
        allow-transfer { 192.168.91.103; };
        #添加从服务器的地址
};
[root@localhost etc]#rndc reload
文章来源:https://blog.csdn.net/weixin_58376680/article/details/135543396
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。