DNS详解
DNS 是一个域名系统,它主要用于将人类容易记忆的域名转换成ip地址。
默认情况下,设备会自动从网络供应商获取DNS服务器地址,并使用DNS服务器对域名进行解析。
此外,你也可以手动设置DNS服务器,具体操作系统的操作步骤可以进行网络查询。
分布式架构
DNS是分布式架构的,全球拥有多个根服务器。
- 根服务器:DNS最顶层,管理顶级域(.com,.net…)。
- 顶级域名服务器:管理特定顶级域下的域名信息。(如.com)
- 权威DNS服务器:存储特定域名的信息。
- 递归解析器:用于接收用户DNS查询请求,并递归的向其他DNS服务器查询ip地址。
查询过程
这里在以浏览器输入一个域名开始为例:
- 查询本地是否包含DNS缓存,如果不存在则向递归解析器发起请求
- 递归解析器查看本地是否包含缓存结果,如果没有,则向根服务器发起查询请求。
- 根服务器返回管理特定顶级域的顶级域名服务器
- 递归解析器向顶级服务器发起查询请求
- 顶级服务器返回管理特定域名权威DNS服务器的地址
- 递归解析器向权威DNS服务器发起查询请求,权威DNS服务器返回特定域名的ip地址。
- 递归解析器将ip地址返回给设备。
例子
dig +trace www.baidu.com
; <<>> DiG 9.10.6 <<>> +trace www.baidu.com
;; global options: +cmd
. 352657 IN NS j.root-servers.net.
. 352657 IN NS h.root-servers.net.
. 352657 IN NS l.root-servers.net.
. 352657 IN NS d.root-servers.net.
. 352657 IN NS k.root-servers.net.
. 352657 IN NS b.root-servers.net.
. 352657 IN NS e.root-servers.net.
. 352657 IN NS i.root-servers.net.
. 352657 IN NS g.root-servers.net.
. 352657 IN NS m.root-servers.net.
. 352657 IN NS f.root-servers.net.
. 352657 IN NS c.root-servers.net.
. 352657 IN NS a.root-servers.net.
;; Received 811 bytes from 192.168.2.1#53(192.168.2.1) in 24 mswww.baidu.com. 600 IN CNAME www.a.shifen.com.
www.a.shifen.com. 600 IN A 180.101.50.242
www.a.shifen.com. 600 IN A 180.101.50.188
可以看到 www.baidu.com 是一个别名,它的真实域名是www.a.shifen.com。j.root-servers.net代表根服务器名称。
网站访问、负载均衡、内容分发系统(CDN)
在网站访问,负载均衡,CDN经常会用到DNS。
如负载均衡,将同一个域名解析为不同的ip地址,根据不同服务器的负载转给不同服务器去执行。
CDN,将域名的ip的地址解析为离用户较近的服务器,加快数据传输,减少传输延迟等。
其他
DNS缓存污染
攻击者向DNS解析器里注入恶意的DNS记录,导致用户访问恶意网站或者钓鱼网站。
DNS劫持
将用户DNS请求重定向到恶意DNS服务器,导致用户不正确的ip地址。