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
: SOACLASS
: Zone class,IN
表示 InternetTTL
: Time-to-liveMNAME
: 该区域的主要名称服务器 (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 协议进行。