深入浅出DNS

什么是DNS

概念

DNS(Domain Name System)是一个分布式分级管理的数据库。他存储的是hostname与IP的对应关系、邮件路由信息以及其他互联网应用数据等等。

Domain Name

说到DNS就离不开域名(Domain Name),因为DNS主要解析以及存储的对象是域名相关的数据。域名是一种树状结构,形如:www.baidu.com的多级文本构成,其中不同层级用"."来进行区分。同时域名的层级是从右往左递增的。例如上面的www.baidu.com从右往左开始

  • 根域名是".",我们所看到的域名尾部并没有显示".",但所有的域名的根域名都是".",他是域名树的根。

  • 顶级域名是:com

    • 顶级域名又分三类:国家和地区域名;通用顶级域名;新顶级域名;

    • 国家和地区域名:用于国家、地区等区域性类型。例如cn表示中国,us表示美国等等。

    • 通用顶级域名:com就是常见的通用域名,其一般表示工商企业类型,而net表示网络提供商,例如csdn.net,非营利组织的一般都是org类型。

    • 新顶级域名,就比较杂例如新出来的top,xyz,info等比较具有个性的域名。

  • 二级域名是:baidu,一般是由公司、组织或者个人的名称组成。

  • 子域名:www,子域名一般用于网站名称,例如www一般比用于表示网站的主页,而例如 blog.csdn.net中的blog就能一目了然的表示csdn这个网站下的blog业务模块。

DNS的构成

ACL(Access Control Lists)

ACL顾名思义就是访问控制列表,通过配置ACL来运行或者禁止对应的IP或者望断访问DNS。如果被禁止或者在允许访问范围外的IP请求dns解析,则会返回serverfail,无法进行dns解析。

视图(View)

视图作为DNS的一个重要组成,起到一个隔离作用,即根据配置不同的视图以及权威区,并且通过不通的视图选择方式返回相应的解析结果。例如下图的客户端IP为:192.168.1.66,请求dns服务器,此时dns配置了两个视图分别是view1以及view2,因为view1的优先级别更高,因此会优先匹配view1,当没有匹配到view1时,则会去匹配第二个视图view2,而此时view2的匹配列表里包含了子网192.168.1.0/24,是包含192.168.1.66的,因此匹配view2,进入视图。

常用的视图选择方式有两种:

  • 根据请求源IP匹配。通过配置视图的match-clients(子网|IP),首先视图是有优先级,根据IP源匹配视图会根据视图优先级别从高到低进行匹配,如果IP匹配则进入该视图。否则继续往下匹配视图,如果都没找到则进入默认视图。

  • 根据TSIG选择视图。TSIG是一种UDP协议方式直接请求DNS服务器进行通信,例如进行添加、删除权威记录或者请求同步权威记录等操作。但该方式的请求内容必须加密,并且得获取dns服务器配置的key,才可以进行通信,而加密算法一般支持:hmac-md5、hmac-sha1、hmac-sha256、hmac-sha512。

权威区(Authority Zone)

权威区是配置在视图内的域名树的集合,一个权威区代表一个域名树根节点,例如权威区名:zone.com则该权威区内存的权威记录则军事zone.com的子域名,而权威区内的域名存储方式是基于红黑树实现的域名树。客户端请求域名解析进入视图以后就会查找域名树,按照最佳匹配原则查找域名,如果匹配到则返回权威应答,否则进入下一步——查找缓存。

权威区的类型主要分为两类:master以及slave,一般主区(master)用于存储、更新权威记录,而辅区(slave)则是定期同步主区的资源记录过来,而一般是多个辅区提供对外域名解析服务。

下图则是主辅区同步流程:

权威记录(Authority Resource Records)

权威记录是由:owner name(资源的名字)、type(资源类型)、TTL(缓存过期时间)、class(dns协议族,例如IN)、RDATA(资源记录值,不同的资源type资源记录值格式不同)组成。

例如:www.a.shifen.com. 54 IN A 14.215.177.39

就表示一个权威记录响应数据,www.a.shifen.com.是资源名称,54是TTL,IN是class类型,A表示ipv4记录,14.215.177.39就是RDATA资源记录的具体内容。因为这里的资源类型是A,所以RDATA则是ipv4。

根据上面的记录可以拆解为几个部分:

MNAME:即ns1.zdns.google.表示该主权威区的记录

RNAME:即dns-admin.google.com.表示本权威区负责人的邮箱地址

SERIAL:2684362896表示序列号,每次权威区记录变更该序列号都会递增,并且该序列号是用于主辅区传输校对数据时也会用到。

REFRESH:21600表示该权威区刷新的时间间隔

RETRY:3600表示刷新权威区失败后的重试时间间隔

EXPIRE:1209600表示该权威区最长过期时间

MINIMUM:300表示限定该权威区内的资源记录最小的TTL时间

  • TXT 文本资源记录,其值为文本。格式:

例如我们输入命令:dig dns.google txt

返回结果如下,可以看出dns.google的txt记录纸有两个:

dns.google. 900 IN TXT "v=spf1 -all"

dns.google. 900 IN TXT "https://xkcd.com/1361/"

  • 常用的资源分类(class)

    • IN 表示Internet互联网,一般都是IN类型的。

    • CH Chaosnet,是一个LAN口协议,在19世纪70年代创建,目前用途较少。但是在bind的内置区内在使用。

    • HS 也是很少用的class,它是用于共享系统数据信息,例如users、groups、printer等等。

  • TTL:表示该资源在缓存中保留的时间,单位是秒。

DNS如何工作?