DNS解析
网页无法访问
在前面CLOUDFLARE图床设置中,把一个已经上线的应用的DNS
服务器从域名厂家改成了CLOUDFLARE提供的DNS
地址,下午测试的时候还没问题,都正常,但是晚上回去测试了下发现网页已经无法打开了(实际上经历了两个阶段的无法打开,一个显示重定向过多无法打开,一个是空白页什么都没有,这里讨论空白页的情况),由此可见DNS
在网络访问中的重要性,这里正好记录下DNS
相关的东西。
域名和IP
在讨论DNS问题的时候首先回顾下域名和ip。以qq.com
为例子,实际上完整的域名应该是https://www.qq.com
,当然如果访问qq邮箱的时候应该是https://mail.qq.com
,好了这个地址就是完整的域名了吗?实际上还不是,真正完整的是https://www.qq.com.root
。http
或者https
代表着访问协议是http
,www
或者mail
是主机名(也可以叫做子域名),qq
是域名本身或者叫权威域名Authoratative
,com
是顶级域名(net
,org
,gov
,cn
等我们熟悉的也是顶级域名),英文名叫TLD
(Top-level Domain),root
是根。因为所有域名都是由ROOT
根来管理的,所以大家都一样,为了简单这个root
就可以直接省略掉了,变成https://qq.com.
这样,当然最后的点号.
也可以省略,就变成我们熟悉的https://qq.com
了。
至于IP地址,其实要说起来也可以说蛮多,但是简单点就是一串数字地址,比如192.168.1.1
,是计算机直接绑定的数字ip地址,计算机只能访问IP形式的地址,无法访问域名,你可以很容易记住baidu.com
,qq.com
,163.com
,google.com
,但是你不可能记得住每个域名对应的数字IP。所以在浏览器你基本上输入的都是域名形式的地址。
域名到IP解析
那么问题来了,在浏览器输入qq.com
后,计算机内部世界是如何根据qq.com
访问服务器的呢?也就是如何从qq.com
变成203.205.254.157
(假设qq.com
的ip)的呢?
从域名到IP的转换的过程就叫做域名解析.
浏览器或者本地解析
在输入域名到浏览器后,最开始的就是一个浏览器内部,或者系统的解析器来进行解析,如果这个过程可以完成,那么浏览器就直接把解析后的ip地址进行通信。当然,这种简单情况不是我们用来理解DNS
过程的,如果浏览器或者系统没有这个域名的解析怎么办呢?
DNS服务器
这一步,就需要往DNS
服务器进行解析了,如果有心的朋友在设置宽带,网络设置的时候经常会见到114.114.114.114
或者8.8.8.8
这样的地址,这个地址就是一个DNS
服务器,简单点说,DNS
服务器就是一个替你进行解析服务的服务器。但是记住,这个DNS
服务器是有级别的,有ips
网络服务商自己提供的,有顶级域名级别的,有根级别的。
解析一致性问题和隐私问题
这里强调一下,上一步可以看出解析是依靠DNS
服务器的,所以,一旦DNS
服务器质量不好,服务不好,那么就出无法解析,导致网页无法访问,而某些DNS
则会监控、记录你的解析记录,所以存在隐私泄露的问题
所以,学习是很重要的,你如果想做某些事,一定要知道原理,一定要判断这个DNS服务器是否会导致你的隐私泄露
而大家可能听说过的DNS污染
就很好理解了,就是这个解析服务器存在问题,把本应该正确解析的地址导向了错误的ip地址,这个又是另外一个话题了.
缓存和管控
DNS
在解析域名的时候,就根一本字典一样,里面如果记录存在,就直接拿记录里的进行解析,这种已经存在的记录就叫做缓存,术语叫non-authoratative
,毕竟只有根服务器管控的才叫做authoratative
简单的和谐原理
通过以上知识,我们知道,想要让一个网站无法访问,最简单的做法就是让这个网站无法解析.所以只需要DNS
服务器层面屏蔽掉这个域名就可以了,或者直接做定向转移,定向到其他连接.当然解决办法也很简单,就是换个DNS
服务器,或者直接更改本地host做本地解析,或者直接以ip地址的形式访问.早期相信大家在访问某些网站的时候都会查到某些教程这样做,其中的原理就是这样.
如何查找域名的ip
这里以命令行的形式模拟如何根据域名用最原始的方法来定向它的ip地址(当然不是直接用ping
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
nslookup
> set type=ns
> .
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
. nameserver = a.root-servers.net.
. nameserver = b.root-servers.net.
. nameserver = c.root-servers.net.
. nameserver = d.root-servers.net.
. nameserver = e.root-servers.net.
. nameserver = f.root-servers.net.
. nameserver = g.root-servers.net.
. nameserver = h.root-servers.net.
. nameserver = i.root-servers.net.
. nameserver = j.root-servers.net.
. nameserver = k.root-servers.net.
. nameserver = l.root-servers.net.
. nameserver = m.root-servers.net.
Authoritative answers can be found from:
这里通过nslookup
命令查找nameserver
, set type=ns
就是查询namesever
,.
点就是根服务器, 输出结果中server 127.0.0.53
这是本地地址服务器,这个结果根据网络设置不同而不同.Non-authoritative
就代表着这是一个缓存记录,后面的字母开头的域名则是根服务器的域名
1
2
3
4
5
6
7
8
9
> set type=a
> h.root-servers.net.
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: h.root-servers.net
Address: 198.97.190.53
set type=a
用ipv4直接访问,这里随便选一个根域名服务器h.root-servers.net.
进行连接.得到这个根服务器的ip地址:198.97.190.53
1
2
3
4
> server 198.97.190.53
Default server: 198.97.190.53
Address: 198.97.190.53#53
直接连接198.97.190.53
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
> set type=ns
> com.
Server: 198.97.190.53
Address: 198.97.190.53#53
Non-authoritative answer:
*** Can't find com.: No answer
Authoritative answers can be found from:
com nameserver = a.gtld-servers.net.
com nameserver = b.gtld-servers.net.
com nameserver = c.gtld-servers.net.
com nameserver = d.gtld-servers.net.
com nameserver = e.gtld-servers.net.
com nameserver = f.gtld-servers.net.
com nameserver = g.gtld-servers.net.
com nameserver = h.gtld-servers.net.
com nameserver = i.gtld-servers.net.
com nameserver = j.gtld-servers.net.
com nameserver = k.gtld-servers.net.
com nameserver = l.gtld-servers.net.
com nameserver = m.gtld-servers.net.
a.gtld-servers.net internet address = 192.5.6.30
b.gtld-servers.net internet address = 192.33.14.30
c.gtld-servers.net internet address = 192.26.92.30
d.gtld-servers.net internet address = 192.31.80.30
e.gtld-servers.net internet address = 192.12.94.30
f.gtld-servers.net internet address = 192.35.51.30
g.gtld-servers.net internet address = 192.42.93.30
h.gtld-servers.net internet address = 192.54.112.30
i.gtld-servers.net internet address = 192.43.172.30
j.gtld-servers.net internet address = 192.48.79.30
k.gtld-servers.net internet address = 192.52.178.30
l.gtld-servers.net internet address = 192.41.162.30
m.gtld-servers.net internet address = 192.55.83.30
a.gtld-servers.net has AAAA address 2001:503:a83e::2:30
b.gtld-servers.net has AAAA address 2001:503:231d::2:30
进行nameserver
查询顶级域名com.
的管控服务器,可以看到结果,com
的管控服务器也是字母开头的gtld-servers.net.
域名,其中gtld
中的g
就是generic
通用,tld
就是上面说的Top-level Domain
,所以查询的com
管控域名有13个,并且给出了实际的ipv4地址
1
2
3
> server 192.35.51.30
Default server: 192.35.51.30
Address: 192.35.51.30#53
随便选一个ip连接
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
> set type=ns
> qq.com.
Server: 192.35.51.30
Address: 192.35.51.30#53
Non-authoritative answer:
*** Can't find qq.com.: No answer
Authoritative answers can be found from:
qq.com nameserver = ns1.qq.com.
qq.com nameserver = ns2.qq.com.
qq.com nameserver = ns3.qq.com.
qq.com nameserver = ns4.qq.com.
ns1.qq.com internet address = 101.227.218.144
ns1.qq.com internet address = 14.116.136.7
ns1.qq.com internet address = 157.255.246.101
ns1.qq.com internet address = 203.205.220.251
ns1.qq.com has AAAA address 2402:4e00:8030::111
ns2.qq.com internet address = 111.230.158.42
ns2.qq.com internet address = 203.205.249.143
ns2.qq.com internet address = 211.100.32.218
ns2.qq.com has AAAA address 240e:9f:c600::8
ns3.qq.com internet address = 112.60.1.69
ns3.qq.com internet address = 117.184.232.216
ns3.qq.com internet address = 203.205.195.94
ns4.qq.com internet address = 203.205.195.104
ns4.qq.com internet address = 218.68.91.143
ns4.qq.com internet address = 58.144.154.100
ns4.qq.com internet address = 59.36.132.142
查找qq.com.
的nameserver
,可以看到qq.com是有4个nameserver
的,每个又有不同的ip地址.而且这些记录是Authoritative
的,说明不是缓存的,是根服务器管控的.
1
2
3
4
5
6
7
8
9
10
> server 203.205.195.104
Default server: 203.205.195.104
Address: 203.205.195.104#53
> set type=a
> qq.com.
Server: 203.205.195.104
Address: 203.205.195.104#53
Name: qq.com
Address: 203.205.254.157
最后, 随便连接一个nameserver
, 进行ipv4
地址查询qq.com.
,可以得到203.205.254.157
,这个ip就是qq.com
背后的一个真实ip地址了
1
2
3
4
5
ping qq.com
PING qq.com (203.205.254.157) 56(84) bytes of data.
64 bytes from 203.205.254.157 (203.205.254.157): icmp_seq=1 ttl=48 time=164 ms
64 bytes from 203.205.254.157 (203.205.254.157): icmp_seq=2 ttl=48 time=208 ms
用ping
命令多ping
几次就可以看到确实是有这个ip的.(因为我们只是随便选了一个来查询,qq.com背后是部署了很多服务器的)
小结
通过nslookup
模拟域名解析的过程可以看出,DNS
解析在网络中的重要性,它在网络速度,网络安全,网络隐私中都扮演着很重要的重要,明白它的底层原理,将会对网络使用,网络维护,网络设计都会有很大的帮助.