使用 dig 命令查询域名对应 IP

DNS 服务器

DNS服务器有两种:authoritative 和 recursive

authoritative DNS 服务器具有其所负责的每个域的 IP 地址数据库。

recursive DNS 服务器本身对谁拥有什么IP地址一无所知,他们通过询问正确的权威 DNS 服务器来确定域的IP地址,然后缓存该 IP 地址,以防再次被询问。8.8.8.8是递归 DNS 服务器。

例如,现在 github.com 的权威DNS服务器是 ns-421.awsdns-52.com 可以像这样要求它提供 github.com 的IP:

1
$ dig @ns-421.awsdns-52.com github.com

返回如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
; <<>> DiG 9.10.6 <<>> @ns-421.awsdns-52.com github.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42093
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com. IN A

;; ANSWER SECTION:
github.com. 60 IN A 13.229.188.59

;; AUTHORITY SECTION:
github.com. 900 IN NS ns-1283.awsdns-32.org.
github.com. 900 IN NS ns-1707.awsdns-21.co.uk.
github.com. 900 IN NS ns-421.awsdns-52.com.
github.com. 900 IN NS ns-520.awsdns-01.net.

;; Query time: 237 msec
;; SERVER: 205.251.193.165#53(205.251.193.165)
;; WHEN: Wed Jul 01 20:22:48 CST 2020
;; MSG SIZE rcvd: 192

通过 dig 命令查找域名对应 IP

以查询 github.com 的 IP 地址为例。

如果递归 DNS 服务器查到自己有未过期的缓存,那么直接返回缓存 IP 数据。

如果所有缓存都过期,那么按照下面的步骤:

1、从代码中找到硬编码的根 DNS 服务器 IP 地址

例如 unbound 源码 ,这些 IP 地址的配置来自于 iana.org,这些 IP 地址就是根域名服务器 IP 地址,现在全球一共有 13 台根域名服务器,相关文章见下面:

2、接下来访问根域名服务器

现在以 github.com 和 198.41.0.4 为例,获取到 .com 域名的服务器 IP 地址:

1
$ dig @198.41.0.4 github.com

返回如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
; <<>> DiG 9.10.6 <<>> @198.41.0.4 github.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34836
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com. IN A

;; AUTHORITY SECTION:
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.

;; ADDITIONAL SECTION:
e.gtld-servers.net. 172800 IN A 192.12.94.30
e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30
b.gtld-servers.net. 172800 IN A 192.33.14.30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
j.gtld-servers.net. 172800 IN A 192.48.79.30
j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30
m.gtld-servers.net. 172800 IN A 192.55.83.30
m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30
i.gtld-servers.net. 172800 IN A 192.43.172.30
i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30
f.gtld-servers.net. 172800 IN A 192.35.51.30
f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30
a.gtld-servers.net. 172800 IN A 192.5.6.30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
g.gtld-servers.net. 172800 IN A 192.42.93.30
g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30
h.gtld-servers.net. 172800 IN A 192.54.112.30
h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30
l.gtld-servers.net. 172800 IN A 192.41.162.30
l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30
k.gtld-servers.net. 172800 IN A 192.52.178.30
k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30
c.gtld-servers.net. 172800 IN A 192.26.92.30
c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30
d.gtld-servers.net. 172800 IN A 192.31.80.30
d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30

;; Query time: 134 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Thu Jul 02 11:51:50 CST 2020
;; MSG SIZE rcvd: 835
3、现在向 .com 服务器询问有关 github.com 域名服务器的信息

从上一步返回的列表中选取一个 A 记录的 IP 地址去查询 github.com 域名所在服务器的 IP 地址。

1
$ dig @192.12.94.30 github.com

返回如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
; <<>> DiG 9.10.6 <<>> @192.12.94.30 github.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62346
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com. IN A

;; AUTHORITY SECTION:
github.com. 172800 IN NS ns1.p16.dynect.net.
github.com. 172800 IN NS ns3.p16.dynect.net.
github.com. 172800 IN NS ns2.p16.dynect.net.
github.com. 172800 IN NS ns4.p16.dynect.net.
github.com. 172800 IN NS ns-520.awsdns-01.net.
github.com. 172800 IN NS ns-421.awsdns-52.com.
github.com. 172800 IN NS ns-1707.awsdns-21.co.uk.
github.com. 172800 IN NS ns-1283.awsdns-32.org.

;; ADDITIONAL SECTION:
ns-421.awsdns-52.com. 172800 IN A 205.251.193.165

;; Query time: 103 msec
;; SERVER: 192.12.94.30#53(192.12.94.30)
;; WHEN: Thu Jul 02 12:04:01 CST 2020
;; MSG SIZE rcvd: 275

可以看到里面有一个 205.251.193.165 地址,这就是 github.com 这个域名的域名服务器,接下来向这个域名服务器询问 github.com 的 IP 地址。

4、向 github.com 的域名服务器查询其 IP 地址
1
$ dig @205.251.193.165 github.com

返回如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
; <<>> DiG 9.10.6 <<>> @205.251.193.165 github.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28745
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;github.com. IN A

;; ANSWER SECTION:
github.com. 60 IN A 52.74.223.119

;; AUTHORITY SECTION:
github.com. 900 IN NS ns-1283.awsdns-32.org.
github.com. 900 IN NS ns-1707.awsdns-21.co.uk.
github.com. 900 IN NS ns-421.awsdns-52.com.
github.com. 900 IN NS ns-520.awsdns-01.net.

;; Query time: 362 msec
;; SERVER: 205.251.193.165#53(205.251.193.165)
;; WHEN: Thu Jul 02 13:36:23 CST 2020
;; MSG SIZE rcvd: 192

可以看到其中有一个 A 记录 github.com。

查看所有递归 DNS 服务器

1
$ dig @8.8.8.8 +trace github.com

TTL

下面一行记录代表 A 记录 github 的名称服务器为其 DNS 记录返回的 TTL 为 60 秒。

60 秒是一个非常短的 TTL,理论上,如果每个人的 DNS 都遵循 DNS 标准,那么意味着如果 github 决定更改 github.com 对应的 IP 地址,则每个人都应该在60秒内获得新的 IP 地址。

1
github.com.		60	IN	A	52.74.223.119

参考

◀        
        ▶