1. 什么是DNS
DNS是Domain Name Server的缩写,所有的网络通信(基于TCP/UDP)最后都需要基于IP来完成,DNS的作用就是域名转换为具体的IP。
2. 为什么需要
在互联网的初期,对外提供的服务极少,人们直接通过IP来相互访问。显然要记住毫无规律的IP地址并不容易,于是人们想到了通过文件,描述IP对应的内容,就像我们现在看到/etc/hosts
文件:
[dev@namenode2 ~]$cat /etc/hosts
10.20.38.12 apiserver5 logserver1
10.20.38.13 apiserver6 logserver2
10.20.38.49 gateway1
然而换机器、和好友共享时,我们必须手动的同步配置文件,显然还是很麻烦的,最直观的解决方案是将这份配置集中式存储,DNS的职责就是提供域名和IP关系的集中式存储,并提供查询的能力。
3. 域名的层级
我们常见的域名,比如www.baidu.com
,实际全名是www.baidu.com.root
,这里的.root
就是根域名,因为根域名只有一个,所以.root
经常被省略。
每个层级都允许指定自己的下一级的域名服务(Name Service,简称NS)。根域名的NS是固定的,通过dig +trace
我们能查看到对应的13组根域名服务器:
根域名的NS一般固化在域名服务中,域名服务中固定的提供一组IP,通过访问这组IP获取根域名的NS域名/IP地址。这一组根服务器基本是被米国垄断的。
根域名的NS服务器提供了下层域名解析服务,所以我们可以向根域名NS申请顶级域名(如.com
),当然这个是很费钱的(据说几十万美刀)。
获得顶级域名后,我可以配置自己的NS服务器,再向外出售二级域名。这确实是个低成本高收益的买卖,就这一点域名服务商/炒域名的就赚的盆满钵满。
4. 工作原理
4.1 DNS服务器配置
每一个连接到Internet的机器,或主动或被动的,都需要设置自己的IP地址和DNS服务器,比如我机器上的TCP/IP设置是这样的。
这里的DNS服务器就是用来完成域名到IP的转换过程的。当我们在浏览器地址栏输入www.baidu.com
之后,浏览器会通过系统访问这里指定(自动获得)的DNS服务器地址,获取指定域名对应的IP。Linux下也有类似的配置,DNS服务器的IP地址保存在/etc/resolv.conf
文件下,里边的内容大概是长这样的。
[dev@namenode2 ~]$cat /etc/resolv.conf
options attempts:1 timeout:5 rotate
nameserver 10.20.60.58
nameserver 10.20.60.59
这里的DNS服务器地址是两个内网IP,说明公司内部搭建了自己的DNS服务器,通过开源软件BIND
很容易就能搭建自己的DNS服务器。
如果是个人用户,一般会用ISP服务商或者大厂的IP,比如谷歌的8.8.8.8
、Level 3的4.2.2.2
。
4.2 处理流程
- 本机通过DNS服务器查询域名对应的IP,DNS服务器查询根域名对应的NS服务
- 通过根域名NS服务器获取顶级域名的NS服务,例子里选的是
d.root-servers.net.
- 通过顶级域名NS服务获取二级域名的NS服务,例子里选的是
a.gtld-server.net.
- 通过二级域名NS服务获取三级域名的NS服务,例子里选的是
ns4.baidu.com.
4.3 DNS记录类型
记录类型 | 说明 |
---|---|
A | Address,地址记录,返回域名指向的IP |
NS | Name Server, 域名服务器记录,对应域名服务器地址,只能设置为域名,不能设为IP |
MX | Mail eXchange,邮件记录,返回电子邮件服务器IP |
CNAME | Canonical Name,规范名记录,返回另一域名,做为别名,别名可以独立修改对应A记录,自动对CNAME生效,是一种解耦 |
PTR | Pointer Record,逆向查询记录,用于从IP反查域名 |
一般为了安全,NS记录
至少提供2条,A记录
和MX记录
可以有多条,需要保证对应IP的服务高可用,如虚IP。CNAME记录
常用的场景是CDN接入,将我们的静态资源域名添加一条CDN厂商域名的CNAME记录。
5. 相关命令
5.1 dig
在4.2
章节,我们通过dig +trace
查看了DNS
将域名转换为IP的流程。dig
命令默认返回6个部分内容:
- 查询参数和统计信息
- 请求内容,查询
www.baidu.com
的A记录
- DNS服务器响应,返回2个
A记录
,数字272
是TTL(Time To Live),单位秒
,表示缓存时间,272秒
内不需要重新查询,1个CNAME记录
- 表示
www.baidu.com
对应的NS记录,哪些服务器提供a.shifen.com.
对应的IP NS记录
对应的IP地址- 本次请求的统计信息
5.2 dig +trace
通过dig +trace
能完整的查看DNS解析的过程,前面已经详细的解释过每一条记录,这里就不再赘述。
5.3 host
host
命令可以反查IP对应的域名,反查是基于DNS的PTR记录
的,很多域名并没有设置PTR记录
,经常我们通过dig
命令解析域名对应的IP,再通过IP反查对应的域名却不成功,这是因为这个域名没有设置PTR记录
。功能等同于dig -x
5.4 whois
通过whois
查询域名注册时的信息,实际中并没有多大作用。