共计 13741 个字符,预计需要花费 35 分钟才能阅读完成。
试想一个问题,咱们人类能够有多少种辨认本人的形式?能够通过身份证来辨认,能够通过社保卡号来辨认,也能够通过驾驶证来辨认,只管有多种辨认形式,但在特定的环境下,某种识别方法会比其余办法更为适宜。因特网上的主机和人类一样,能够应用多种形式进行标识。互联网上主机的一种标识办法是应用它的主机名,比方 www.baidu.com、www.google.com 等。这是咱们人类习惯的记忆形式,因特网中的主机却不会这么记忆,它们喜爱定长的、有层次结构的 IP 地址。
那么路由器如何把 IP 地址解析为咱们相熟的网址呢?这时候就须要 DNS 呈现了。
<div align = “center”> 图 7-1</div>
DNS 的全称是 Domain Name Systems,它是一个由分层的 DNS 服务器(DNS server) 实现的分布式数据库;它还是一个使得主机可能查问分布式数据库的应用层协定。DNS 协定运行在 UDP 协定上,应用 53 端口。
DNS 根本概述
与 HTTP、FTP 和 SMTP 一样,DNS 协定也是一种应用层的协定,DNS 应用 客户 - 服务器 模式运行在通信的端系统之间,在通信的端系统之间通过 UDP 运输层协定来传送 DNS 报文。
DNS 通常不是一门独立的协定,它通常为其余应用层协定所应用,这些协定包含 HTTP、SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。
上面依据一个示例来形容一下 DNS 解析过程:
你在浏览器键入 www.someschool.edu/index.html 时会产生什么?为了使用户主机可能将一个 HTTP 申请报文发送到 Web 服务器 www.someschool.edu,会经验如下操作:
- 同一台用户主机上运行着 DNS 利用的客户端。
- 浏览器从上述 URL 中抽取出主机名 www.someschool.edu,将这台主机名传给 DNS 利用的客户端。
- DNS 客户端向 DNS 服务器发送一个蕴含主机名的申请,申请 DNS 服务器解析这个主机名的 IP 地址。
- DNS 客户端最终会收到一份答复报文,其中蕴含该指标主机的 IP 地址。
- 一旦浏览器收到指标主机的 IP 地址后,它就可能向位于该 IP 地址 80 端口的 HTTP 服务器过程发动一个 TCP 连贯。
除了提供 IP 地址到主机名的转换,DNS 还提供了上面几种重要的服务:
主机别名 (host aliasing)
,有着简单主机名的主机可能领有一个或多个其余别名,比如说一台名为 relay1.west-coast.enterprise.com 的主机,同时会领有 enterprise.com 和 www.enterprise.com 的两个主机别名,在这种状况下,relay1.west-coast.enterprise.com 也称为 标准主机名,而主机别名要比标准主机名更加容易记忆。应用程序能够调用 DNS 来取得主机别名对应的标准主机名以及主机的 IP 地址。邮件服务器别名(mail server aliasing)
,同样的,电子邮件的应用程序也能够调用 DNS 对提供的主机名进行解析。-
负载调配 (load distribution)
,DNS 也用于冗余的服务器之间进行负载调配,这种负载又叫做 外部负载。忙碌的站点例如 cn com 被冗余散布在多台服务器上,每台服务器运行在不同的端系统,每个都有着不同的 IP 地址。因为这些冗余的 Web 服务器,一个 IP 地址汇合因而与同一个标准主机名分割。DNS 数据库中存储着这些 IP 地址的汇合。因为客户端每次都会发动 HTTP 申请,所以 DNS 就会在所有这些冗余的 Web 服务器之间循环调配了负载。还有一种负载是 全局负载,全局负载个别部署在多个机房之间,每个机房都会有本人的 IP 地址,当用户拜访某个域名时,会在这些 IP 之间进行轮询,如果某个数据中心挂了,就会将对应的 IP 地址删除,比方某个 DNS 客户端会轮询拜访北京和上海的机房,一个挂了会间接应用另外一个,这就是全局负载的概念。
DNS 工作机制
假如运行在用户主机上的某些应用程序(如 Web 浏览器或邮件阅读器)须要将主机名转换为 IP 地址。这些应用程序将调用 DNS 的客户端,并指明须要被转换的主机名。DSN 客户端收到 DNS 后,会应用 UDP 通过 53 端口向网络上发送一个 DNS 查问报文,通过一段时间后,DNS 客户端会收到一个主机名对应的 DNS 应答报文。因而,从用户主机的角度来看,DNS 就像是一个黑盒子,其外部的操作你无奈看到。然而实际上,实现 DNS 这个服务的黑盒子非常复杂,它由散布于寰球的大量 DNS 服务器以及定义了 DNS 服务器与查问主机通信形式的应用层协定组成。
DNS 最早的设计是只有一台 DNS 服务器。这台服务器会蕴含所有的 DNS 映射。这是一种集中式单点设计,这种设计并不适用于当今的互联网,因为互联网有着数量微小并且持续增长的主机,这种集中式的设计会存在以下几个问题
单点故障(a single point of failure)
,单点通常上只有一台 DNS 服务器,如果 DNS 服务器解体,那么整个网络随之瘫痪。通信容量(traaffic volume)
,单个 DNS 服务器不得不解决所有的 DNS 查问,这种查问级别可能是上百万上千万级。远距离集中式数据库(distant centralized database)
,单个 DNS 服务器不可能凑近所有的用户,假如在美国的 DNS 服务器不可能邻近让澳大利亚的查问应用,其中查问申请势必会通过低速和拥挤的链路,造成重大的时延。保护(maintenance)
,保护老本微小,而且还须要频繁更新。
所以 DNS 不可能集中式设计,因为集中式设计齐全没有可扩大能力,因而采纳 分布式设计,这种设计的特点如下。
分布式、层次数据库
分布式设计首先解决的问题就是 DNS 服务器的扩展性问题。因而 DNS 应用了大量的 DNS 服务器,它们的组织模式个别是档次形式,并且散布在全世界范畴内。没有一台 DNS 服务器可能领有因特网上所有主机的映射。相同,这些映射散布在所有的 DNS 服务器上。
大抵来说有三种 DNS 服务器:根 DNS 服务器、顶级域(Top-Level Domain, TLD) DNS 服务器和权威 DNS 服务器。这些服务器的层次模型如下图所示。
<div align = “center”> 图 7-2</div>
假如当初一个 DNS 客户端想要晓得 www.amazon.com 的 IP 地址,那么下面的域名服务器是如何解析的呢?
首先,客户端会先根服务器之一进行关联,它将返回顶级域名 com 的 TLD 服务器的 IP 地址。而后客户端与这些 TLD 服务器之一分割,它将为 amazon.com 返回权威服务器的 IP 地址。最初,该客户与 amazom.com 权威服务器之一分割,它为 www.amazom.com 返回其 IP 地址。
DNS 层次结构
咱们当初来讨论一下下面域名服务器的档次零碎。
根 DNS 服务器
,有 400 多个根域名服务器遍布全世界,这些根域名服务器由 13 个不同的组织治理。根域名服务器的清单和组织机构能够在 https://root-servers.org/ 中找到,根域名服务器提供 TLD 服务器的 IP 地址。顶级域 DNS 服务器
,对于每个顶级域名比方 com、org、net、edu 和 gov 和所有的国家级域名 uk、fr、ca 和 jp 都有 TLD 服务器或服务器集群。所有的顶级域列表参见 https://tld-list.com/。TDL 服务器提供了权威 DNS 服务器的 IP 地址。权威 DNS 服务器
,在因特网上具备公共可拜访的主机,如 Web 服务器和邮件服务器,这些主机的组织机构必须提供可供拜访的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。一个组织机构的权威 DNS 服务器珍藏了这些 DNS 记录。
DNS 查问步骤
上面咱们来形容一下 DNS 的查问步骤,从 DNS 解析 IP 再到 DNS 报文返回的一系列流程。
留神:通常状况下 DNS 会将查找的信息缓存在浏览器或者计算机本地中,如果有雷同的申请到来时,就不再会进行 DNS 查找,而会间接返回后果。
通常状况下,DNS 的查找会经验上面这些步骤
- 用户在浏览器中输出网址 www.example.com 并点击回车后,查问会进入网络,并且由 DNS 解析器进行接管。
- DNS 解析器会向根域名发动查问申请,要求返回顶级域名的地址。
- 根 DNS 服务器会留神到申请地址的前缀并向 DNS 解析器返回 com 的顶级域名服务器 (TLD) 的 IP 地址列表。
- 而后,DNS 解析器会向 TLD 服务器发送查问报文。
- TLD 服务器接管申请后,会依据域名的地址把权威 DNS 服务器的 IP 地址返回给 DNS 解析器。
- 最初,DNS 解析器将查问间接发送到权威 DNS 服务器。
- 权威 DNS 服务器将 IP 地址返回给 DNS 解析器。
- DNS 解析器将会应用 IP 地址响应 Web 浏览器。
一旦 DNS 查找的步骤返回了 example.com 的 IP 地址,浏览器就能够申请网页了。
整个流程如下图所示
<div align = “center”> 图 7-3</div>
DNS 解析器
进行 DNS 查问的主机和软件叫做 DNS 解析器 ,用户所应用的工作站和个人电脑都属于解析器。一个解析器要至多注册一个以上域名服务器的 IP 地址。DNS 解析器是 DNS 查找的第一站,其 负责与收回初始申请的客户端打交道。解析器启动查问序列,最终使 URL 转换为必要的 IP 地址。
<div align = “center”> 图 7-4</div>
DNS 递归查问和 DNS 递归解析器不同,该查问是指向须要解析该查问的 DNS 解析器发出请求。DNS 递归解析器是一种计算机,其承受递归查问并通过收回必要的申请来解决响应。
DNS 查问类型
DNS 查找中会呈现三种类型的查问。通过组合应用这些查问,优化的 DNS 解析过程可缩短传输间隔。在现实状况下,能够应用缓存的记录数据,从而使 DNS 域名服务器可能间接应用非递归查问。
-
递归查问
:在递归查问中,DNS 客户端要求 DNS 服务器(个别为 DNS 递归解析器)将应用所申请的资源记录响应客户端,或者如果解析器无奈找到该记录,则返回谬误音讯。<div align = “center”> 图 7-5</div>
-
迭代查问
:在迭代查问中,如果所查问的 DNS 服务器与查问名称不匹配,则其将返回对较低级别域名空间具备权威性的 DNS 服务器的援用。而后,DNS 客户端将对援用地址进行查问。此过程持续应用查问链中的其余 DNS 服务器,直至产生谬误或超时为止。<div align = “center”> 图 7-6</div>
非递归查问
:当 DNS 解析器客户端查问 DNS 服务器以获取其有权拜访的记录时通常会进行此查问,因为其对该记录具备权威性,或者该记录存在于其缓存内。DNS 服务器通常会缓存 DNS 记录,查问到来后可能间接返回缓存后果,以避免更多带宽耗费和上游服务器上的负载。
DNS 缓存
DNS 缓存 (DNS caching) 有时也叫做DNS 解析器缓存,它是 由操作系统保护的长期数据库 ,它蕴含有 最近的网站和其余 Internet 域的拜访记录。也就是说,DNS 缓存只是计算机为了满足疾速的响应速度而把已加载过的资源缓存起来,再次拜访时能够间接疾速援用的一项技术和伎俩。那么 DNS 的缓存是如何工作的呢?
DNS 缓存的工作流程
在浏览器向内部发出请求之前,计算机会拦挡每个申请并在 DNS 缓存数据库中查找域名,该数据库蕴含有最近的域名列表,以及 DNS 首次发出请求时 DNS 为它们计算的地址。
DNS 缓存形式
DNS 数据可缓存到各种不同的地位上,每个地位均将存储 DNS 记录,它的生存工夫由 TTL(DNS 字段) 来决定。
浏览器缓存
现如今的 Web 浏览器设计默认将 DNS 记录缓存一段时间。因为越凑近 Web 浏览器进行 DNS 缓存,为查看缓存并向 IP 地址发出请求的次数就越少。收回对 DNS 记录的申请时,浏览器缓存是针对所申请的记录而查看的第一个地位。
在 chrome 浏览器中,你能够应用 chrome://net-internals/#dns 查看 DNS 缓存的记录。
<div align = “center”> 图 7-7</div>
操作系统内核缓存
在浏览器缓存查问后,会进行操作系统级 DNS 解析器的查问,操作系统级 DNS 解析器是 DNS 查问来到你的计算机前的第二站,也是本地查问的最初一个步骤。
DNS 报文
独特实现 DNS 分布式数据库的所有 DNS 服务器存储了 资源记录(Resource Record, RR),RR 提供了主机名到 IP 地址的映射。每个 DNS 答复报文中会蕴含一条或多条资源记录。RR 记录用于回复客户端查问。
资源记录是一个蕴含了下列字段的 4 元组。
(Name, Value, Type, TTL)
RR 会有不同的类型,上面是不同类型的 RR 汇总表。
DNS RR 类型 | 解释 |
---|---|
A 记录 | IPv4 主机记录,用于将域名映射到 IPv4 地址 |
AAAA 记录 | IPv6 主机记录,用于将域名映射到 IPv6 地址 |
CNAME 记录 | 别名记录,用于映射 DNS 域名的别名 |
MX 记录 | 邮件交换器,用于将 DNS 域名映射到邮件服务器 |
PTR 记录 | 指针,用于反向查找(IP 地址到域名解析) |
SRV 记录 | SRV 记录,用于映射可用服务。 |
<div align = “center”> 表 7-1</div>
DNS 有两种报文,一种是查问报文,一种是响应报文,并且这两种报文有着雷同的格局,上面是 DNS 的报文格式。
<div align = “center”> 图 7-8</div>
上面咱们就来看一下具体的报文字段。
报文段首部
报文段首部是 DNS 报文的根底构造局部,上面咱们对报文段首部中的每个字节进行形容。
- 事务 ID: TransactionID 由客户端设置,由服务器返回。TransactionID 占用 2 个字节。它是 DNS 的标识,对于同一个申请报文和响应报文来说,这个字段的值是雷同的,以此来辨别客户端申请和响应。
- 标记:标记字段占用 2 个字节。标记字段有很多,而且也比拟重要,上面我给你列出来了所有的标记字段。
<div align = “center”> 图 7-9</div>
每个字段的含意如下
QR(Response)
: 1 bit 的 QR 标识报文是查问报文还是响应报文,查问报文时 QR = 0,响应报文时 QR = 1。OpCode
: 4 bit 的 OpCode 示意操作码,这个值通常是 0,代表规范的申请和响应。OpCode = 4 示意这是一个告诉;OpCode = 5 示意这是一个更新申请。而其余值(1-3)是被弃用的。AA(Authoritative)
: 1 bit 的 AA 代表受权应答,这个 AA 只在响应报文中无效,值为 1 时,示意名称服务器是权威服务器;值为 0 时,示意不是权威服务器。TC(Truncated)
: 截断标记位,值为 1 时,示意响应已超过 512 字节并且曾经被截断,只返回前 512 个字节。RD(Recursion Desired)
: 这个字段是冀望递归字段,该字段在查问中设置,并在响应中返回。该标记通知名称服务器必须解决这个查问,这种形式被称为一个 递归查问 。如果该位为 0,且被申请的名称服务器没有一个受权答复,它将返回一个能解答该查问的其余名称服务器列表。这种形式被称为 迭代查问。RA(Recursion Available)
: 可用递归字段,这个字段只呈现在响应报文中。当值为 1 时,示意服务器反对递归查问。Z
: 保留字段,在所有的申请和应答报文中,它的值必须为 0。AD
: 这个字段示意信息是否是已受权,已受权就是 true。CD
: 这个字段示意是否禁用安全检查,禁用查看就是 true。rcode(Reply code)
:这个字段是返回码字段,示意响应的过错状态。当值为 0 时,示意没有谬误;当值为 1 时,示意报文格式谬误(Format error),服务器不能了解申请的报文;当值为 2 时,示意域名服务器失败(Server failure),因为服务器的起因导致没方法解决这个申请;当值为 3 时,示意名字谬误(Name Error),只有对受权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,示意查问类型不反对(Not Implemented),即域名服务器不反对查问类型;当值为 5 时,示意回绝(Refused),个别是服务器因为设置的策略回绝给出应答,如服务器不心愿对某些请求者给出应答。
置信读者跟我一样,只看这些字段没什么意思,上面咱们就通过抓包的形式,看一下具体的 DNS 报文。
<div align = “center”> 图 7-10</div>
当初咱们能够看一下具体的 DNS 报文,通过 query
可知这是一个申请报文,这个报文的标识符是 0xcd28
,它的标记如下。
- QR = 0 实锤了这就是一个申请。
- 而后是四个字节的 OpCode,它的值是 0,示意这是一个规范查问。
- 因为这是一个查问申请,所以没有 AA 字段呈现。
- 而后是截断标记位 Truncated,示意没有被截断。
- 紧随其后的 RD = 1,示意心愿失去递归答复。
- 申请报文中没有 RA 字段呈现。
- 而后是保留字段 Z。
- 紧随其后的 0 示意未经身份验证的数据是不可承受的。
- 没有 RCODE 字段的值。
而后咱们看一下响应报文。
<div align = “center”> 图 7-11</div>
能够看到,标记位也是 0xcd28
,能够阐明这就是下面查问申请的响应。
查问申请曾经解释过的报文咱们这里就不再阐明了,当初只解释一下申请报文中没有的内容。
- 紧随在 OpCode 前面的 AA 字段曾经呈现了,它的值为 0,示意不是权威 DNS 服务器的响应。
- 最初是 RCODE 字段的响应,值为 0 时,示意没有谬误。
查问区
查问区通常指报文格式中查问的局部。这部分用来显示 DNS 查问申请的问题,包含查问类型和查问类。
<div align = “center”> 图 7-12</div>
这部分中每个字段的含意如下:
查问名(Query Name)
:指定要查问的域名,有时候也是 IP 地址,用于反向查问。查问类型(Query Type)
:DNS 查问申请的资源类型,通常查问类型为 A 类型,示意由域名获取对应的 IP 地址。查问类(Query Class)
:地址类型,通常为互联网地址,值为 1。这个查问类的值通常是 1、254 和 255,别离示意互联网类、没有此类和所有类。
同样的,咱们再应用 wireshark 查看一下查问区域。
<div align = “center”> 图 7-13</div>
能够看到,这是对 mobile-gtalk.l.google.com 发动的 DNS 查问申请,查问类型是 A(0x0001),那么失去的响应类型应该也是 A,A 示意的是 IPv4 类型,如果 Type 是 AAAA,那么就示意的是 IPv6 类型。
<div align = “center”> 图 7-14</div>
如上图所示,响应类型也是 A。
资源记录局部
资源记录局部是 DNS 报文的最初三个字段,包含答复问题区域、权威名称服务器记录、附加信息区域,这三个字段均采纳一种称为资源记录的格局,如下图所示。
<div align = “center”> 图 7-15</div>
资源记录局部的字段含意如下
Name
:DNS 申请的域名。Type
:资源记录的类型,与查问局部中的查问类型是一样的。Class
:地址类型、与问题中的查问类值一样的。TTL
:以秒为单位,示意资源记录的生命周期。RDLENGTH(资源数据长度)
:资源数据的长度。RDATA(资源数据)
:示意按查问段要求返回的相干资源记录的数据。
资源记录局部只有在 DNS 响应包中才会呈现。上面咱们就来通过响应报文看一下具体的字段示例。
<div align = “center”> 图 7-16</div>
其中,域名的值是 mobile-gtalk.l.google.com,类型是 A,类是 1,生存工夫是 5 秒,数据长度是 4 字节,资源数据表示的地址是 63.233.189.188。
CNAME 记录
CNAME 是 DNS 的一种记录类型,它的全称是 Canonical Name Record,这个类型可能将某些 DNS 别名映射到 DNS 命名零碎中。
一个很简略的例子,如下所示
www.cxuanblog.edu
IN
CNAME
www.cxuanblog.com
这是啥意思呢?
这示意的是如果用户在浏览器中输出的使 www.cxuanblog.edu 这个域名,其实输出的是 www.cxuanblog.com 这个域名,如果你打算把博客搬家后,你输出的旧域名其实会间接跳转到新域名的网页下。
CNAME 还有一种广泛的做法就是把它作为 公共域名 进行拜访。
反向 DNS 查问
咱们下面始终探讨的是 DNS -> IP 的这种转换形式,这种形式也是 DNS 的精华所在。然而如果你认真看了图 7 – 1 的话,你会发现还存在一种 IP -> DNS 的转换形式,这种反向的转换也被叫做 反向 DNS 查问。他们之间的关系很像 ARP 和 RARP。
反向 DNS 查问向 DNS 服务器查问 PTR(Pointer Record)记录,如果服务器没有 PTR 记录,则无奈解析反向查找这个过程。PTR 也是一种 RR 资源记录,见表 7 – 1。
PTR 记录会存储 IP 地址,反向查问时,PTR 中存储的 IP 地址会颠倒过去,并附上 .in-addr.arpa 字段,比方如果域的 IP 地址为 192.137.8.22,那么反向查问时,PTR 记录就是 22.8.137.192.in-addr.arpa。
反向 DNS 查问通常用于电子邮件协定中,电子邮件服务器会查看电子邮箱中的电子邮件音讯是否来自真实有效的服务器,垃圾邮件发送者常常应用被劫持机器的,这些邮件过去后就不会有 PTR 记录。电子邮件服务器会回绝不反对反向查找的服务器或者不太非法的服务器邮件。
SOA 记录
如果是权威 DNS 服务器的响应的话,会显示记录存储无关区域的重要信息,这种信息就是 SOA
记录。所有的 DNS 区域都须要一个 SOA 记录能力合乎 IETF 规范。SOA 记录对于区域传输也很重要。
SOA 记录除具备 DNS 解析器响应的字段外,还具备一些额定的字段,如下
<div align = “center”> 图 7-17</div>
具体字段含意
PNAME
:即 Primary Name Server,这是区域的次要名称服务器的名称。RNAME
:即 Responsible authority’s mailbox,RNAME 代表管理员的电子邮件地址,@ 用 . 来示意,也就是说 admin.example.com 等同于 admin@example.com。序列号
:即 Serial Number,区域序列号是该区域的惟一标识符。刷新距离
:即 Refresh Interval,在申请主服务器提供 SOA 记录以查看其是否已更新之前,辅助服务器应期待的工夫(以秒为单位)。重试距离
:即 Retry Interval,服务器应期待无响应的次要名称服务器再次申请更新的工夫。过期限度
:即 Expire limit,如果辅助服务器在这段时间内没有收到主服务器的响应,则应进行响应对该区域的查问。
下面提到了次要名称服务器和辅助名称服务器,他们之间的关系如下。
<div align = “center”> 图 7-18</div>
这块咱们次要解释了 RR 类型为 A(IPv4)和 SOA 的记录,除此之外还有很多类型,这篇文章就不再具体介绍了,读者敌人们能够浏览《TCP/IP 卷一 协定》和 cloudflare 的官网 https://www.cloudflare.com/le… 查阅,值得一提的是,cloudflare 是一个学习网络协议十分好的网站。
区域传输和 DNS NOTIFY
区域传输通常指一块区域内 DNS 服务器中的 RR 资源更新,这样做的目标是为了保障多台服务器保障内容同步。如果区域中一台服务器生效了,那么其余服务器能够长期顶上,充当长期 DNS 服务器的角色。区域传输通常在 轮询(polling)后开启,在轮询中,从服务器会周期性的查看主服务器,查看区域是否曾经更新,区域传输须要开启。
一旦启动区域传输,就会存在两种传输方式:
- 全量传输:即传输整个区域的音讯,全量传输会传输整个区域(应用 AXFR)的音讯。
- 增量传输:增量传输就是传输一部分音讯,增量传输应用(应用 DNS IXFR)的音讯。
然而应用轮询这种形式有一些弊病,因为从服务器会定期检查主服务器上内容是否更新,这是一种资源节约,因为绝大多数状况下都是一次有效查看,所以为了改善这种状况,DNS 设计了 DNS NOTIFY 机制,DNS NOTIFY 容许批改区域内容后主服务器告诉从服务器内容须要更新,应该启动区域传输。
DNS 网络排查工具
DNS 罕用的排查工具有两种,一种是 nslookup,这是个别书籍中举荐应用的排查工具,上面咱们先来介绍一下这个工具的应用,一会儿咱们再来介绍另外一种工具。
nslookup
nslookup 是一款用来解决 DNS 相干问题排查的工具。
它次要分为两种模式,一种是 交互模式 ,一种是 非交互模式。交互模式就是一问一答式的,而非交互模式就是一次执行的。
比方你要应用交互式,就间接在命令行中输出 nslookup。
<div align = “center”> 图 7-19</div>
这样就会开始一个 nslookup 的命令提示符,而后你再输出想要查问的域名即可,如下所示:
<div align = “center”> 图 7-20</div>
非交互式就是间接输出 nslookup 你想要查问的内容即可,比方咱们还以 baidu 为例子。
<div align = “center”> 图 7-21</div>
其实查问进去的内容是一样的,应用形式其实也天壤之别。
nslookup 个别用于查问上面这些常见的场景:
- nslookup 可能查问主机的 IP 地址;
- nslookup 可能查问 IP 地址的域名;
- nslookup 可能查问域名的邮件服务器。
能够通过 nslookup -querytype 查问域名的邮件服务器,如下
<div align = “center”> 图 7-22</div>
会分为两种查问后果,一种是 Non-authoritative answer,这表明咱们想查问的这个网址是从本地 DNS cache 也就是 DNS 缓存中查问进去的,而不是从本地 DNS 通过 DNS 查问后失去的实在域名。
还有一种就是 Authoritative answers,这种就是本地 DNS 通过 DNS 查问后失去的实在域名。
上图还显示了 netease.com 邮件服务器的一些参数,origin 示意源地址,mail addr 示意邮件服务器的地址,serial 示意序列号,refresh 示意刷新距离,retry 示意重试距离,expire 示意过期工夫,minumum 示意最大长度。
dig
咱们的电脑上有多个网络连接,每个网络连接会有不同的 DNS,而且 DNS 也分为主 DNS 和备用 DNS,nslookup 会默认应用主 DNS 连贯,如果你的主 DNS 没有配置,应用可能会存在上面这种状况。
<div align = “center”> 图 7-23</div>
与 nslookup 不同的使,dig 也是一款 DNS 网络排查工具,它会从你的网络连接中选取一块可用的连贯进行解析和应用,不过 windows 10 下默认不反对 dig 命令工具的应用,mac 倒是反对。
上面是 mac 下的 dig 命令。
<div align = “center”> 图 7-24</div>
不过,贴心的我给你整理出来了 windows10 下 dig 的装置和配置应用(https://www.csdn.net/tags/Mtj…)
装置实现后,就能够在 windows 10 下应用 dig 了。
<div align = “center”> 图 7-25</div>
上面咱们就来介绍一下 dig 这款工具都用哪些用法以及各个参数的含意,咱们以 dig baidu.com 来进行阐明
<div align = “center”> 图 7-26</div>
如上图所示,最下面的
; <<>> DiG 9.16.23 <<>> www.baidu.com 示意 dig 版本和要查问的域信息。
;; global options: +cmd 示意全局选项,dig 能够查问多个域信息,这里显示利用于所有查问的选项,默认是 +cmd。
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63799 这行示意头信息,其中操作码 QUERY 示意查问,IQUERY 示意反查问,STATUS 示意监测状态等。
NOERROR 示意这个申请已失常解决,id 是一个随机数字,它用于将申请和响应绑定在一起。
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 这一行都是一些标记位,其中
- qr = query , rd = recursion desired,ra = recursion avaliable 这里其实 DNS 和咱们玩了一个文字游戏,因为 rd 翻译过去就是须要递归,这个没什么好说的,默认就是应用递归查问;而 ra 翻译过去是递归可用,这个须要思考下,递归可用我是用还是不必呢?当然你能够用也能够不必,如果你不应用递归的话,那么 DNS 查问形式就是迭代查问。
- QUERY 示意查问数量,ANSWER 示意后果数量
- AUTHORITY 示意来自权威域名服务器的后果数量,为 0 阐明是从本地 DNS 中返回的,因为没有权威服务器的返回信息。
- ADDITIONAL 示意附加信息,当其值大于 1 时才会看到额定信息。
上面是问题区域
;; QUESTION SECTION:
;www.baidu.com. IN A
顺次是正在查问的域名,IN 咱们下面提到了它示意互联网查问,A 示意域名映射到 IPv4 地址。
上面是答案局部
;; ANSWER SECTION:
www.baidu.com. 183 IN CNAME www.a.shifen.com.
www.a.shifen.com. 57 IN A 220.181.38.150
www.a.shifen.com. 57 IN A 220.181.38.149
两头的数字示意 TTL,即能够缓存记录的工夫距离。
最初是统计局部,这块没什么好说的了。
除此之外,dig 还有一些其余查问形式。
-x 进行反向 DNS 查问
咱们晓得,DNS 能够把域名转换为 IP,同时也能够把 IP 转换成对应的域名,其中 -x 就是进行反向 DNS 查问,如下所示:
<div align = “center”> 图 7-27</div>
能够看到 QUESTION SECTION 和 ANSWER SECTION 中都是 PTR,这示意反向 DNS 查问,前面的域名显示了这是一个 google 的 DNS。反向 DNS 查问中,IP 地址要加上 in-addr.arpa。
同样的,咱们还能够在查问的时候加上 in-addr.arpa,其后果是一样的。
<div align = “center”> 图 7-28</div>
咱们通常喜爱应用 -x,因为这会缩小输出的工作量。
+noall +answer
这通知 dig 只打印 DNS 响应中的 ANSWER 局部内容,如下所示
<div align = “center”> 图 7-29</div>
+short
dig +short 就像是 dig +noall +answer 的阉割版,它只显示很少的内容。
<div align = “center”> 图 7-30</div>
+trace
dig +trace 可能模拟 DNS 解析器在查找域名时的做法,即它会从根服务器开始查问,始终到权威 DNS 服务器。相当于链路追踪的一个作用。
<div align = “center”> 图 7-31</div>
除了咱们下面介绍的 nslookup 和 dig 之外,还有其余 DNS 检测工具,比方 dog、drill,都是很好用的 DNS 网络排查工具,大家能够查阅相干材料进行应用,这里我就不再进行具体的介绍了。
DNS 平安
简直所有的网络申请都会通过 DNS 查问,而且 DNS 和许多其余的 Internet 协定一样,零碎设计时并未思考到安全性,并且存在一些设计限度,这为 DNS 攻打发明了机会。
DNS 攻打次要有上面这几种形式:
- 第一种是 Dos 攻打,这种攻打的次要模式是使重要的 DNS 服务器比方 TLD 服务器或者根域名服务器过载,从而无奈响应权威服务器的申请,使 DNS 查问不起作用。
- 第二种攻打模式是 DNS 坑骗,通过扭转 DNS 资源内容,比方假装一个官网的 DNS 服务器,回复假的资源记录,从而导致主机在尝试与另一台机器连贯时,连贯至谬误的 IP 地址。
- 第三种攻打模式是 DNS 隧道,这种攻打应用其余网络协议通过 DNS 查问和响应建设隧道。攻击者能够应用 SSH、TCP 或者 HTTP 将恶意软件或者被盗信息传递到 DNS 查问中,这种形式使防火墙无奈检测到,从而造成 DNS 攻打。
- 第四种攻打模式是 DNS 劫持,在 DNS 劫持中,攻击者将查问重定向到其余域名服务器。这能够通过恶意软件或未经受权的 DNS 服务器批改来实现。只管后果相似于 DNS 坑骗,但这是齐全不同的攻打,因为它的指标是名称服务器上网站的 DNS 记录,而不是解析程序的缓存。
- 第五章攻打模式是 DDoS 攻打,也叫做分布式拒绝服务带宽洪泛攻打,这种攻打模式相当于是 Dos 攻打的升级版
那么该如何进攻 DNS 攻打呢?
进攻 DNS 威逼的最广为人知的办法之一就是采纳 DNSSEC 协定。
DNSSEC
DNSSEC 又叫做 DNS 平安扩大,DNSSEC 通过对数据进行数字签名来爱护其有效性,从而避免受到攻打。它是由 IETF 提供的一系列 DNS 平安认证的机制。DNSSEC 不会对数据进行加密,它只会验证你所拜访的站点地址是否无效。
DNS 防火墙
有一些攻打是针对服务器进行的,这就须要 DNS 防火墙的退场了,DNS 防火墙是一种能够为 DNS 服务器提供许多平安和性能服务的工具。DNS 防火墙位于用户的 DNS 解析器和他们尝试拜访的网站或服务的权威名称服务器之间。防火墙提供限速拜访,以敞开试图吞没服务器的攻击者。如果服务器的确因为攻打或任何其余起因而导致停机,则 DNS 防火墙能够通过提供来自缓存的 DNS 响应来使操作员的站点或服务失常运行。
除了上述两种进攻伎俩外,自身 DNS 区域的运营商就会采取提高一措施爱护 DNS 服务器,比方配置 DNS 基础架构,来避免 DDoS 攻打。
总结
这篇文章我用较多的字数为你介绍了 DNS 的根本概述,DNS 的工作机制,DNS 的查问形式,DNS 的缓存机制,咱们还通过 WireShark 抓包带你意识了一下 DNS 的报文,最初我为你介绍了 DNS 的攻打伎俩和进攻形式。
这是一篇入门 DNS 较全的文章,花了我一周多的工夫来写这篇文章,这篇文章理解分明后,基本上 DNS 的大部分问题你应该都可能答复,面试我预计也稳了。
原文链接:DNS,给你安顿明确了!
我本人有个公众号:程序员 cxuan,微信搜即可,欢送大家捧场。