DNS 记录

Posted August 18, 2022 by monitor1379

Zone file

DNS是一个分布式、层次化的数据库,DNS 系统将域名、ip 等资源以特定的语法记录在文本文件中,这种文件叫做区域文件 (Zone file),其中所记录的内容叫做资源记录 (Resource record, RR)。一个 zone file 通常只对应一个域名。

RR 所包含的字段:

  • NAME: 该 RR 所关联的域名。
  • CLASS: RR 网络(命名空间)类型,一般为 IN (Internet)。
  • TYPE: RR 记录类型。常见 RR 类型有 A / AAAA / CNAME / MX / MAIL 等。
  • TTL: Time-To-Live,建议缓存的最大时间,单位为秒。
  • RDATA: RR 存储数据,根据 RR 类型的不同,存储的数据内容和格式也不一样。

一个 zone file 内容示例如下 (注:一行为一个语句,非$开头的语句为 RR 定义,; 符号后的为注释):

$ORIGIN example.com.     ; designates the start of this zone file in the namespace
$TTL 3600                ; default expiration time (in seconds) of all RRs without their own TTL value
example.com.  IN  SOA   ns.example.com. username.example.com. ( 2020091025 7200 3600 1209600 3600 )
example.com.  IN  NS    ns                    ; ns.example.com is a nameserver for example.com
example.com.  IN  NS    ns.somewhere.example. ; ns.somewhere.example is a backup nameserver for example.com
example.com.  IN  MX    10 mail.example.com.  ; mail.example.com is the mailserver for example.com
@             IN  MX    20 mail2.example.com. ; equivalent to above line, "@" represents zone origin
@             IN  MX    50 mail3              ; equivalent to above line, but using a relative host name
example.com.  IN  A     192.0.2.1             ; IPv4 address for example.com
              IN  AAAA  2001:db8:10::1        ; IPv6 address for example.com
ns            IN  A     192.0.2.2             ; IPv4 address for ns.example.com
              IN  AAAA  2001:db8:10::2        ; IPv6 address for ns.example.com
www           IN  CNAME example.com.          ; www.example.com is an alias for example.com
wwwtest       IN  CNAME www                   ; wwwtest.example.com is another alias for www.example.com
mail          IN  A     192.0.2.3             ; IPv4 address for mail.example.com
mail2         IN  A     192.0.2.4             ; IPv4 address for mail2.example.com
mail3         IN  A     192.0.2.5             ; IPv4 address for mail3.example.com

可以在 zonefile.org 网站上自定义 zone file 并查看输出内容。

常见的 resource record type 有:

  • A: 保存域的 IP 地址的记录
  • AAAA: 包含域的 IPv6 地址的记录(与 A 记录相反,A 记录列出的是 IPv4 地址)
  • CNAME: 将一个域或子域转发到另一个域,不提供 IP 地址
  • MX: 将邮件定向到电子邮件服务器
  • TXT: 可让管理员在记录中存储文本注释,这些记录通常用于电子邮件安全
  • NS: 存储 DNS 条目的名称服务器
  • SOA: 存储域的管理信息
  • PTR: 在反向查询中提供域名

Resource Records

A 记录

A 代表"地址",这是最基础的 DNS 记录类型,表示给定域的 IP 地址。A 记录只保存 IPv4 地址。IPv6 地址使用"AAAA"记录类型。

比如,拉取 google.com 的 DNS 记录,A 记录当前返回的 IP 地址为:172.217.163.46。

zone file 中的 A 记录示例:

example.com.  IN  A     192.0.2.1             ; IPv4 address for example.com

该示例中的"@“符号表示这是根域的记录,“14400"值是 TTL(生存时间),以秒为单位。A 记录的默认 TTL 是 14400 秒。这意味着,如果更新 A 记录,需要 240 分钟(14400 秒)后才会生效。

可以通过给域名配置多个 A 记录,实现 DNS 循环负载均衡,将请求流量分配到多个 IP 地址中的一个。

可使用如下命令查看 google.com 的 A 记录:

dig A google.com

输出:

google.com.		473	IN	A	172.217.163.46

AAAA 记录

DNS AAAA 记录将域名与 IPv6 地址进行匹配。DNS AAAA 记录与 DNS A 记录完全一样,只是它们存储域的 IPv6 地址,而非 IPv4 地址。

zone file 中的 AAAA 记录示例:

example.com.  IN  AAAA  2001:db8:10::1        ; IPv6 address for example.com

CNAME 记录

当域或子域是另一个域的别名时,使用 CNAME 记录代替 A 记录。所有 CNAME 记录必须指向一个域,而不是一个 IP 地址。CNAME 记录可以指向另一个 CNAME 记录。

zone file 中的 CNAME 记录示例:

www           IN  CNAME example.com.          ; www.example.com is an alias for example.com

查看 gmail.google.com 的 CNAME 记录:

dig CNAME gmail.google.com

输出:

gmail.google.com.	38319	IN	CNAME	www3.l.google.com.

MX 记录

MX (Mail eXchange)记录将电子邮件定向到邮件服务器。MX 记录指示如何根据简单邮件传输协议(SMTP,所有电子邮件的标准协议)路由电子邮件。与 CNAME 记录类似,MX 记录必须始终指向另一个域。

TXT 记录

TXT 记录可让管理员在记录中存储文本注释。这些记录通常用于电子邮件安全。

查看 google.com 的 TXT 记录:

dig TXT google.com

输出:

google.com.		3600	IN	TXT	"google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o"
google.com.		3600	IN	TXT	"docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com.		3600	IN	TXT	"MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB"
google.com.		3600	IN	TXT	"facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com.		3600	IN	TXT	"docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
google.com.		3600	IN	TXT	"webexdomainverification.8YX6G=6e6922db-e3e6-4a36-904e-a805c28087fa"
google.com.		3600	IN	TXT	"atlassian-domain-verification=5YjTmWmjI92ewqkx2oXmBaD60Td9zWon9r6eakvHX6B77zzkFQto8PQ9QsKnbf4I"
google.com.		3600	IN	TXT	"apple-domain-verification=30afIBcvSuDV2PLX"
google.com.		3600	IN	TXT	"globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
google.com.		3600	IN	TXT	"v=spf1 include:_spf.google.com ~all"
google.com.		3600	IN	TXT	"google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ"

上述的 TXT 数据段内容的格式,是在 1993 年互联网工程任务组 (IETF) 定义的一种格式,就是将属性和值包含在引号 " 中,并以等号 = 隔开,例如:attribute=value

NS 记录

NS (Name Server) 记录,用来记录域名可以由哪些权威域名服务器解析。

查看根域名 . 的 NS 记录:

dig NS .

输出:

.			416239	IN	NS	j.root-servers.net.
.			416239	IN	NS	l.root-servers.net.
.			416239	IN	NS	c.root-servers.net.
.			416239	IN	NS	f.root-servers.net.
.			416239	IN	NS	e.root-servers.net.
.			416239	IN	NS	d.root-servers.net.
.			416239	IN	NS	k.root-servers.net.
.			416239	IN	NS	b.root-servers.net.
.			416239	IN	NS	h.root-servers.net.
.			416239	IN	NS	i.root-servers.net.
.			416239	IN	NS	g.root-servers.net.
.			416239	IN	NS	a.root-servers.net.
.			416239	IN	NS	m.root-servers.net.

可以看到一共有13个域名服务器 ([a-m].root-servers.net) 负责解析根域名,这13个域名服务器就是根域名服务器

PTR 记录

PTR (Pointer) 记录,即指针记录,与 A 记录相反,可通过 IP 查询 IP 对应的域名是什么。

在 IPv4 中:DNS A 记录存储在给定的域名下,而 DNS PTR 记录存储在 IP 地址下——进行了反转,且添加了“.in-addr.arpa”。例如,IP 地址 192.0.2.255 的 PTR 记录将存储在“255.2.0.192.in-addr.arpa”下。

必须添加“in-addr.arpa”,因为 PTR 记录存储在 DNS 的 .arpa 顶级域中。.arpa 是一个主要用于管理网络基础设施的域,是为互联网定义的第一个顶级域名。(“arpa”这个名字可以追溯到互联网的早期:它的名字来源于高级研究计划署 (ARPA),它创建了互联网的重要前身 ARPANET。) in-addr.arpa 是 .arpa 中的命名空间,用于在 IPv4 中进行反向 DNS 查找。

在 IPv6 中:IPv6 地址的构造不同于 IPv4 地址,并且 IPv6 PTR 记录存在于 .arpa 内的不同命名空间中。 IPv6 PTR 记录存储在 IPv6 地址下,反转并转换为 4 位部分(与 IPv4 中的 8 位部分相反),加上“.ip6.arpa”。

SOA 记录

SOA (Start of Authority) 记录,存储域 (domain) 或 区域 (zone) 的重要信息,比如管理员的电子邮件地址、域的上次更新时间,以及服务器在刷新之间应等待的时间。

所有 DNS 区域都需要一个 SOA 记录,以符合 IETF 标准。SOA 记录对区域传输 (即 DNS 服务器之间的主从复制与数据同步) 也很重要。

主要包含以下字段:

  • NAME: 区域的名称
  • TYPE: SOA
  • CLASS: Zone class,IN 表示 Internet
  • TTL: Time-to-live
  • MNAME: 该区域的主要名称服务器 (primary master name server) 的名称
  • RNAME: Email address of the administrator responsible for this zone. (As usual, the email address is encoded as a name. The part of the email address before the @ becomes the first label of the name; the domain name after the @ becomes the rest of the name. In zone-file format, dots in labels are escaped with backslashes; thus the email address john.doe@example.com would be represented in a zone file as john.doe.example.com.)
  • SERIAL: 区域序列号,是 SOA 记录的版本号。如果该区域的辅助名称服务器 (secondary name server) 观察到该数值的变更,则辅助名称服务器会认为该区域的内容已发生变更,需要执行一次区域传输 (zone transfer)。
  • REFRESH: 刷新时间,单位为秒。辅助服务器应该根据该刷新时间重新拉取 SOA 记录。建议为 86400 (24小时)。
  • RETRY: 重试时间,单位为秒。如果主要服务器没有响应,则建议辅助服务器在该时间之后重新发起请求。该值必须小于 REFRESH 值。建议为 7200 (2小时)
  • EXPIRE: 失效时间。单位为秒。如果主要服务器没有响应,则建议辅助服务器在该时间之后停止发起请求。该值必须大于 REFRESH + RETRY 的和。建议为 3600000 (100小时)
  • MINIMUM: Used in calculating the time to live for purposes of negative caching. Authoritative name servers take the smaller of the SOA TTL and the SOA MINIMUM to send as the SOA TTL in negative responses. Resolvers use the resulting SOA TTL to understand for how long they are allowed to cache a negative response. Recommendation for small and stable zones: 172800 seconds (2 days). Originally this field had the meaning of a minimum TTL value for resource records in this zone; it was changed to its current meaning by RFC 2308.

zone file 中的 SOA 记录示例:

@   IN  SOA     ns.icann.org. noc.dns.icann.org. (
        2020080302  ;Serial
        7200        ;Refresh
        3600        ;Retry
        1209600     ;Expire
        3600        ;Negative response caching TTL
)

可使用如下命令查看 icann.org 的 SOA 记录:

dig SOA icann.org

输出:

SO.			3600	IN	SOA	d.nic.SO. hostmaster.nic.SO. 2022082203 21600 3600 604800 1200

区域传输

DNS 区域传输是将 DNS 记录数据从一个主要名称服务器 (primary master name server) 发送到一个辅助名称服务器 (secondary name server) 的过程。SOA 记录将首先被传输。序列号将告知辅助服务器其版本是否需要更新。区域传输通过 TCP 协议进行。

参考