Llinux-DNS-详解

BamB00 2019-10-08 00:00:00
Categories: Tags:

0x01 DNS的基础概念

DNS:Domain Name Service,基于C/S模式的域名解析服务,应用层协议

监听在53/udp,53/tcp端口

0x02 域名分类

​ TLD(top level domain顶级域)

组织域:.com、.net、.org、.gov、.mil
国家域:.iq、.tw、.hk、.jp、.cn……

0x03 DNS的查找过程

0x04 DNS的域名解析方式

域名->IP 正向解析

​ 正向解析时,给的地址是,如:www.nwc.com.

IP->域名 反向解析

​ 反向解析时,给的地址是,如:4.3.2.1.in-addr.arpa.

​ 解析的实际地址是1.2.3.4

注意:正向解析和反向解析的名称空间,不是同一个空间,也就是不是同一颗树形结构;因此也不是同一个解析库

0x05 DNS服务器的类型

负责解析至少一个域的服务器

​ 主名称服务器:新增的解析条目只能通过主服务器

​ 辅助名称服务器:可以接受解析请求并响应,但新增的解析条目只能在主服务器上新增。主服务器故障后,从服务器也不向外提供解析服务了

​ 不负责域解析的服务器:缓存名称服务器

0x06 DNS解析的答案类型

肯定答案:有解析出来的结果

否定答案:不存在查询的键,因此,不存在与其查询的键对应的值

对于肯定答案和否定答案都可以进行缓存,也都可以指定缓存时长

权威答案:由直接负责的DNS服务器给出的答案,也就是给出的结果是自己负责解析域时,给出的答案

非权威答案:给出的答案是缓存中的缓存下来的条目,此时因为缓存还在有效期,而后端真实的结果可能已经改变,但是由于有缓存,则依然用缓存响应请求,此时返回的就是非权威答案

0x07 DNS 一次完整的查询请求所经过的流程

Client一旦希望以主机名与对方主机通信,此时就需要名称解析,其会先查本地的hosts文件

​ 如果host文件中没有对应的名称和地址的对应关系,则客户端会查DNS服务的本地缓存

​ 如果本地DNS服务的缓存没有命中,则客户端会向客户端所指向的DNS服务器(可能是缓存DNS服务器,也可能是负责具体解析的某DNS主名称服务器)发送查询请求,此时的请求是递归请求(recursion请求)

DNS服务器收到请求后,

​ 如果客户端请求的就是自己负责的域,则直接查询数据库,并返回答案

​ 如果客户端请求的不是自己负责解析的域,则先找服务器自己的缓存,如果缓存没命中,则基于迭代的方式先找根域,然后再找顶级域,然后找二级域,一步一步完成查询请求,并最终返回答案给客户端

0x08 主-辅 DNS服务器

复制或同步操作的实施方式:

​ 序列号:serial

​ 也就是解析数据库的版本号,一旦主服务器的数据库内容发生改变时,其版本号递增。从服务器会每隔一段时间,就向主服务器请求其版本号,如果发现版本号与其不匹配,则执行同步

​ 刷新时间间隔:refresh

​ 从服务器每隔多久到主服务器或其他从服务器上检查序列号,用于判断更新的状况

​ 重试时间间隔:retry

​ 当从服务器尝试与主服务器进行通信,获取其序列号时,发现无法联系上主服务器,则进行重试,两次重试之间的时间间隔

​ 故重试时间间隔应该小于刷新时间间隔,而且要远小于刷新时间间隔

​ 过期时长:expire

​ 从服务器始终联系不上主服务器时,多久之后,放弃从主服务器同步数据;从服务器也就停止提供服务

​ 否定答案的缓存时长:

​ 当结果是明确的无法解析到时,此类否定答案缓存多长时间

主服务器”通知”从服务器随时更新数据

0x09 区域和域

区域: zone 物理概念

域: domain 逻辑概念