December 24, 2017 · DNS 本文字数: 2.6k 阅读时长:9 min 全站字数:361.8k

DNS中域名空间的管理

  1. 名词解释
  2. DNS域名空间
    1. DNS域名空间管理
  3. 区数据的管理和运维
    1. 创建一个子区
    2. 构建区数据
    3. 启动区的域名服务器
    4. 区数据传输
  4. 参考资料

前一篇文章中介绍了DNS系统的历史以及DNS系统的组成,这篇文章主要介绍DNS中域名数据的管理。

名词解释

  1. 域名(domain name),是由一个或者多个标签(label)以点连接组成,最后一个标签是空标签代表根。如对于域名www.zhangmin.name,有三个标签,分别是wwwzhangminname。还有一个空标签一般省略不写,代表根。大多数软件使用的域名的完全合规的形式(FQDN,Fully Qualified Domain Name)即www.zhangmin.name.,通过这个域名的QFDN可以精确的描述这个域名在整个域名空间树中的位置。
  2. 区(zone),区定义了连续的域名空间,通常是域名的管理边界。
  3. 资源记录(RR,Resource Record),与域名关联的信息或者数据。资源记录分为不同的类型,在互联网上常见的资源记录类型有A(IPv4地址),CNAME(别名)等。
  4. 域名服务器(nameserver),对外提供DNS查询服务的软件或者进程,并存储DNS的区数据。

DNS域名空间

DNS域名空间是一个树结构,类似linux中的目录结构(如图1所示)。每一个节点和叶子节点对应资源记录集合,可能为空。域名系统没有区分内部节点和叶子节点的使用,所以统一使用节点来描述。

每个节点都有一个标签(label),长度是0-63个字节。兄弟节点不能有相同的标签。但是相同的标签可以用于非兄弟节点。有一个标签是保留的,及空标签(长度为0),用于表示根。

一个节点的域名的就是由从根到当前节点的标签的组成,通过点来分隔。通常,组成域名的标签是按照从左到右的方式来显示。 从最具体的(最低,离根最远的)节点到最不具体的(最高,离根近的)节点。

DNS命名空间

​ 图 1 DNS命名空间树

在程序实现时,操作域名的程序应该把域名当做标签序列来处理,每个标签由一个字节表示长度,剩余63字节是标签内容。由于所有的域名都是以空标签(根)结尾,程序内部可以使用一个0字节来作为域名结尾。为了简化实现,一个域名最大的大小为255,即所有的标签和标签长度加起来的大小。

当用户需要输入一个域名,每个标签的长度可以忽略,每个标签以点分隔。由于完整的域名以根标签结束, 所以域名显示为以点结尾。以此来区分:

  1. 以点结尾的完整的域名,类似于目录系统中的绝对路径。
  2. 不以点结尾的位非完整域名,类似于目录系统中的相对路径。

相对路径以一个域名或者多个域名后缀作为搜索列表。相对域名主要出现在用户接口,由具体的实现决定如何解析。 在master文件中,是以单个域名作为起点的。最常见的是使用.根作为一个起点或者一个搜索列表的成员。一般域名输入都不需要带点.,为了方便键入。

在域名空间数的每个节点都可以存储不同类型的资源记录,如对于节点hz.netease.com存储的资源记录有A(IPv4地址)和MX(邮箱服务器记录)。

1
2
hz.netease.com.         17893   IN      A       115.236.113.65
hz.netease.com. 15188 IN MX 10 smtp.hz.netease.com.

DNS域名空间管理

DNS的是数据库里存储的内容就是域名及其关联的资源记录。域名服务器是构成整个域名数据库的信息仓库。整个DNS的数据库按照DNS域名空间树被分成不同的部分,叫做区(zone)。 这些区都分布在不同的域名服务器上。域名服务器可以提供额外的功能和数据,但其最重要的工作就是使用本地的区数据来回答查询请求。

DNS区管理

​ 图 2 DNS区数据及其授权关系

在设计上,域名服务器以一种简单的方式响应查询请求:用本地的区数据来生成响应。 响应既可以是查询的目标数据,也可以指向临近的域名服务器有需要的数据。

为了高可用,一个区会在多个域名服务器上,一般要求至少两个域名服务器。

一个域名服务器可以支持一个或者多个区数据查询,但是也只是整个域名空间中一小部分的权威信息。 可能也会缓存其他非权威的区数据。这类响应是非权威的,请求方可以区分这两类响应。

把每个节点分为一个区并不常见也不实用,但是技术上可行。一般是一个组织想接管一个域名空间子树,一旦这个组织控制这个子树,就可以改变这个区的数据。如果组织还有分部,可能会进一步在内部将区会分成子区,实现嵌套的域名空间的控制权转移。 这样也使得DNS数据库的管理更方便。

区数据的管理和运维

创建一个子区

当一个组织想控制自己的域名,需要三步:

  1. 第一步就是要指定自己的父区,允许父区的所有者同意控制权的转移。在技术上没有限制这个发生在域名空间树的那个部分。
  2. 第二步是给新的子区命名,并提供冗余的域名服务器地址信息。
  3. 第三步就是在父区增加授权子区的NS记录,使得授权生效。

构建区数据

描述一个区的数据有四个部分:

  • 在这个区内所有节点的权威数据。
  • 定义这个区的顶点(最靠近根的节点)的数据,也是权威数据的一部分。
  • 描述授权的子区的信息,一个区可以继续分隔为不同的子区。
  • 访问授权子区的域名服务器的数据,通常叫做胶水数据,数据内容是管理子区数据的域名服务器地址。

所有这些数据都可以表示为资源记录,只是资源记录的类型不同。一个区也可以完全表示为一组的资源记录集合。整个区的信息可以在不同的域名服务器之间转移,也可以通过master文件来实现转移,如简单的拷贝或者同步。

逻辑上的权威数据是描述每个区顶点的类型为NS和SOA的资源记录。NS有多条,每条一个记录,表示权威数据域名服务器地址信息;SOA只有一条,描述区管理参数。

netease.com的SOA和NS记录为:

1
2
3
4
5
6
7
8
9
netease.com.            284     IN      SOA     ns4.nease.net. admin.nease.net. 20171030 7200 1800 1209600 60

netease.com. 172800 IN NS ns5.nease.net.
netease.com. 172800 IN NS ns8.166.com.
netease.com. 172800 IN NS ns3.nease.net.
netease.com. 172800 IN NS ns4.nease.net.
netease.com. 172800 IN NS ns6.nease.net.
netease.com. 172800 IN NS ns2.166.com.
netease.com. 172800 IN NS ns1.nease.net.

启动区的域名服务器

域名服务器启动时需要两类文件:

  1. 根服务器列表文件。
  2. 区的权威数据文件。

域名服务器会读取根服务器文件,连接根服务器,获取最新的根服务器列表,并更新。然后加载区的权威数据后,就可以正常响应DNS查询了。

区数据传输

在上文中提到,为了高可用,每个区的域名服务器都至少有两个。在实践中,一般包括一个主域名服务器和一个或者多个从域名服务器。区管理者的一个任务就是维护主域名服务器上存储的权威区数据。如果有更新,就需要分发到所有从域名服务器。更新的区数据可以通过ftp或者文件拷贝的方式同步,但优选的方法是DNS协议中的区传输(Zone Transfer)。

区传输或者区数据刷新的通用模型是:所有的区数据更新都在主域名服务器上进行,一般是修改master文件。修改完成后,重新加载master文件;其他从域名服务器会定期检查主域名服务器的变化,并同步变化的数据。

从域名服务器通过这个区的SOA记录中的SERIAL来判断区数据是否改变。如何区数据有更新,这个区的SOA记录的SERIAL值就会增加。从域名服务器定期向主域名服务器拉取区数据。拉取时间也是在SOA记录里设置,相关参数有REFRESHRETRYEXPIRE。 当一个新的从域名服务器启动后,它会等待REFRESH秒,然后检查主域名服务器的SERIAL。 如果检查失败,会等待RETRY秒后继续。如果自己的SERIAL和主域名服务器的相同,没有变化,等待REFRESH秒后重新进行检查。如果不能在EXPIRE秒内完成检查,则认为当前的区数据已过期,需要废弃。如果定期检查发现区数据变化,则从域名服务器发起目标区数据的传输。

区数据传输有两种协议,一种是Authoritative Transfer(AXFR),全量区数据传输;一种是 Incremental transfer(IXFR),增量数据传输。

为了进一步减少区数据修改的生效时间,主域名服务器可以在数据更新后,主动通知从域名服务器区数据已经更新,即DNS Notify,从域名服务器立即进行区数据传输,而不需要等待REFRESH

参考资料

  1. RFC 1034 DOMAIN NAMES - CONCEPTS AND FACILITIES
  2. RFC 1035 DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
  3. DNS and BIND, 5th Edition:Help for System Administrators,By Paul Albitz, Cricket Liu
  4. Domain Name https://en.wikipedia.org/wiki/Domain_name
  5. RFC 1995 - Incremental Zone Transfer in DNS
  6. RFC 1996 - A Mechanism for Prompt Notification of Zone Changes (DNS NOTIFY)
  7. RFC 5936 - DNS Zone Transfer Protocol (AXFR)