关于DNS
互联网上几乎一切活动都以DNS
请求开始。DNS
(Domain Name System)是Internet
的目录。访问URL
时,设备所要做的第一件事就是询问目录,根据域名查出IP
地址。
查询过程
例如:访问www.baidu.com
- 首先检查本机
hosts
文件 - 向本地
DNS
服务器查找www.baidu.com
的IP - 根
DNS
服务器查询 - 告知本地
DNS
服务器去com域名服务器查询 - 向com域名服务器查询
- 告知本地
DNS
服务器去baidu.com
域名服务器查询 - 向
baidu.com
域名服务器查询 - 告知本地
DNS
服务器www.baidu.com
的IP
dig
解析域名
dig www.baidu.com
dig www.baidu.com @114.114.114.114
,查指定DNS服务器为114.114.114.114
dig www.baidu.com @114.114.114.114 ns
,查指定域名记录ns
简单解析域名
dig www.baidu.com
结果如下:
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22401
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 255 IN CNAME www.a.shifen.com.
www.a.shifen.com. 172 IN CNAME www.wshifen.com.
www.wshifen.com. 293 IN A 103.235.46.39
;; Query time: 53 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Mar 19 19:06:52 CST 2019
;; MSG SIZE rcvd: 111
第一段是查询参数和统计
; <<>> DiG 9.10.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22303
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
第二段是查询内容,表示查询域名www.baidu.com
的A
记录,A
是address的缩写。
;; QUESTION SECTION:
;www.baidu.com. IN A
第三段是DNS服务器的答复,www.baidu.com
有两个CNAME
记录,一个A
记录,即一个IP地址。35是TTL值(Time to live 的缩写),表示缓存时间,即35秒之内不用重新查询
;; ANSWER SECTION:
www.baidu.com. 789 IN CNAME www.a.shifen.com.
www.a.shifen.com. 95 IN CNAME www.wshifen.com.
www.wshifen.com. 35 IN A 103.235.46.39
第四段是DNS服务器的一些传输信息
;; Query time: 53 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Mar 19 18:35:33 CST 2019
;; MSG SIZE rcvd: 111
查指定域名记录
dig www.baidu.com @114.114.114.114 ns
结果如下:
; <<>> DiG 9.10.6 <<>> www.baidu.com @114.114.114.114 ns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13293
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN NS
;; ANSWER SECTION:
www.baidu.com. 30 IN CNAME www.a.shifen.com.
www.a.shifen.com. 30 IN CNAME www.wshifen.com.
;; AUTHORITY SECTION:
wshifen.com. 30 IN SOA ns1.wshifen.com. baidu_dns_master.baidu.com. 1903190001 60 30 2592000 3600
;; Query time: 225 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Tue Mar 19 19:07:32 CST 2019
;; MSG SIZE rcvd: 152
第四段显示www.baidu.com
的NS
记录(Name Server的缩写),即哪些服务器负责管理www.baidu.com
的DNS记录
;; AUTHORITY SECTION:
wshifen.com. 62 IN SOA ns1.wshifen.com. baidu_dns_master.baidu.com. 1903190001 60 30 2592000 3600
域名层级结构
www.example.com.root
主机名.次级域名.顶级域名.根域名
分级查询
dig +trace www.baidu.com
第一段列出根域名.
的所有NS记录,即所有根域名服务器。根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问www.baidu.com
的顶级域名服务器com.
的NS记录。最先回复的根域名服务器将被缓存,以后只向这台服务器发请求。
; <<>> DiG 9.10.6 <<>> +trace www.baidu.com
;; global options: +cmd
. 102290 IN NS a.root-servers.net.
. 102290 IN NS b.root-servers.net.
. 102290 IN NS c.root-servers.net.
. 102290 IN NS d.root-servers.net.
. 102290 IN NS e.root-servers.net.
. 102290 IN NS f.root-servers.net.
. 102290 IN NS g.root-servers.net.
. 102290 IN NS h.root-servers.net.
. 102290 IN NS i.root-servers.net.
接着是第二段
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
第二段显示显示.com域名的13条NS记录,同时返回的还有每一条记录对应的IP地址。
然后,DNS服务器向这些顶级域名服务器发出查询请求,询问www.baidu.com
的次级域名baidu.com
的NS记录。
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
上面结果显示baidu.com
有五条NS记录。
然后,DNS服务器向上面这五台NS服务器查询www.baidu.com
的主机名。
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
;; Received 239 bytes from 112.80.248.64#53(ns3.baidu.com) in 16 ms
上面结果显示,最先返回结果的NS服务器是ns3.baidu.com
,IP地址为112.80.248.64
。
NS记录的查询
dig
命令可以单独查看每一级域名的NS记录,+short
参数可以显示简化的结果
dig ns com
dig ns example.com
dig +short ns com
dig +short ns example.com
常见域名记录类型
域名与IP之间的对应关系,称为记录。
A 主机记录,把一个域名解析成IP地址
CNAME 别名记录,把一个域名解析到另一个域名
NS 域名解析服务器记录
MX 邮件交换记录,返回接收电子邮件的服务器地址
PTR 指针记录,A记录的逆向记录,把IP解析成域名
TXT 为域名设置说明
一般来说,为了服务的安全可靠,至少应该有两条NS记录,而A记录和MX记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。
CNAME记录主要用于域名的内部跳转,为服务器配置提供灵活性,用户感知不到。举例来说,www.baidu.com
这个域名就是一个CNAME记录。
;; ANSWER SECTION:
www.baidu.com. 430 IN CNAME www.a.shifen.com.
www.a.shifen.com. 231 IN CNAME www.wshifen.com.
www.wshifen.com. 286 IN A 103.235.46.39
上面结果显示,www.baidu.com
的CNAME记录指向www.wshifen.com
。也就是说,用户查询www.baidu.com
的时候,实际上返回的是www.wshifen.com
的IP地址。这样的好处是,变更服务器IP地址的时候,只要修改www.wshifen.com
这个域名就可以了,用户的www.baidu.com
域名不用修改。
由于CNAME
记录就是一个替换,所以域名一旦设置CNAME
记录以后,就不能再设置其他记录了(比如A
记录和MX
记录),这是为了防止产生冲突。举例来说,foo.com
指向bar.com
,而两个域名各有自己的MX
记录,如果两者不一致,就会产生问题。由于顶级域名通常要设置MX
记录,所以一般不允许用户对顶级域名设置CNAME
记录。
PTR
记录用于从IP地址反查域名。dig
命令的-x
参数用于查询PTR
记录。
$ dig -x 192.30.252.153
...
;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 2635 IN PTR lb-192-30-252-153-iad.github.com.
上面结果显示,192.30.252.153
这台服务器的域名是lb-192-30-252-153-iad.github.com
。
逆向查询的一个应用,是可以防止垃圾邮件,即验证发送邮件的IP地址,是否真的有它所声称的域名。
其他DNS工具
- host
- nslookup
参考: