What is DNS

By on

国内有关现代的 DNS 中文资料少之又少,对 DNS 的了解大都仅限于 A - AAAA 之间,我就在此将这些坑记下吧。

网域名称系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。

Table of Contents

根、顶和二级域名

  • 使用 dig 软件查询一个域名: dig example.com ,会发现诸如 example.com 的域名并不完整,它的完整写法是 example.com. ,最后的这一个点就是根域名,在日常使用中,因为所有的域名都带有这一个点,我们通常就将其省略。如果为这个命令加上一个 +trace 参数,就可以看到它首先会查询 “.” 这个域名,而全球的 13 台根域名服务器的 ip 地址往往被硬编码(hardcode)在操作系统中。
  • 然后 dig 软件会向根域名服务器查询 com. 域名的域名服务器,这里的 com(类似的有 cn, hk, me 等)就是 顶级域名(TLD),你仍然可以注册顶级域名1 ,但其条件要求十分苛刻。
  • 再然后就是我们喜闻乐见的 二级域名(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 记录中)解密,这就保证了传输的安全性。

NS 和 SOA 记录

SOA 的记录确定了一个 Zone(可以简单理解成一个域名)的开始,它包含了一个主要的权威域名服务器、邮箱和 TTL 等内容。而 NS 记录则保存着该域名的主要和备用权威域名服务器。

PTR 反向解析记录

严格来说这一项非常特殊,但它也属于 DNS 系统的一部分。PTR 记录是将 IP 地址翻译成域名的记录,常用于垃圾邮件鉴定。它有专门的反向解析服务器,在网络运营商处设置。如果你是租赁的 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 就应尽量短。

剩下的

有关 DNS 的原理最近折腾的就这些了,剩下的比如 TXT MX 等记录国内有很多资料,百度一下就行啦!

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

  1. ICANN已在2015年允许注册顶级域名,但其条件和审查及其严格:Frequently-Asked-Questions-ICANN-New-gTLDs↩︎

  2. 部分DNS提供商称其为ANAME或其它名称,这是因为该标准并没有普及导致的命名不规范,通常也理解为私有类型。 ↩︎