DNS服务

Posted by Jason Lee on 2020-11-21

简介

什么是DNS

Domain Name System (缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。他的的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。
举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69, DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符

DNS 的运行过程

当一台主机想要通过域名访问某个服务的内容时,需要先通过当前域名获取对应的 IP 地址。这时就需要通过一个 DNS 解析器负责域名的解析,下面的图片展示了 DNS 查询的执行过程:

  • 本地的 DNS 客户端向 DNS 解析器发出解析 draveness.me 域名的请求;
  • DNS 解析器首先会向就近的根 DNS 服务器 . 请求顶级域名 DNS 服务的地址;
  • 拿到顶级域名 DNS 服务 me. 的地址之后会向顶级域名服务请求负责 dravenss.me. 域名解析的命名服务;
  • 得到授权的 DNS 命名服务时,就可以根据请求的具体的主机记录直接向该服务请求域名对应的 IP 地址;

这里涉及到几个名词,一个是DNS服务器,一个是顶级域名,一个是根DNS服务器。
想要了解这几个概念,先要了解一下什么事ICANN.

ICANN

全世界域名的最高管理机构,是一个叫做 **ICANN (Internet Corporation for Assigned Names and Numbers)**的组织。它的总部在美国加州。

它原来是美国商务部下面的一个非盈利机构,所以有人说,美国政府控制了全世界的域名,这种说法是有根据的。2016年,美国政府宣布,ICANN 不再隶属于商务部,成为一个自我管理的独立机构。但是可想而知,美国政府依然对它有绝对影响。

ICANN 负责管理全世界域名系统的运作。它的一项主要工作,就是规定顶级域名(top level domain,简写为 TLD)。

DNS 的命名语法

域名系统

域名空间用于指定组织名称的域的层次结构,不同域间以英文句点隔开,如
www.baidu.com 中的 com、baidu、baidu.com 都是域。

根域名

由于 ICANN 管理着所有的顶级域名,所以它是最高一级的域名节点,被称为根域名**(root domain)**。在有些场合,www.example.com被写成www.example.com.,即最后还会多出一个点。这个点就是根域名。

理论上,所有域名查询都必须先查询根域名,因为只有根域名才能告诉你,某个顶级域名由哪台服务器管理。事实上也确实如此,ICANN 维护着一张列表,里面记载着顶级域名和对应的托管商。

比如,我要访问www.example.com,就必须先询问 ICANN 的根域名列表,它会告诉我.com域名由 Verisign 托管,我必须去找 Verisign,它会告诉我example.com服务器在哪里。

再比如,我要访问abc.xyz,也必须先去询问根域名列表,它会告诉我.xyz域名由 CentralNic 公司托管。根域名列表还记载,.google由谷歌公司托管,.apple由苹果公司托管等等。

由于根域名列表很少变化,大多数 DNS 服务商都会提供它的缓存,所以根域名的查询事实上不是那么频繁。

顶级域名(TLD)

所谓顶级域名(TLD),就是最高层级的域名。简单说,就是网址的最后一个部分。比如,网址www.example.com的顶级域名就是.com

ICANN 就负责规定,哪些字符串可以当作顶级域名。截至2015年7月,顶级域名共有1058个。

它们可以分成两类。一类是一般性顶级域名(gTLD),比如.com、.net、.edu、.org、.xxx等等,共有700多个。另一类是国别顶级域名(ccTLD),代表不同的国家和地区,比如.cn(中国)、.io(英属印度洋领地)、.cc( 科科斯群岛)、.tv(图瓦卢)等,共有300多个。

ICANN 自己不会去管理这些顶级域名,因为根本管不过来。想想看,顶级域名有1000多个,每个顶级域名下面都有许多批发商,如果每个都要管,就太麻烦了。

ICANN 的政策是,每个顶级域名都找一个托管商,该域名的所有事项都由托管商负责。ICANN 只与托管商联系,这样管理起来就容易多了。举例来说,.cn域名的托管商就是中国互联网络信息中心(CNNIC),它决定了.cn域名的各种政策。

目前,世界最大的顶级域名托管商是美国的 Verisign 公司。

DNS 的查找过程

DNS解析流程分为递归查询和迭代查询,递归查询是以本地名称服务器为中心查询, 递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。其实DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代

迭代查询的区别

递归查询

在这个查询过程中,一直是以本地名称服务器(Local DNS)为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理的作用。如果考虑了本地名称服务器的缓存技术(也就是在DNS服务器上对一定数量的以前查询记录保存一定时间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,则递归解析的基本流程如下:

  • (1)客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。

  • (2)本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面一样的DNS域名查询请求发给根名称服务器。

  • (3)根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器。

  • (4)本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面一样的DNS域名查询请求。

  • (5)对应的顶级名称服务器在收到DNS查询请求后,也是先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给DNS客户端,否则向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址。

然后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。然后再由本地名称服务器返回给DNS客户,同时本地名称服务器会缓存本次查询得到的记录项。

DNS 主从服务器

据服务器与所提供域名解析记录的关系,将DNS服务器分为不同的角色:

  • 1)缓存域名服务器,也称为 唯高速缓存服务器,通过向其他域名服务器查询获得域名->IP地址记录,将域名查询结果缓存到本地,提高重复查询时的速度

  • 2)主域名服务器,特定DNS区域的官方服务器,具有唯一性,负责维护该区域内所有域名->IP地址的映射记录

  • 3)从域名服务器(通俗一点就是用于备份DNS服务器的)也称为 辅助域名服务器,其维护的 域名->IP地址记录 来源于主域名服务器

DNS 权威解释和非权威解释

DNS服务器在自己的区域文件里找到了客户端需要查询的记录,就会返回一个权威性应答。

例如客户端要查找srv1.contoso.com主机的IP地址。在contoso.com的DC(也就是DNS服务器)上查找该主机的“A记录”,我们找到了。就把记录内容通过DNS应答的方式发还给客户端,这就是一个权威性应答。――当然实际的查询方式比较复杂远没有我说的这么简单。

  • 如果DNS服务器最近被查找过该主机(可能其他客户端也查找过)记录,就会在缓存里找到记录应答客户端――当然上一种方法快。
  • 如果该DC服务器找不到srv1.contoso.com主机的A记录,就会返回(RecordNotFound)应答――同样也是权威性应答
  • 如果接到DNS查询请求的服务器不是contoso.com的DC(Dns服务器),那么有3种方法处理该请求:
  • 首先,查询其他DNS服务器直到找到,然后此服务器将找到的内容返回给客户端――非权威性应答
  • 其次,推荐客户端到上一级DNS服务器找。―――非权威性应答。
  • 最后,如果原来被别人访问过,本地有该缓存,那么用缓存里的数据回答―――非权威性应答。

DNS的记录类型

DNS server 内的每一个域名都有自己的域文件(zone file),zone file 是由多个记录组成的,每一个记录就被称为资源记录(Resource Record,简称RR)。

当在设定 DNS 域名解析、反向解析及其他的管理目的时,往往需要使用不同类型的RR,也就是我们常说的记录类型。

RR 记录类型格式

owner TTL CLASS TYPE RDATA
  • owner
    指示拥有资源记录的DNS域名

  • TTL
    对大多数资源记录,该字段为可选项。指明其它DNS服务器在期满放弃该记录信息之前对其缓存多长时间。TTL值为零的资源记录不会被缓存

  • CLASS

    • IN(Internet类)
    • CS(CSNET类)、CH(CHAOS类)、HS(Hesiod)很少使用
  • TYPE(这里只列出以下常见):

    • A:主机地址
    • AAAA:IPv6主机地址
    • NS:权威名称服务器
    • CNAME:别名的正则名称
    • SOA:标记权威区域的开始
    • MX:邮件交换
  • RDATA
    用于描述资源的信息且长度可变的必要字段,随CLASS和TYPE的变化而变化

记录类型举例

  • SOA 记录

SOA记录表明了DNS服务器之间的关系。SOA记录表明了谁是这个区域的所有者。就是谁对这个区域有修改权利。常见的DNS服务器只能创建一个标准区域,然后可以创建很多个辅助区域。标准区域是可以读写修改的。

而辅助区域只能通过标准区域复制来完成,不能在辅助区域中进行修改。而创建标准区域的DNS就会有SOA记录,或者准确说SOA记录中的主机地址一定是这个标准区域的服务器IP地址。

NS记录NS记录和SOA记录是任何一个DNS区域都不可或缺的两条记录,NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析,SOA记录说明负责解析的DNS服务器中哪一个是主服务器。因此,任何一个DNS区域都不可能缺少这两条记录。NS记录,说明了在这个区域里,有多少个服务器来承担解析的任务

OA记录 NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了,SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器!

SOA 格式

1
2
3
4
5
6
7
domain.com.  IN SOA ns1.domain.com. admin.domain.com. (
12083 ; serial number
3h ; refresh interval
30m ; retry interval
3w ; expiry period
1h ; negative TTL
)
  • domain.com.:这是区域的根。这表明该区域文件用于 http://domain.com 域名。通常,你会看到这个用 @ 代替,它只是一个占位符,

  • IN SOA:”IN” 部分表示互联网(它会出现在许多记录中)。 SOA 是表示这是开始权限记录。

  • ns1.domain.com.:这定义了该域的主名称服务器。名称服务器可以是主服务器或从服务器,如果配置了动态 DNS,就像这里,则一个服务器需要是 “主服务器”。如果你未配置动态 DNS,那么这只是你其中一个主名称服务器。

  • admin.domain.com.:这是这个区域文件管理员的邮箱地址。邮箱地址的 @ 这里用一个 . 代替。如果你的名字中也有 . 它会用 \ 代替。(比如 your.name@domain.com 变成 your\http://name.domain.com

  • 附加说明

    • 12083:这是区域文件的序列号。每次编辑区域文件时,必须增加此序列号以使区域文件能够正确传播。从服务器将检查主服务器的区域序列号是否大于它们在系统上的序列号。如果是,它请求新的区域文件,如果不是,它继续服务原始文件。
    • 3h:这是区域的刷新间隔。这是从服务器向主服务器轮询检查区域文件是否变更之间等待的时间量。
    • 30m:这是此区域的重试间隔。如果从机在刷新周期结束时无法连接到主机,则它将等待此时间并重试轮询主机。
    • 3w:这是到期时间。如果从服务器在此时间内无法与主服务器联系,则它不再作为此区域的权威来源的返回响应。
    • 1h:这是名称服务器在此文件中找不到所请求的名称时缓存找不到结果的时间量。
  • NS 记录
    NS记录实际上也是在DNS服务器之间,表明谁对某个区域有解释权,即权威DNS。
    语法
1
2
3
4
owner  TTL  CLASS  NS name_server_domain_name

例如:
www.baidu.com. IN NS baidu.com.
  • CNAME记录:
    CNAME 记录为您的服务器(由A或AAAA记录定义的名称)定义规范名称的别名。比较多的是用在CDN加速上

举个CDN的栗子 :假如你是DD公司老板,你公司中的一台IP为1.1.1.1的服务器,注册了域名为http://www.dd.com,要对外提供客户访问。随着公司越做越大,访问量也越来越多,服务器顶不住了,你去找CDN提供商购买CDN加速服务,这个时候他们要求你的域名做个CNAME指向,他们给你的一个域名叫http://www.xdd.com,当用户访问http://www.dd.com的时候,本地DNS会获得CDN提供的CNAME域名:http://www.xdd.com,然后再次向DNS调度系统发出请求,通过DNS调度系统的智能分析,把这个http://www.xdd.com指向一个(离用户地理位置最近的)CDN提供商的服务器IP,让用户就近取到想要的资源(如访问网站),大大降低了延迟。

1
2
3
owner  TTL  CLASS  NS name_server_domain_name
例如:
www.baidu.com. 413 IN CNAME www.a.shifen.com.
  • A记录:
    通俗来说A记录就是服务器的IP,域名绑定A记录就是告诉DNS,当输入域名的时候给你引导向设置在DNS的A记录所对应的服务器。
1
2
3
4
owner  TTL  CLASS  NS name_server_domain_name

例如:
www.a.shifen.com. 98 IN A 220.181.38.149
  • 其他的略

DNS 相关命令

  • dig 命令
    虽然只需要返回一个IP地址,但是DNS的查询过程非常复杂,分成多个步骤。
    工具软件dig可以显示整个查询过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
➜  ~ dig www.baidu.com
// dig 相关信息
; <<>> DiG 9.10.6 <<>> www.baidu.com //dig程序的版本号,和要查询的域名
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10663
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

/**
*
* opcode 操作码,QUERY,代表是查询操作
* status 状态,NOERROR,代表没有错误
* id 编号,54864,16bit数字,在dns协议中,通过编号匹配返回和查询。
* flags 标志,如果出现就表示有标志,如果不出现就未设置标志:
qr query,查询标志,代表是查询操作
rd recursion desired, 代表希望进行递归(recursive)查询操作
ra recursive available 在返回中设置,代表查询的服务器支持递归(recursive)查询操作。
aa Authoritative Answer 权威回复,如果查询结果由管理域名的域名服务器而不是缓存服务器提供的,则称为权威回复。
* QUERY 查询数,1代表1个查询,对应下面的QUESTION SECTION中的记录数
* ANSWER 结果数,4代表有4项结果,对应下面ANSWER SECTION中的记录数
* AUTHORITY 权威域名服务器记录数,0代表该域名有0个权威域名服务器,可供域名解析用。
* ADDITIONAL 格外记录数,0代表有0项格外记录。

*/

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A


// 以下是返回的记录列表
;; ANSWER SECTION:
// 域名 ttl 记录类型 类型值
www.baidu.com. 362 IN CNAME www.a.shifen.com.
www.a.shifen.com. 43 IN A 220.181.38.150
www.a.shifen.com. 43 IN A 220.181.38.149

// 一下是DNS 服务器返回的结果
;; Query time: 34 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Thu Dec 17 19:47:02 CST 2020
;; MSG SIZE rcvd: 101
  • nslookup

用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题
nslookup domain [dns-server]
//如果没有指定dns服务器,就采用系统默认的dns服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nslookup -qt = type domain [dns-server]
type:
A -->地址记录
AAAA -->地址记录
AFSDB Andrew -->文件系统数据库服务器记录
ATMA -->ATM地址记录
CNAME -->别名记录
HINHO -->硬件配置记录,包括CPU、操作系统信息
ISDN -->域名对应的ISDN号码
MB -->存放指定邮箱的服务器
MG -->邮件组记录
MINFO -->邮件组和邮箱的信息记录
MR -->改名的邮箱记录
MX -->邮件服务器记录
NS --> 名字服务器记录
PTR ->反向记录
RP -->负责人记录
RT -->路由穿透记录
SRV -->TCP服务器信息记录
TXT -->域名对应的文本信息
X25 -->域名对应的X.25地址记录

看一下返回结果

1
2
3
4
5
6
7
8
Server:		114.114.114.114
Address: 114.114.114.114#53

Non-authoritative answer: //是否是权威回答
Name: baidu.com // 域名
Address: 220.181.38.148 //域名ip地址
Name: baidu.com
Address: 39.156.69.79

参考



支付宝打赏 微信打赏

赞赏一下