深入浅出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。
常用的资源类型type:
A ipv4资源类型,资源格式:
www.a.shifen.com. 54 IN A 14.215.177.39AAAA ipv6资源类型,资源格式:
www.google.com. 127 IN AAAA 2001::6810:fb37CNAME 域名指向其他的域名,相当于转发。资源格式:
www.baidu.com. 10 IN CNAME www.a.shifen.com.
www.a.shifen.com. 54 IN A 14.215.177.38MX 邮件域名类型,mx比较特别的是在记录前多了一个数值,作为优先级别,值越小,优先级越高:
163.com. 372 IN MX 10 163mx03.mxmail.netease.com.
163.com. 372 IN MX 50 163mx00.mxmail.netease.com.
如上有两条相同的163.com的mx记录,但会优先匹配163mx00.mxmail.netease.com.这条记录,因为他的value为10,拥有更高的优先级别,这个值的范围是[0,65535]HINFO 表示主机信息,主要用于显示主机的软件硬件以及环境信息。一般用的比较少,值为文本类型格式: owner ttl class HINFO "cpu_type os_type“
NS 用于指向那个DNS服务器进行解析,也就是解析源头。格式:
baidu.com. 86400 IN NS ns2.baidu.com.
baidu.com. 86400 IN NS ns4.baidu.com.
例如baidu.com的ns记录就是ns2.baidu.com.以及ns4.baidu.com.,表示baidu.com这个权威区所指向的dns服务器,如果是本机则是127.0.0.1,而如果指向到其他服务器,则这里可以填写其他服务器的域名,例如ns2.baidu.com.而该域名的IP为:
ns2.baidu.com. 68770 IN A 220.181.33.31PTR 用于域名反解析,格式:
例如我们要发想查询8.8.8.8的域名,则可以输入如下格式:dig 8.8.8.8.in-addr.arpa ptr,返回结果:
8.8.8.8.in-addr.arpa. 7419 IN PTR dns.google.
因此我们就可以知道dns.google域名所指向的IP为8.8.8.8
我们验证一下,命令行输入:dig dns.google A
返回结果如下,证实了8.8.8.8的域名就是dns.google:
dns.google. 522 IN A 8.8.4.4
dns.google. 522 IN A 8.8.8.8SOA 记录表示权威区的起点,用于表示该权威区的一些特定信息:
dns.google. 21600 IN SOA ns1.zdns.google. dns-admin.google.com. 2684362896 21600 3600 1209600 300
根据上面的记录可以拆解为几个部分:
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:表示该资源在缓存中保留的时间,单位是秒。