DNS Record
1 - 概述
DNS 记录,在RFC规范中称为 Resource Recode/资源记录,缩写为RR。
Resource Recode 定义
RR格式
RR的定义来自 rfc1035 中 3.2 RR definitions。所有的RR都有如下所示的相同的顶层格式:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
各个字段的具体格式和描述如下:
字段 | 格式和描述 |
---|---|
NAME | 所有者名称(owner name),例如,这个资源记录匹配的节点的名称 |
TYPE | 包含 RR TYPE 代码之一的 2 个八位字节(octets) |
CLASS | 包含 RR CLASS 代码之一的 2 个八位字节(octets) |
TTL | 32位有符号整数,指定在再次咨询信息源之前此资源记录可以被缓存的时间间隔。零值被解释为该 RR 仅能用于正在进行的流程,不应当被缓存。例如,总是将零 TTL 分配给 SOA 记录,以便禁止缓存。零值也可以用于极短暂的数据。 |
RDLENGTH | 无符号 16 位整数,指定以八位字节计的 RDATA 字段的长度。 |
RDATA | 可变长度的八位字节字符串,用来描述资源。这个信息的格式取决于资源记录的 TYPE 和 CLASS 。 |
TYPE 值域
TYPE 字段用于资源记录。注意,这些类型是 QTYPE 的子集。
TYPE | 值 | 含义 | 备注 |
---|---|---|---|
A | 1 | a host address/主机地址 | |
NS | 2 | an authoritative name server/权威名称服务器 | |
MD | 3 | a mail destination/邮件目的地 | 被废弃,使用 MX |
MF | 4 | a mail forwarder/邮件转发器 | 被废弃,使用 MX |
CNAME | 5 | the canonical name for an alias/别名的正则名称 | |
SOA | 6 | a marks the start of a zone of authority/标记权威区域的开始 | |
MB | 7 | a mailbox domain name/邮箱域名 | EXPERIMENTAL |
MG | 8 | a mail group member/邮件组成员 | EXPERIMENTAL |
MR | 9 | a mail rename domain name/邮件重新命名域名 | EXPERIMENTAL |
NULL | 10 | a null RR | EXPERIMENTAL |
WKS | 11 | a well known service description/众所周知的服务描述 | |
PTR | 12 | a domain name pointer/域名指针 | |
HINFO | 13 | host information/主机信息 | |
MINFO | 14 | mailbox or mail list information/邮箱或邮件列表信息 | |
MX | 15 | mail exchange/邮件交换 | |
TXT | 16 | text strings/文本字符串 | |
SRV | 33 | service and protocol/服务和协议 | 在rfc2052中引入 |
QTYPE 值域
QTYPE 字段出现在查询的 question 部分。QTYPE 是 TYPE 的超集,因此所有 TYPE 是合 法的 QTYPE。此外,定义有下述 QTYPE:
QTYPE | 值 | 含义 | 备注 |
---|---|---|---|
AXFR | 252 | A request for a transfer of an entire zone/请求传送整个区域 | |
MAILB | 253 | A request for mailbox-related records (MB, MG or MR)/请求相关邮箱记录(MB、MG 或 MR) | |
MAILA | 254 | A request for mail agent RRs/请求邮件代理 RR | 被废弃,参阅 MX |
* | 255 | A request for all records/请求所有记录 |
CLASS 值域
CLASS 字段出现在资源记录中。定义有下述 CLASS 助记符和值:
助记符 | 值 | 含义 | 备注 |
---|---|---|---|
IN | 1 | the Internet/互联网 | |
CS | 2 | the CSNET class/CSNET 类 | 被废弃,仅在某些被废弃的 RFCs 中用于举例 |
CH | 3 | the CHAOS class/CHAOS 类 | |
HS | 4 | Hesiod [Dyer 87] |
备注:
- CHAOS 应该是指 Chaosnet 吧?一套早期的网络通信协议,详细见 https://en.wikipedia.org/wiki/Chaosnet
- Hesiod 应该是指 Hesiod name service,详细见 https://en.wikipedia.org/wiki/Hesiod_(name_service)
QCLASS 值域
QCLASS 字段出现在查询的 question 部分。QCLASS 值是 CLASS 值的超集;每一个 CLASS 都是合法的 QCLASS。除了 CLASS 值以外,定义有下述 QCLASS:
QCLASS | 值 | 含义 | 备注 |
---|---|---|---|
* | 255 | any class/任何类 |
标准 Resource Recode
下述 RR 定义预期会在所有类中出现,至少有可能。尤其是,NS、SOA、CNAME 和 PTR 将在所有类中使用,并且在所有类中有相同格式。因为它们的 RDATA 格式是已知的,在这些 RR 的 RDATA 部分中的所有域名可以压缩。
<domain-name>
是表示为一系列标签的域名,并终止于零长度的标签。<character-string>
是单一长度的八位字节,后面跟有字符的数量。<character-string>
被看作是二进制信息,其长度最多可达 256 个字符(包括长度八位字节)。
各个RR的详细格式见后面章节。
其他
显性URL转发记录: 将域名指向一个http(s)
协议地址,访问域名时,自动跳转至目标地址。例如:将www.a .com
显性转发到www.b.com
后,访问www.a.com
时,地址栏显示的地址为:www.b.com
。
隐性UR转发记录L: 将域名指向一个http(s)
协议地址,访问域名时,自动跳转至目标地址,隐性转发会隐藏真实的目标地址。例如:将www.a .com
显性转发到www.b.com
后,访问www.a.com
时,地址栏显示的地址依然是:www.a.com
。
2 - A记录
A 记录或地址记录(也称为主机记录)可将域名关联到托管相应网域服务的计算机物理 IP 地址。使用 Google Cloud 服务时,您可以添加 A 记录来启用您的“裸”网域地址。
3 - AAAA记录
AAAA记录和A记录类似,两者都是指向IP地址,但对应的IP版本不同。
-
A记录指向IPv4地址
-
AAAA记录指向IPv6地址
AAAA记录是A记录的升级版本。
4 - NS记录
域名服务器 (NS) 记录用于确定哪些服务器为一个网域传达 DNS 信息。您的网域通常会有主要的和辅助的域名服务器记录。
一般来说,为了服务的安全可靠,至少应该有两条NS
记录,而A
记录和MX
记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。
RDATA格式
NS 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ NSDNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
NSDNAME | 指向主机的 <domain-name> ,对于指定的类和域,该主机应该是权威的。 |
查询方式
5 - CNAME记录
CNAME 记录(即规范名称记录)将一个别名关联到另一个真正的或规范的域名。例如,www.example.com 可能会关联到 example.com。
A记录与CNAME记录的关系
A记录是把域名解析到IP地址,而CNAME记录是把域名解析到另外一个域名,而这个域名最终会指向A记录,在功能实现在上A记录与CNAME记录没有区别。
CNAME记录在做IP地址变更时要A记录方便。CNAME记录允许将多个名字映射到同一台计算机,当有多个域名需要指向同一服务器IP,此时可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即:CNAME)到A记录的域名上。当服务器IP地址变更时,只需要更改A记录的那个域名到新IP上,其它做别名的域名会自动更改到新的IP地址上,而不必对每个域名做更改。
RDATA格式
CNAME 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ CNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
CNAME | 是一个<domain-name> ,它规定所有者的正则或主要名称。该所有者名称是别名。 |
6 - TXT记录
TXT 记录是为您所在网域之外的来源提供文本信息的一种 DNS 记录,可用于多种用途。该记录的值可以是人工可读文本,也可以是机器可读文本。
可任意填写,可为空。
使用场景:
- 一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录
- 使用 Google Cloud 服务时,TXT 记录可用于验证域名所有权和实施电子邮件安全措施,如 SPF、DKIM 和 DMARC。
RDATA格式
TXT 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ TXT-DATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
TXT-DATA | 一个或多个<character-string> |
7 - MX记录
邮件交换 (MX) 记录将一个网域的电子邮件定向到托管该网域用户帐号的服务器。如果您是 G Suite 用户,要设置 Gmail,则需要将 MX 记录定向到 Google 邮件服务器。一个网域可定义多条 MX 记录,每条记录有不同的优先级。如果邮件通过最高优先级记录无法递送,则采用第二优先级,以此类推。
RDATA格式
MX 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| PREFERENCE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ EXCHANGE /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
PREFERENCE | 16 位整数,它规定在同一所有者内,众多 RR 间,给与这个 RR 的优先权。值越低优先权越高。 |
EXCHANGE | 一个<domain-name> ,它指定愿意为所有者名称充当邮件交换的主机。 |
8 - PTR记录
PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名
RDATA格式
PTR 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ PTRDNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
PTRDNAME | 指向域名名字空间中某个位置的 <domain-name> |
9 - SOA记录
SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器。
SOA 记录表示此域名的权威解析服务器地址。 当要查询的域名在所有递归解析服务器中没要域名解析的缓存时,就会回源来请求此域名的SOA记录,也叫权威解析记录。
RDATA格式
SOA 记录的 RDATA 格式如下:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ MNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/ RNAME /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| SERIAL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| REFRESH |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RETRY |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| EXPIRE |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| MINIMUM |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
格式说明:
值 | 含义 |
---|---|
MNAME | 名称服务器的 <domain-name> ,该名称服务器是这个区域的数据起源或主要源。 |
RNAME | 一个<domain-name> ,它规定负责这个区域的个人的邮箱。 |
SERIAL | 该区域的原始副本的无符号 32 位版本号。区域传递保存这个值。这个值叠起(wrap),并且应当使用系列空间算法比较这个值。 |
REFRESH | 区域应当被刷新前的 32 位时间间隔 |
RETRY | 在重试失败的刷新前,应当等待的 32 位时间间隔 |
EXPIRE | 32 位时间值,它规定在区域不再是权威的之前可以等待的时间间隔的上限 |
MINIMUM | 无符号 32 位最小值 TTL 字段,应当用来自这个区域的任何 RR 输出它。 |
参考资料
10 - SRV记录
SRV记录是服务器资源记录的缩写,记录服务器提供的服务,SRV记录的作用是说明一个服务器能够提供什么样的服务。
SRV记录是DNS记录中的新鲜面孔,在RFC2052中才对SRV记录进行了定义,因此很多老版本的DNS服务器并不支持SRV记录。
RFC2782
概述和理由
目前,必须知道服务器的确切地址才能联系它或者广播问题。
SRV RR允许管理员为单个域名使用多个服务器,轻松地将服务从一个主机移动到另一个主机,并将某些主机指定为服务的主服务器,将其他主机指定为备份。
客户端要求特定域名的特定服务/协议(这里使用的词汇"域名"是RFC 1034上严格定义的),并获取任何可用服务器的名称。
请注意,在本文档引用“地址记录”时,它表示A RR,AAAA RR或其最现代的等价物。
RFC定义的格式
RFC2782中定义的格式是:
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
各字段详细说明:
字段 | 说明 |
---|---|
Service | 所需服务的符号名称 在Assigned Numbers或本地定义。 服务标识符前面加上下划线 _ ,以避免与自然界中出现的DNS标签发生冲突。 |
Proto | 所需协议的符号名称 前面加下划线 _ ,以防止与自然界中出现的DNS标签发生冲突。 _TCP 和_UDP 目前是该字段最常用的值,但可以使用由Assigned Numbers或本地定义的任何名称。 Proto不区分大小写。 |
Name | 此RR所指的域名。在这个域名下SRV RR是唯一的。(英文原文好像有些语法问题) |
TTL | |
Class | |
Priority | |
Weight | |
Port | 服务在目标主机上的端口。所需协议的符号名称,前面加下划线(_),以防止与自然界中出现的DNS标签发生冲突。 _TCP和_UDP目前是该字段最有用的值,但可以使用由Assigned Numbers定义的任何名称或本地的(如Service)。 Proto不区分大小写。 范围是0-65535。 这是网络字节顺序中的16位无符号整数。 通常在Assigned Numbers中指定,但不一定如此。 |
Target | 目标主机的域名。 域名必须有一个或多个地址记录,域名绝不能是别名。敦促(但不强求)实现在附加数据部分中返回地址记录。除非并且直到将来的标准操作允许,否则名称压缩不能用于此字段。 值为“.” 表示该域名明确无法提供该服务。 |
###SRV记录和微软的关系
SRV记录在微软的Active Directory中有着重要地位,大家知道在NT4时代域和DNS并没有太多关系。但从Win2000开始,域就离不开DNS的帮助了,为什么呢?因为域内的计算机要依赖DNS的SRV记录来定位域控制器!微软的即时通讯服务器Live Communications Server也可以依靠SRV记录定位即时通讯服务器。
SRV 记录一般是为Microsoft的活动目录设置。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。为了活动目录能够正常的工作,DNS服务器必须支持服务定位(SRV)资源记录,资源记录把服务名字映射为提供服务的服务器名字。活动目录客户和域控制器使用SRV资源记录决定域控制器的IP地址。
鉴于SRV记录可以定位特定服务器的位置,我们可以预计,在微软将来的服务器产品中SRV记录将发挥越来越多的作用。