Aldebaran

人生最棒的感觉,就是你做到别人说你做不到的事。

0%

DNS基础知识

三田寺円

DNS的基本概念

  1. DNS是什么?

    DNS(Domain Name System)是Internet发展多年以来最重要的服务之一,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

    DNS使用TCP和UDP端口53

  2. 域名解析

    简单来说,DNS就像是一个通讯录,AnyISalIn的电话是1829888****,有了通讯录,我们只需通过输入AnyISalIn这个名字就能够自动拨打其电话。DNS主要是用来定义IP地址和域名的关系。

  3. DNS资源记录类型

    • A 记录(主机记录)

      (1)什么情况下会使用到A记录?

      如果需要将域名指向一个IP地址,就需要添加A记录。

      (2)A记录的添加方式

      • 记录类型为A。
      • 主机记录处填子域名(比如需要添加www.abc.com的解析,只需要在主机记录处填写www即可;如果只是想添加 abc.com的解析,主机记录直接留空,系统会自动填一个“@”到输入框内)。
      • 线路类型(默认为必填项,否则会导致部分用户无法解析)。
      • 记录值为IP地址,只可以填写IPv4地址。
      • TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
    • CNAME 记录(别名记录)

      (1)什么情况下会用到CNAME记录?

      如果需要将域名指向另一个域名,再由另一个域名提供IP地址,就需要添加CNAME记录。

      (2) CNAME记录的添加方式

    • NS 记录

      (1)什么情况下会用到NS记录?

      如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。

      (2)NS记录的添加方式

      • 记录类型为NS。
      • 主机记录处填子域名(比如需要将opo.abc.com的解析授权给其他DNS服务器,只需要在主机记录处填写opo即可,NS记录的主机记录(RR值)不能为空,主机记录@不能作为NS记录使用,且NS记录不支持泛解析【将所有子域名解析到同一地址】,授权出去的子域名不会影响其他子域名的正常解析)。
      • 线路类型(默认为必填项,否则会导致部分用户无法解析)。
      • NS记录值,NS向下授权,请填写DNS域名记录值为要授权的DNS服务器域名,为了保证服务可靠性,建议您添加至少2组DNS服务(例如:ns1.alidns.com, ns2.alidns.com)。
      • TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
    • MX 记录

      (1)什么情况下会用到MX记录?

      如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。

      (2)MX记录的添加方式

      • 记录类型为MX。
      • 主机记录处填子域名(一般情况下是要做[email protected]的邮箱,所以主机记录一般是留空的;如果主机记录填mail,邮箱地址会变为[email protected])。
      • 线路类型(默认为必填项,否则会导致部分用户无法解析,邮件无法收取;MX一般不需要做智能解析,直接默认即可)。
      • 记录值请填写邮件服务商提供给您的域名。
      • 如果您使用的是自己搭建的邮件服务器,则您必须需要有个邮件服务器域名,且该域名必须有A记录。
      • MX优先级的数值越低,优先级别就越高。
      • MX 优先级在只存在一条 MX 记录的时候没有意义。当您的域名解析记录中存在多条 MX 记录的时候,邮件发送方的服务器会优先把邮件投递到 MX 优先级数值最小的服务器。当此服务器出现故障无法接收邮件的时候,发送方的服务器会自动选择下一个优先级数值最小的服务器,直到邮件投递成功,或者所有服务器都无法投递产生无法投递的错误。
      • TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
    • AAAA 记录(IPv6主机记录)

      (1)什么情况下会用到AAAA记录?

      当您希望访问者通过IPv6地址访问您的域名时,可以使用AAAA记录。

      (2)AAAA记录的添加方式

    • SRV 记录(服务位置记录)

      (1)什么情况下会用到SRV记录?

      SRV记录用来标识某台服务器使用了某个服务,记录了哪台计算机提供了哪个服务。

      (2)SRV记录的添加方式

      • 记录类型为SRV。
      • 主机记录处格式为服务的名字.协议的类型(例如:_example-server._tcp)。
      • 线路类型(默认为必填项,否则会导致部分用户无法解析)。
      • SRV记录值格式为:优先级、空格、权重、空格、端口号、空格、目标地址,例如:3 0 2176 example-server.2.google.com。
      • TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)
    • TXT 记录

      (1)什么情况下会用到TXT记录?

      如果希望对域名进行标识和说明,可以使用TXT记录,绝大多数的TXT记录是应用于SPF记录(反垃圾邮件)。

      (2)TXT记录的添加方式

  4. DNS解析答案类型

    肯定答案:正确解析了请求的内容

    否定答案:请求的条目不存在等原因无法返回结果

    权威答案:通过迭代的方式从所查询域名的所在域的DNS服务器返回的结果

    非权威答案:请求的DNS服务器缓存的结果

  5. 域名, 根域、顶级域、二级域、子域

    域名 如在浏览器地址栏输入的www.baidu.com,www.hao123.com等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而IP为“一切”提供了寻址功能。域名和IP的关系可类比每个人的姓名与住址。

    根域顶级域二级域子域 域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格式为www.baidu.com. 最末尾的点代表根域,常常省略;com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是com的子域,www.baidu.com是baidu.com的子域。

  6. 其他

    正向解析 查找域名对应IP的过程。

    反向解析 查找IP对应域名的过程。

    解析器 即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。

DNS结构

DNS的结构

上图为当今Internet中的DNS的结构,最多可分达127层,朋友们别看上图中的www.anyisalin.com.和ns.anyisalin.com.相距很近,其实他们可能各自在天南地北。DNS的各层只是逻辑上的关系,不存在物理上的界定

在DNS各域中只包含其子域的信息,例如 “.”域中的解析库只包含全球所有顶级域对对应的NS服务器的信息、 并且不知道父域的位置,例如:www.anyisalin.com. 不知道anyisalin.com.的具体位置(NS服务器的IP)

域名解析

DNS(Domain Name System)是一个全球化的分布式数据库,用于存储域名与互联网 IP 地址的映射关系。DNS 分为两大类:权威 DNS,递归 DNS。

  • 权威 DNS

    权威 DNS 是特定域名记录(例如“example.com”)在域名注册商处所设置的 DNS 服务器,用于特定域名本身的管理(增加、删除、修改等)。

    权威DNS 国内典型的代表是dnspod, 主要提供域名托管以及智能解析服务。智能解析主要解决这样一个问题:假设一个域名同时绑定了联通和电信的IP,当一个电信用户去访问时有可能会解析到一个联通的IP,从而产生跨网问题。使用智能解析后,系统将根据用户来源去智能的返回结果。

    权威 DNS 服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝访问。比如,向“example.com”的权威 DNS 服务器查询“test.com”的域名肯定会查询失败。(权威DNS即通俗上“这个域名我说了算”的服务器。)

    • CDN DNS 本质上讲也是一种权威DNS,主要在CDN的业务场景中提供流量调度功能。用户将域名CNAME或者直接NS托管到CDN DNS,CDN DNS进一步做智能调度返回一个离用户最近的接入节点。用户访问接入节点,享受CDN提供的缓存、加速、以及防攻击服务。
  • 递归 DNS

    递归 DNS(也称本地 DNS 或者缓存 DNS)用于域名查询。递归 DNS 会迭代权威服务器返回的应答,直至最终查询到的 IP 地址,将其返回给客户端,并将请求结果缓存到本地。

    对用户发出的域名解析请求,递归 DNS 必须给出一个最终的 IP 地址结果。完整的递归DNS 查询流程需要 DNS 服务器从根域名 “.” 服务器,顶级域名服务器(例如“.com”),一级域名服务器(例如“example.com”)等一级一级递归查询,直到最终找到权威服务器取得结果,并返回给客户。同时,递归服务器根据域名 TTL,缓存查询结果,便于相同域名重复查询。递归 DNS 的访问过程如下图所示(递归 DNS 在图中表示为 Local DNS):

    DNS的结构

    递归 DNS 服务器大多数在运营商端,负责网络接入终端的 DNS 查询,即网络访问设备上配置的 DNS 服务器 IP。

    • 转发DNS 转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。

    • 公共DNS 公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。公共DNS一般以一个或两个非常容易记住的IP方式(如百度公共DNS服务IP:180.76.76.76)给所有用户提供统一服务。公共DNS相对于运营商DNS的优势主要在无劫持、更快、更稳定、更安全等。

      综上,

    • 权威 DNS 由域名解析服务商建设,提供域名管理服务,维护域名解析记录。

    • 递归 DNS 由网络运营商建设,提供域名查询解析服务。

阿里云解析记录冲突判断规则

在 RR值相同的情况下,同一条线路下,在几种不同类型的解析中不能共存(X为不允许):

NSCNAMEAMXTXTAAAASRV
NS可重复XXXXXX
CNAMEXXXXXXX
AXX可重复无限制无限制无限制无限制
MXXX无限制可重复无限制无限制无限制
TXTXX无限制无限制可重复无限制无限制
AAAAXX无限制无限制无限制可重复无限制
SRVXX无限制无限制无限制无限制可重复

DNS 负载均衡

在大型的网络应用中,多台服务器经常被用做提供同一个服务,从而减轻单台服务器所承受的访问压力。这样分散每台服务器上的压力,将访问流量分配到多台服务器的方法就是负载均衡。

原理

使用云解析来实现服务器流量的负载均衡,其原理是给网站访问者分配不同的 IP 地址。

例如:有 3 台服务器,对应 3 个 IP 地址,分别是 1.1.1.1、2.2.2.2、3.3.3.3,设置的 3 个 A 记录如下:

记录类型主机线路权重
1Awwwdefault1.1.1.1600
2Awwwdefault2.2.2.2600
3Awwwdefault3.3.3.3600

当 Local DNS 访问权威 DNS,权威 DNS 会将这 3 个解析记录全部返回给 Local DNS, Local DNS 会将所有的 IP 地址返回给网站访问者,网站访问者的浏览器会随机访问其中一个 IP。

这种方法用在无 DNS 负载均衡的权威 DNS 中,能够在一定程度上减轻单台服务器的压力,但它不能区分服务器的差异,不能反映服务器的当前运行状态。

  • 轮循负载算法

    DNS 负载均衡采用简单的轮循负载算法。

    在有 DNS 负载均衡的权威 DNS 中,网站访问者的请求到来时,权威 DNS 会根据解析记录的权重轮询 3 个 A 记录(默认权重 1:1:1),依次返回 3 个 IP 地址。

    User1 访问,返回 1.1.1.1
    User2 访问,返回 2.2.2.2
    User3 访问,返回 3.3.3.3
    User4 访问,返回 1.1.1.1
    ……
  • 带权重的轮询负载算法

    对于权重不同的 DNS 负载均衡,如 2:1:1,则返回如下:

    User1 访问,返回1.1.1.1
    User2 访问,返回 2.2.2.2
    User3 访问,返回 3.3.3.3
    User4 访问,返回1.1.1.1
    User5 访问,返回1.1.1.1
    User6 访问,返回 2.2.2.2
    ……

应用

如果你有多台服务器,需要将流量分摊到各个服务器,那就可以利用 DNS 来做负载均衡。云解析支持用户手动开启或者关闭 DNS 负载均衡,并且针对不同的解析记录设置不同的权重值,负载均衡的默认权重值都是 1。

规则说明

DNS 负载均衡仅适用于相同主机记录值、相同线路下的多个 A 记录。具体使用规则如下:

  • 支持 A 记录带权重的轮询,不支持其它记录。
  • 不支持被暂停或者锁定的 A 记录,以及泛解析的 A 记录。
  • 设置权重适用于在同一线路中,有多个具有相同主机记录的 A 记录。
  • 在不同的线路中,其权重相互独立;在智能解析的前提下,可对默认线路配置带权重的 A 记录,也可以对具体的线路配置。
  • 负载均衡的开关,不区分解析线路。
  • 默认权重值比为 1:1:1…

域名查询过程

以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程:

  1. 用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);

  2. local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;

  3. 根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;

  4. local dns查询com。com返回baidu.com地址;

  5. local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。

    dns-query

域名查询方式

理论上讲域名查询有两种方式:

迭代查询

A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…

递归查询

A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A

上述过程中从resolver到递归DNS再到根的查询过程为递归查询,递归DNS到根、到com、到baidu.com的过程为迭代查询。

注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。

参考文档

http://www.ruanyifeng.com/blog/2016/06/dns.html

https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

https://dudns.baidu.com/support/knowledge/Theory/

https://dudns.baidu.com/support/knowledge/Security/

https://dudns.baidu.com/support/knowledge/Infrastructure/