Linux学习70 DNS服务解析过程精讲
一、总结
1、一次完整的查询请求经过的流程
a、首先是客户端有应用程序期望通过主机名的方式连上另一台主机的话他首先会查本地的hosts文件,如果文件中没有的话他就会查本地的DNS缓存,如果命中就结束,如果没命中就去找我们配置的DNS服务器发送请求,这个DNS服务器有可能是一个DNS服务器,也有可能是一个缓存服务器。他向DNS服务器发起的请求叫做recursion请求,也叫递归请求。
b、DNS服务器收到请求后
(1)、如果对方请求的就是自己负责的域,那么就直接查询数据库并返回答案
(2)、如果不是自己负责解析的域,他会先找自己的缓存,如果缓存命中到此也就结束了,如果没有命中,那么就会以迭代(iteration)的方式找根,然后由根去找一级域,然后再去找二级域等
c、返回的解析答案有可能会有如下几种
(1)、肯定答案,有,并且有结果,这种是可以缓存的。
(2)、否定答案:不存在查询的键,因此,不存在与其查询键对应的值,这种也是可以缓存的,我们可以指定缓存时长
(3)、权威答案:由直接负责的DNS服务器返回的答案
(4)、非权威答案
二、DNS服务器主从,即主-辅DNS服务器
1、主服务器上的数据库是时刻在保存的,我们的从服务器的数据库必须从主数据库同步而来,为了尽可能得到最新的主服务器的数据,他们直接需要建立同步关系
2、主DNS服务器:维护所负责解析的域内的数据库(解析库)的服务器,读写操作均可进行
3、从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库,但只能接受查询不能接受修改
a、“复制操作的实施方式”
(1)、序列号(serial):也即是数据库的版本号:主服务器数据库内容发生变化时,其版本号要递增。每隔一段时间从服务器要请求主服务器数据库的版本号,如果和自己的数据库版本号一样说明主服务器版本号没有改变,如果比自己的数据库版本号大就表示主服务器数据库发生了改变,就会同步主数据库的数据内容。
(2)、刷新时间间隔(refresh):从服务器每多久到主服务器检查序列号更新状况
(3)、重试时间间隔(retry):从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔
(4)、过期时长(expire):从服务器始终联系不到主服务器时,多久之后放弃从服务器同步数据,停止提供服务
(5)、否定答案的缓存时长:
b、主服务器“通知”从服务器随时更新数据
c、区域传送:
(1)、全量传送:axfr,传送整个数据库
(2)、增量传递:ixfr,仅传送变量的数据
三、区域(zone)和域(domain)
1、以wohaoshuai.com域为例
a、FQDN 解析为IP的时候是通过正向解析库来解析的,而我们的正向解析库和正向解析结合起来就叫正向解析区域。
b、我们从IP解析为FQDN的时候是通过反向解析库来实现的,我们反向解析库和反向解析结合起来就叫反向解析区域
c、所以一个域就由两个区域组成。那么域一定会比区域大么?我们有可能在正向解析区域中又有二级域,二级域中又有正向区域和反向区域,因此域和区域不能说谁大谁小。
四、区域数据库文件
1、资源记录:Resource Record,简称rr;
a、记录有类型:A,AAA,PTR,SOA,NS,CNAME,MX
(1)、SOA:Start Of Authority,起始授权记录;一个区域解析库有且只能有一个SOA记录,而且必须放在第一条(相当于标明是哪个岛)
(2)、NS:Name Service:域名服务记录(相当于标明岛主是谁),一个区域解析库可以有多个NS记录,其中一个为主的
(3)、A:Address,地址记录,即主机地址解析为IP地址的记录,通过主机名查询IP地址,只支持IPV4
(4)、AAAA:地址记录,FQDN解析为IPV6
(5)、CNAME:Canonical Name,别名记录,张三的别名叫傻根,傻根的别名就叫张三
(6)、PTR:Pointer,从IP解析为主机名的
(7)、MX:Mail eXchanger,邮件交换器,比如我们发邮件时写的 wohaoshuai@qq.com,那么我们qq.com这个域内不是所有的服务器都用来收发邮件的,因此我们qq.com内就有一个专门发送邮件的服务器,那么他是谁呢?因此就需要我们用MX把它标记起来,那么邮件服务器挂了怎么办呢?因此我们MX内可以有多个,那么谁是主的呢?因此就有优先级的概念
1)、优先级:0-99,数字越小优先级越高
2、资源记录的定义格式
a、语法: name [TTL] IN RR_TYPE value
name:名称,他可能是一个IP或主机名
TTL:客户端可以缓存多少时间,这个值可以省略,省略的话就是同一的默认TTL值
IN:关键字
RR_TYPE:指明资源记录的类型
value:指明其值
b、对SOA记录而言
(1)、name:当前区域的名字;例如"wohaoshuai.com." (注意后面的小点),或者"2.3.4.in-addr.arpa.";
(2)、value:有多部分组成
1)、当前区域的区域名称(也可以使用主DNS服务器名称);
2)、当前区域管dianhao理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
3)、主从服务协调属性的定义以及否定答案的TTL,就是一个括号,括号里也可以换行写
4)、例如我们写一个完整的SOA的资源记录:
wohaoshuai.com. 86400(也就是一天的秒数) IN SOA wohaoshuai. admin.wohaoshuai.com (
2020050801 ; serial [表示2020年5月8号第一版,这个数字加起来最好不要超过十位,因此2020050801我们直接写成01也可以,我们之所以写成2020050801是为了看起来更便捷,分号表示注释,比如 ;serial 表示注释为序列号]
2H ;refresh [表示刷新时间为2小时,;refresh表示注释为刷新时间]
10M ;retry [表示重试时间为10分钟,;retry表示注释为重试时间]
1W ;expire [表示过期时长为1周,;expire表示注释为过期时间]
1D ;negative answer ttl [表示否定答案的ttl值为1天, ;negative answer ttl表示注释为否定答案ttl值]
)
c、对于NS记录而言
(1)、name:当前区域的名称
(2)、value:当前区域的某DNS服务器名字,例如ns.wohaoshuai.com.
注意:一个区域可以有多个ns记录
(3)、例如
wohaoshuai.com. 86400 IN NS ns1.wohaoshuai.com. #表示wohaoshuai.com.域 的域名服务器是ns1.wohaoshuai.com. 这台主机
wohaoshuai.com. 86400 IN NS ns2.wohaoshuai.com. #表示wohaoshuai.com. 域的域名服务器是ns2.wohaoshuai.com. 这台主机
d、对于MX记录而言
(1)、name:当前区域的区域名称
(2)、value:当前区域某邮件交换器(指的是smtp服务器)的主机名
注意:MX记录可以有多个,但每个记录的value之前应该有一个数字表示其优先级
(3)、例如
wohaoshuai.com. IN MX 10 mx1.wohaoshuai.com. #10表示优先级
wohaoshuai.com. IN MX 20 mx2.wohaoshuai.com. #20表示优先级
e、对于A记录而言
(1)、name:某FQDN,例如www.wohaoshuai.com.
(2)、value:某IPV4地址
(3)、例如,我们可以一个主机名有多个地址,一个地址也可以有多个名字
www.wohaoshuai.com. IN A 1.1.1.1
www.wohaoshuai.com. IN A 1.1.1.2
bbs.wohaoshuai.com. IN A 1.1.1.1
f、对于AAAA记录而言
(1)、name:FQDN
(2)、value:IPV6
g、对于PTR记录而言
(1)、name:IP地址,有特定格式,IP反过来写,而且加特定后缀,例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
(2)、value:FQDN
(3)、例如:
4.3.2.1.in-addr.arpa. IN PTR www.wohaoshuai.com.
h、对于CNAME记录而言
(1)、name:FQDN格式的别名
(2)、value:FQDN格式的正式名字
(3)、例如
web.wohaoshuai.com. IN CNAME www.wohaoshuai.com.
i、注意:
(1)、TTL可以从全局继承
(2)、@表示当前区域的名称
(3)、相邻的两条记录其name相同时,后面的可省略
比如
www.wohaoshuai.com. IN A 1.1.1.1
www.wohaoshuai.com. IN A 1.1.1.2
可以写成
www.wohaoshuai.com. IN A 1.1.1.1
IN A 1.1.1.2
(4)、对于正向区域来讲,各MX,NS等类型的记录的value为一个FQDN,此FQDN应该有一个A记录