DNS协议详解及Linux下的配置
DNS
DNS产生的背景
在Internet网中连接着数量众多的主机,要让这些主机进行通信,更多情况下使用IP得知来标识计算机,主机在互联网上靠IP地址进行位置标识。但是这种纯数字的表示方式不便于人的记忆,因此提出了主机名的识别方式,如www.baiodu.com的形式,这种名字便于记忆,容易被人们接受,在具体应用中多采用主机名方式访问主机。主机之间访问需要IP地址,人民访问服务习惯记忆主机名,为了兼顾人和机器,产生了一个翻译机制实现两者之间的转换,这就是主机名与IP地址的映射关系。
早期接入互联网的设备很少,IP的管理比较简单,最开始是通过本地Host文件的方式对域名和IP的映射关心进行管理;后来为了解决本地Host带来的配置不一致的问题,改为Hosts文件由Ftp统一发布,各设备定时从Ftp更新Hosts文件;再到后来出现了中心化的DNS服务集群提供域名解析服务;但随着接入互联网的设备增加,域名解析的请求量暴增,中心化的DNS服务集群开始暴露出明显的缺陷。客户机之间将所有查询请求发往中心化的DNS服务器,同时DNS服务器之间对所有查询客户机做出响应,出现了有单点故障,通信容量,远距离通信延迟,维护开销大等问题。为了解决中心化DNS服务存在的问题,出现了分布式DNS层次架构。
DNS相关概念
DNS(Domain Name System,域名系统)是是互联网上一种层次结构的基于域的命名方式和实现这种命名方式的分布式数据库,其中记录了各种助剂域名和IP地址的对应关系,能够使用户更加方便的访问网站。用户可以直接输入域名登陆网站DNS会将域名解析成IP地址,然后用户根据这个IP地址找到相应的网站,从而访问到域名对应的网站,通过主机名获取到主机名对应IP地址的过程叫作域名解析。
DNS协议建立在UDP协议之上,在某些情况下可以切换到TCP,使用端口号53,是一种客户/服务器服务模式。
什么时候会使用到TCP协议:
1.当解析器发出一个request后,返回的response中的tc删节标志比特位被置1时,说明反馈报文因为超长而有删节。这是因为UDP的报文最大长度为512字节。解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。既然TCP能将data sream 分成多个segment,他就能用更多的segment来传送任意长度的数据。UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。
2.当一个与的辅助域名服务器启动时,将从该域的主域名服务器primary DNS sever执行区域传送。除此之外,辅域名服务器也会定时(一般时3小时)向PDS进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个request或response多得多。
3.DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
DNS主要还是使用UDP,解析器还是服务端都必须自己处理重传和超时。
域:
域是逻辑上的概念,再出说实话瓜分互联网的时候,Internet组织将世界上的计算机划分为若干个大类,如com、gov、org、net、com、edu、cn、us等
每一个大类我们称为一个域
在每个大类里面划分出比较小一点的,成为子域,域是可以嵌套的,大域包含小域,小域可以包含更小的域
域名:
在每个域里面都有很多主机,每个主机都有一个主机名,我们在这个主机名后面冠上主机所在域的名称成为该主机在Internet网络上的域名。
域名结构:
域名是一个树状层次结果,联机分布式数据库系统,最高的根域名服务器维护最高级别域名服务器记录,后者维护下一级域名服务器的记录。
对于每一级域名长度的限制是63字符,域名总长度则不能超过253个字节。
www.baidu.com叫做一个FQDN(Fully qualified domain name)即完全资格域名,在互联网上唯一标识一台服务器,而FQDN到IP的转换叫做正向解析,IP到FQDN的转换叫做反向解析。反向解析的作用主要是解决邮件服务器拒绝垃圾邮件的,因为在互联网中多个FQDN可以指向同一个IP所以通过IP去找FQDN在互联网上是不现实的,这样就可以使用一个随意的IP地址伪装成特定的FQDN,如果某IP发来的邮件与其注册的域名正、反向解析并不匹配,那么邮件服务器会把此邮件定义为垃圾邮件来处理。
在一个完整的FQDN当中一共分为四个部分:主机名 . 二级域名 . 一级域名 . ,最后一个点代表根服务器。根域名服务器顾名思义就是以它为起始进行查询,它知道每一个顶级域名服务器的地址,每一个顶级域名服务器知道其所管辖的二级域名服务器的地址,每一个二级域名服务器知道其管辖的每一个主机的地址,这个样经过层层迭代就可以确定一个FQDN的IP地址,然后前段DNS服务器将查询后的最终结果一次返回给客户端这就叫做递归查询。
域名服务器:负责名字到地址的解析。域名服务器程序在专设的节点上运行,运行改程序的及其称为域名服务器
根据域名结果可以把这些域名服务器划分为以下四种类型:
(1) 根域名服务器
(2) 顶级域名服务器
(3) 权威域名服务器
(4) 本地域名服务器
DNS的管理是分布的,当一个域名服务器不包含解析器所请求的信息时,必须向其他域名服务器进行询问。
在实际的使用中,并不要求每个本地域名服务器都知道如何和其他域名服务器进行联系,但是每个域名服务器都必须知道如何和根域名服务器进行通信。根域名服务器通常用来管辖顶级域名(如com,net,cn,jp等),他知道所有授权的二级域名服务器的域名和IP地址,二级域名服务器又知道三级域名服务器。。。每个参与域名系统的主机都必须在授权域名服务器处注册登记,一般,就是其本地ISP的域名服务器。
1. 权威DNS:
权威DNS是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权ABC.COM的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权传授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器。平时我们解析域名的结果都源自权威DNS。
2. 递归DNS:
负责接受用户对任意域名查询,并返回结果给用户。递归DNS可以缓存结果以避免重复向上查询。我们平时使用最多的就是这类DNS,他对公众开放服务,一般由网络运营商提供,大家都可以架递归DNS提供服务。递归DNS一定要有可靠的互联网连接才可使用。
3. 转发DNS
负责接受用户查询,并返回结果给用户。但这个结果不是按表中的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。他主要使用在没有直接的互联网连接,但是可以连接到一个递归DNS那里,这时使用转发DNS就比较合适。缺点:直接受递归DNS影响,服务品质差。
4. HTTDNS
DNS服务器在用于网络请求时,将域名转为IP地址。传统的基于UDP协议的公共DNS服务极易发生DNS劫持,从而造成安全问题。HttpDNS服务则是基于HTTP协议自建DNS服务,或者选择更加可靠的DNS服务提供商来完成DNS服务,以降低发生安全问题的风险。HttpDns还可以为精准调度提供支持。
如果根据DNS服务器管理的区域地址数据的来源不同,DNS 系统可以分为不同的类型。在同一台 DNS服务器中,相对于不同的区域来说,也拥有不同的身份。常见的几种类型如下
· 主域名服务器:维护某一个特定 DNS 区域的地址数据库,对其中的解析记录具有自主控制权,是指定区域中唯一存在的权威服务器、官方服务器。
· 从域名服务器:与主域名服务器提供完全相同的 DNS 解析服务,通常用于 DNS 服务器的热备份。对客户机来说,无论使用主域名服务器还是从域名服务器,查询的结果都一样的。关键区别在于,从域名服务器提供的解析结果不是由自己决定的, 而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置, 以便服务器能自动同步区域的地址数据库。
· 缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定其他 DNS 服务器作为解析来源。
DNS工作原理
DNS的工作模式:
递归解析:
DNS服务器收到一个域名解析请求时,如果所要检索的资源记录不在本地,DNS服务器江河自己的上一层服务器交互,获得最终答案,并将其返回给客户。
迭代解析:
DNS服务器收到解析请求首先在本地的数据库中查找是否有相应的资源记录,如果没有,则向客户提供另外一个DNS服务器的地址,客户负责把解析请求发送给新的DNS服务器地址。
Dns查询过程:
- 当客户机发出查询请求时,首先查看本地计算机缓存中是否存在。如果本地无法获取查询信息,则将查询信息发送给本地服务器。
- 首先客户机将查询请求发送给本地服务器,本地服务器收到后,首先在该服务器管理的区域的记录中查找,如果不存在,则在该DNS服务器的缓存中查找。
- 如果还是找不到,本地服务器将请求发送给根域名服务器
- 域名服务器解析客户机请求的耿宇部分,他将他下属的相关顶级域名服务器的IP地址返回给本地DNS服务器
- 本地DNS请求顶级域名服务器,再进行迭代操作,最后得到查询目标的IP地址
- 本地DNS将查询到的目标IP地址返回给客户机
- 客户机利用本地DNS查询得到的IP地址对目标主机进行访问。
- 当在浏览器中输入URL时,浏览器会先检查自己的缓存是否有域名IP的映射关系,有则直接使用IP进行通信;
- 如浏览器没有缓存,则操作系统检查本地Hosts文件是否有域名IP的映射关系,有则使用IP进行通信;
- 如果hosts没有这个域名的映射,则查找本地DNS解析器缓存是否有映射关系,有则直接返回完成域名解析;
- 如果还未找到映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,也就是常称的本地DNS服务器,如果服务器已缓存了映射关系,则使用这个IP地址映射返回完成域名解析,此时解析不具有权威性;
- 如果本地DNS服务器缓存已经失效,进行递归查询。
DNS常见的记录及作用
DNS记录类型
域名和IP之间的对应关系,称为“记录”(record)。根据记录使用的目的不同,又分为不同的类型,常见的DNS记录类型如下:
SOA:(start of Authority),起始授权记录;一个区域解析库有且仅能有一个SOA记录,而且必需为解析库的第一条记录。
A:地址记录(Address),返回域名指向的IP地址
NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
MX:有键记录(Mail exchange),返回接收电子邮件的服务器地址。
CNAME:规范名字记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。
PTR:逆向查询记录(Pointer Record),只用于IP查询域名
资源记录定义的格式:
记录一条域名信息映射关系,称之为资源记录(RR)。
当我们查询域名www.baidu.com的时候,查询结果得到的资源记录结构体中有如下数据:
1、TTL,生存周期,是递归服务器会在缓存中保存该资源记录的时长,即客户端的到解析结果的缓存时长,可从全局继承 。
2、网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。
3、type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。
4、rdata是资源记录数据,就是域名关联的信息数据。
SOA记录:
name: 当前区域的名字,例如“sangfor.com.”;
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如admin.sangfor.com;
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)
例如:
sangfor.com. 86400 IN SOA ns.sangfor.com. nsadmin.sangfor.com. (2020032201 ;序列号 2H ;刷新时间 10M ;重试时间 1W ;过期时间 1D ;否定答案的TTL值)
A记录:
name: 某主机的FQDN,例如www.sangfor.com.
value: 主机名对应主机的IP地址;
例如:
www.sangfor.com. IN A 1.1.1.2
mx1.sangfor.com. IN A 1.1.1.3
mx2.sangfor.com. IN A 1.1.1.3
注意:
*.sangfor.com. IN A 1.1.1.4
Sangfor.com. IN A 1.1.1.4
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;
NS记录:
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.sangfor.com.;
注意:一个区域可以有多个NS记录;
例如:
sangfor.com. IN NS ns1.sangfor.com.
sangfor.com. IN NS ns2.sangfor.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略;
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
MX记录:
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名;
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
CNAME记录:
name: 别名的FQDN
value: 正工名字的FQDN;
例如:
web.sangfor.com. IN CNAME www.sangfor.com
Linux下DNS相关配置
正向解析:
[root@localhost ~]# vim /etc/named.conf主配置文件
Vim /var/named/named.baidu.com
测试结果:
反向解析:
测试结果:
区域传送:
(1) 全区域传送:复制整个区域文件
主DNS服务器为192.168.10.133:
[root@localhost ~]# vim /etc/named.conf
添加allow-transfer { 172.24.8.129; }; 从DNS的ip地址
测试结果: