👀 DNS 小记
By Gufeng Shen on · Reading time: 2 mins国内有关现代的 DNS 中文资料少之又少,对 DNS 的了解大都仅限于 A - AAAA 之间,我就在此将这些坑记下吧。
网域名称系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。
Table of Contents
- 根、顶和二级域名
- 胶水记录
- DNSSEC:RRSIG 和 DS 记录
- NS 和 SOA 记录
- PTR 反向解析记录
- DANE:TLSA 记录与 DNSSEC 的搭配
- CNAME Flattening
- TTL 缓存时间
根、顶和二级域名
使用 dig 软件查询一个域名 dig example.com
:
- 会发现诸如
example.com
的域名并不完整,它的完整写法是example.com.
。最后的这一个点就是根域名。 在日常使用中,因为所有的域名都带有这一个点,我们通常就将其省略。如果为这个命令加上一个+trace
参数,就可以看到它首先会查询 “.
” 这个域名。而全球的 13 台根域名服务器 (Alternative DNS root) 的 IP 地址往往被硬编码在操作系统中。 - 然后 dig 软件会向根域名服务器查询
com.
域名的域名服务器,这里的 com(类似的有 cn, hk, me 等)就是 顶级域名(TLD)。你可以注册顶级域名1 ,但其条件要求十分苛刻。顶级域名一般由大公司从 ICANN 购买,购买后大公司就有资格建立如com.
的域名服务器,并录入到根域名系统中。 - 再然后就是我们喜闻乐见的 二级域名(SLD)了,二级域名注册得最多,也相对便宜。原因是顶级域名提供商可以提供几乎无限的二级域名,这里的 example 就是二级域名。
与这个逻辑类似的,如果你有了一个二级域名,其下级域名你就可以随意定义。
胶水记录
如果你购买过域名,你也许就为你的域名设置过 DNS 服务器(nameservers),这些服务器将负责你的域名的解析工作。那么,如果域名服务器用了域名,域名服务器的域名该如何解析呢?
这就要提到 胶水记录(glue records)了,胶水记录在注册商填写,是向上级域名数据库中添加指定主机的 A 或 AAAA 记录。也就是说,查询域名服务器的地址应当去上一级域名的域名服务器中查询。通常这个主机记录不能当作普通 DNS 使用,因为浏览器并不会查询胶水记录。
DNSSEC:RRSIG 和 DS 记录
DNS 协议并不安全,正如 HTTP 一样。而 DNSSEC 的目的就引入了非对称加密技术到 DNS 查询的过程当中。
在启用了 DNSSEC 的域名中,Whois 记录会显示 DNSSEC 的状态。
DS(Delegation Signer)记录保存在上级域名服务器中,它显示了公钥的 Hash 值。
每次查询都会返回一个 RRSIG 记录,这个记录是查询结果被使用私钥加密后的值,也就是说只能通过你发布的公钥(即 DNSKEY,发布在本域名的起始记录中)解密。DNSKEY 的 Hash,即 DS 记录,同理也拥有上级服务器私钥签名的 RRSIG 记录,所以 DNS 的信任链就这样建立了。
NS 和 SOA 记录
SOA 的记录确定了一个 Zone(可以简单理解成一个域名)的开始,它包含了一个主要的权威域名服务器、邮箱和 TTL 等内容。而 NS 记录则保存着该域名的主要和备用权威域名服务器。
PTR 反向解析记录
PTR 记录听上去非常抽象,但是它其实很简单!PTR 记录是将 IP 地址翻译成域名的记录,常用于垃圾邮件或者服务器位置鉴定。
世界上有一种不常出现在公众视野的顶级域名:arpa.
,而 in-addr.arpa
和 ip6.arpa
,用于对应IPv4和IPv6的DNS反向查询功能。
如果要查询 1.2.3.4 对应什么域名,只需要查询 4.3.2.1.in-addr.arpa
. 的 PTR 记录即可。有意思的是,在域名中每个八位对应的数字顺序是反过来的,而这和 IP 地址的构成有关。
拥有 IP 的运营商只需要提供自己所在网段的 DNS 反向解析服务就好。如果你是租赁的 VPS,则 VPS 控制面板一般可以设置。
DANE:TLSA 记录与 DNSSEC 的搭配
TLSA 记录体现了什么端口什么协议用的什么证书,只有启用了 DNSSEC 后才有意义。我认为和 HPKP 非常类似,差别在于 TLSA 记录不会被浏览器缓存。
配置好 TLSA 和 DNSSEC 后,就相当于为域名启用了 DANE(DNS-based Authentication of Named Entities) ,DANE 的状态可以在 SSL-Tools 中检测。
CNAME Flattening
CNAME Flattening2 是一项加速 DNS 解析的技术,可参见 Introducing CNAME Flattening: RFC-Compliant CNAMEs at a Domain’s Root,它的原理是将 CNAME 翻译成 A 记录的工作交给 DNS 服务器,这将大大节省 CNAME 域名的查询时间。目前的服务商(Rage4,Cloudflare)大都只支持根域名的 CNAME Flattening,但这不意味着这项技术只能用于根域名:如果你使用 Powerdns 自建 DNS,你会发现它的 ALIAS 记录对任何主机均适用。
TTL 缓存时间
TTL(Time- To-Live)在域名解析中表示了一条域名解析记录在 DNS 服务器上缓存的时间,单位为秒。也就是说,如果你希望减轻 DNS 服务器的负担,TTL 就应尽量长,如果希望在更换解析后反应时间短,TTL 就应尽量短。
References
域名系统 - 维基百科,自由的百科全书
IBM Knowledge Center - The difference between a trigger record and a glue record
RFC 4509 - Use of SHA-256 in DNSSEC Delegation Signer (DS) Resource Records (RRs)
RFC 2181 - Clarifications to the DNS Specification
-
ICANN已在2015年允许注册顶级域名,但其条件和审查及其严格:Frequently-Asked-Questions-ICANN-New-gTLDs. ↩︎
-
部分DNS提供商称其为ANAME或其它名称,这是因为该标准并没有普及导致的命名不规范,通常也理解为私有类型。 ↩︎