域名系统(Domain Name System
, DNS
)是整个互联网的通讯录,它能够将容易识别的域名翻译成可被机器理解IP
地址。
前言
DNS
可以理解为一个分布式的树状命名系统,它就像一个去中心化的分布式数据库,存储着从域名到IP
地址的映射关系。
工作原理
本例采用一台机器访问xiexianbin.cn
为例,详解DNS工作原理,如下图:
- 本地的
DNS
客户端向DNS解析器
发出解析xiexianbin.cn
域名的请求 DNS解析器
向就近的根DNS
服务器.
请求顶级域名DNS
服务cn.
的地址- 拿到顶级域名
DNS
服务cn.
的地址之后,DNS解析器
会向顶级域名服务请求负责xiexianbin.cn.
域名解析的命名服务
(Name Server
) - 得到授权的
DNS命名服务
,就可以根据请求的具体的主机IP地址 DNS解析器
将IP地址返回本地的DNS
客户端
DNS解析器
有两种查询方式:
- 迭代查询:依次返回DNS服务地址,直到最终查到
- 递归查询:DNS服务器收到客户端结果时,若本地有缓存,直接返回;若无,就询问其他的服务器,并将结果返回客户端
域名层级
域名层级
是一个层级的树形结构,树的最顶层是根域名,一般使用.
来表示,域名xiexianbin.cn
,该写法其实省略了最后的.
,全称域名(FQDN)为xiexianbin.cn.
域名服务器
DNS 域名服务器大体分成三类:
域名的命名空间是树形的,决定了处理域名解析的DNS
服务器也是树形的,只是在树的组织和每一层的职责上有一些不同。
DNS解析器
从根域名服务器
查找到顶级域名服务器
的IP地址
,又从顶级域名服务器
查找到权威域名服务器
的IP地址
,最终从权威域名
服务器查出了对应服务的IP地址
,如下:
dig -t A www.xiexianbin.cn +trace
; <<>> DiG 9.10.6 <<>> -t A www.xiexianbin.cn +trace
;; global options: +cmd
. 46 IN NS c.root-servers.net. # 13 组根域名服务器
. 46 IN NS e.root-servers.net.
. 46 IN NS a.root-servers.net.
. 46 IN NS b.root-servers.net.
. 46 IN NS f.root-servers.net.
. 46 IN NS h.root-servers.net.
. 46 IN NS m.root-servers.net.
. 46 IN NS k.root-servers.net.
. 46 IN NS j.root-servers.net.
. 46 IN NS i.root-servers.net.
. 46 IN NS d.root-servers.net.
. 46 IN NS l.root-servers.net.
. 46 IN NS g.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53(192.168.1.1) in 8 ms
cn. 172800 IN NS a.dns.cn. # 名 DNS 服务器
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS f.dns.cn.
cn. 172800 IN NS g.dns.cn.
cn. 172800 IN NS ns.cernet.net.
cn. 86400 IN DS 57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044
cn. 86400 IN RRSIG DS 8 1 86400 20210313050000 20210228040000 42351 . cNhKizxSK7mTGfToT6aneUHMvysGwD0BmdkpkrJG6LRTClIeFp6OxYv9 woofV06dpzrb4XrUCaZzedloaSiS5gz0NLRpUxu9LMWzPqugJ6mB5Nku Tzh7z6hWqI4P6RWm0jdUuV0UU8tHnLg+z0R9oTLgHZFzCZ2VWb5fbBws iZY0buc5Goq5okBoUQuYxJnYBbJs6jaZ6SgK57lueIkx6TW7rU69ZcWX 33CWOV3GoJ+cMS57dSWtwrQxfN8S32x5eWFM7P/PSh3qA8Pb5qdqVW9x Mzz6ll/lk2lpgLNWH2OZHM+x9q9+o/0DhjrkoRxsbmdZWPqaDscedVwV PSru4w==
;; Received 708 bytes from 198.41.0.4#53(a.root-servers.net) in 243 ms
xiexianbin.cn. 86400 IN NS dns27.hichina.com. # 权威DNS服务器
xiexianbin.cn. 86400 IN NS dns28.hichina.com.
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B NS SOA RRSIG DNSKEY NSEC3PARAM
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314110243 20210212102103 38388 cn. JKhH8x1OG/7Caw+HOskaQeqa4HUkFl3y7iRA5yO3vCiaDpPB3vycUeIq BvuOtXUhatYpn9BeBeyrOlTHBt2VdTtAPDtTct771qUzyoptqeMbLu8D p+TJL8/QEiA9DPiiu8ijgGSq3dT5RE2NE8dzYPGVyVfGOvJ3l341FUG+ JFY=
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN NSEC3 1 1 10 AEF123AB M00DET6UMAB8JVV453K3P4SRBR44G7RI CNAME RRSIG
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314100107 20210212092032 38388 cn. LEX4+QruWCNZCcJk9i3RdXdnoQhLb85fp21R6bePmcuWnuBuDF/3hPyH CV6/2Y23p8ucFS12Wj0DBsIwPBEWuXuXvFBqv7eosiiGIic3cS5Wa+tF 5Wu9pvWLkfP9ngEALMzPcVvSiUSgLTH9KpeMPdT6f9M+90auGDZl1mf7 u+0=
;; Received 665 bytes from 2001:dc7:1000::1#53(d.dns.cn) in 25 ms
www.xiexianbin.cn. 600 IN CNAME www.xiexianbin.cn.w.cdngslb.com. # 解析地址
;; Received 91 bytes from 106.11.141.120#53(dns28.hichina.com) in 43 ms
胶水记录
胶水记录(Glue Record)
解决在出现循环依赖时,直接在上一级作用域返回 DNS 服务器的 IP 地址
dig +trace +additional www.xiexianbin.cn
; <<>> DiG 9.10.6 <<>> +trace +additional www.xiexianbin.cn
;; global options: +cmd
. 3512 IN NS h.root-servers.net.
. 3512 IN NS b.root-servers.net.
. 3512 IN NS e.root-servers.net.
. 3512 IN NS m.root-servers.net.
. 3512 IN NS k.root-servers.net.
. 3512 IN NS d.root-servers.net.
. 3512 IN NS j.root-servers.net.
. 3512 IN NS f.root-servers.net.
. 3512 IN NS l.root-servers.net.
. 3512 IN NS c.root-servers.net.
. 3512 IN NS g.root-servers.net.
. 3512 IN NS a.root-servers.net.
. 3512 IN NS i.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53(192.168.1.1) in 7 ms
cn. 172800 IN NS a.dns.cn.
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS f.dns.cn.
cn. 172800 IN NS g.dns.cn.
cn. 172800 IN NS ns.cernet.net.
cn. 86400 IN DS 57724 8 2 5D0423633EB24A499BE78AA22D1C0C9BA36218FF49FD95A4CDF1A4AD 97C67044
cn. 86400 IN RRSIG DS 8 1 86400 20210313050000 20210228040000 42351 . cNhKizxSK7mTGfToT6aneUHMvysGwD0BmdkpkrJG6LRTClIeFp6OxYv9 woofV06dpzrb4XrUCaZzedloaSiS5gz0NLRpUxu9LMWzPqugJ6mB5Nku Tzh7z6hWqI4P6RWm0jdUuV0UU8tHnLg+z0R9oTLgHZFzCZ2VWb5fbBws iZY0buc5Goq5okBoUQuYxJnYBbJs6jaZ6SgK57lueIkx6TW7rU69ZcWX 33CWOV3GoJ+cMS57dSWtwrQxfN8S32x5eWFM7P/PSh3qA8Pb5qdqVW9x Mzz6ll/lk2lpgLNWH2OZHM+x9q9+o/0DhjrkoRxsbmdZWPqaDscedVwV PSru4w==
a.dns.cn. 172800 IN A 203.119.25.1 # 返回IP地址
b.dns.cn. 172800 IN A 203.119.26.1
c.dns.cn. 172800 IN A 203.119.27.1
d.dns.cn. 172800 IN A 203.119.28.1
e.dns.cn. 172800 IN A 203.119.29.1
f.dns.cn. 172800 IN A 195.219.8.90
g.dns.cn. 172800 IN A 66.198.183.65
ns.cernet.net. 172800 IN A 202.112.0.44
a.dns.cn. 172800 IN AAAA 2001:dc7::1
d.dns.cn. 172800 IN AAAA 2001:dc7:1000::1
;; Received 708 bytes from 192.58.128.30#53(j.root-servers.net) in 32 ms
xiexianbin.cn. 86400 IN NS dns27.hichina.com.
xiexianbin.cn. 86400 IN NS dns28.hichina.com.
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN NSEC3 1 1 10 AEF123AB 3QLMP0QRNQ96G5AFGOPNB7U7IJ4MBP4B NS SOA RRSIG DNSKEY NSEC3PARAM
3qdaqa092ee5belp64a74ebnb8j53d7e.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314110243 20210212102103 38388 cn. JKhH8x1OG/7Caw+HOskaQeqa4HUkFl3y7iRA5yO3vCiaDpPB3vycUeIq BvuOtXUhatYpn9BeBeyrOlTHBt2VdTtAPDtTct771qUzyoptqeMbLu8D p+TJL8/QEiA9DPiiu8ijgGSq3dT5RE2NE8dzYPGVyVfGOvJ3l341FUG+ JFY=
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN NSEC3 1 1 10 AEF123AB M00DET6UMAB8JVV453K3P4SRBR44G7RI CNAME RRSIG
lvmcu6rg30kg6ch8v95m5orojf1s15k3.cn. 21600 IN RRSIG NSEC3 8 2 21600 20210314100107 20210212092032 38388 cn. LEX4+QruWCNZCcJk9i3RdXdnoQhLb85fp21R6bePmcuWnuBuDF/3hPyH CV6/2Y23p8ucFS12Wj0DBsIwPBEWuXuXvFBqv7eosiiGIic3cS5Wa+tF 5Wu9pvWLkfP9ngEALMzPcVvSiUSgLTH9KpeMPdT6f9M+90auGDZl1mf7 u+0=
;; Received 665 bytes from 2001:dc7::1#53(a.dns.cn) in 28 ms
www.xiexianbin.cn. 600 IN CNAME www.xiexianbin.cn.w.cdngslb.com.
;; Received 91 bytes from 2400:3200:2000:47::1#53(dns28.hichina.com) in 9 ms
扩展
- DNS 服务器
- CoreDNS
- bind9
- unbound
PowerDNS(PDNS)
提供 权威认证DNS服务器
和 递归认证DNS服务器
,官网
- https://nip.io/ 解析指定 nip.io 格式的域名到指定的 IP
DNSSEC(DNS Security Extensions,域名系统安全扩展)
能有效防止DNS欺骗和缓存污染等攻击- 实现原理:通过数字签名来保证DNS应答报文的真实性和完整性,保护用户不被重定向到非预期地址,从而提高用户对互联网的信任,并保护您的核心业务
LLMNR(Link Local Multicast Name Resolution,本地链路组播名称解析)
- 在DNS服务器不可用时,DNS 客户端计算机使用本地链路组播名称解析,通过UDP发送到组播地址
224.0.0.252:5355
,来解析本地网段上的名称,使用的也是普通DNS的数据包格式
mDNS(Multicast DNS,多播 DNS)
主要实现了在没有传统DNS服务器的情况下,使局域网内的主机实现相互发现和通信,使用的端口为5353,遵从DNS协议,使用现有的DNS信息结构、名语法和资源记录类型。并且没有指定新的操作代码或响应代码
F&Q
Temporary failure in name resolution
- DNS 域名解析暂时失败
- Linux
/etc/resolv.conf
中 options
控制 DNSoptions
参数说明rotate
随机选取一个 nameserver 查询 dns 记录timeout
查询 nameserver 的超时时间,单位是秒attempts
查询尝试次数
options
参数可以通过 RES_OPTIONS
环境变量配置(如在程序中指定,参考),示例RES_OPTIONS="rotate timeout:1 retries:1"
options timeout:1 attempts:1 rotate
nameserver 223.5.5.5
nameserver 1.1.1.1