讲清楚,说明白!DNS域名解析服务实现原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讲清楚,说明白!DNS域名解析服务实现原理相关的知识,希望对你有一定的参考价值。

(一)了解DNS整个工作流程
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便的访问到网站的一种服务。IP地址是网络上表示站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作有DNS服务器完成。
域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等。说得简单点就是将好记的域名解析成IP,服务器由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
假设我们现在有一台PC客户端需要访问百度服务器www.baidu.com 。我们知道www.baidu.com 代表的是baidu.com域中的一台主机服务器,而baidu.com域中除了存在提供Web服务的服务器,还可能会存在提供文件传输的ftp.baidu.com,提供邮件服务的mail.baidu.com等等,它们都是baidu.com域中的一台台主机。然而这台PC客户端并不知道www.baidu.com 的IP地址是多少,但是如果这台PC客户端需要和远端的www.baidu.com 服务器进行通信,它必须需要通过本地的DNS服务器获取。比如这台PC在深圳,那么它会通过拨号上网连接到深圳电信DNS服务器发出查询请求:“请问你是否知道www.baidu.com 主机的IP地址是多少?”此时深圳电信DNS服务器并不能告诉这台PC客户端具体的IP地址是多少,而在全球世界各地存在着13台DNS服务器,它们称之为根域DNS服务器,为全世界提供根域查询的服务。此时深圳电信DNS服务器便会通过算法查询到最近的一台根域DNS服务器,并发出查询请求:“请问你是否知道www.baidu.com 主机的IP地址是多少?”此时根域DNS服务器回复:“查询的信息太精确,无法回答,但是你查询的com域是注册在我根域中的域名,可以去向com查询具体结果。”这时候深圳电信DNS服务器会向com顶级域中的DNS服务器发出查询请求:“请问你是否知道www.baidu.com 主机的IP地址是多少?”此时com域的DNS服务器会回复:“查询的信息太精确,无法回答,但是你查询的baidu域是注册在我服务器上的,可以去向baidu域查询具体结果。”此时深圳电信会向baidu域的DNS服务器发出查询请求:“请问你是否知道www.baidu.com 主机的IP地址是多少?”由于www.baidu.com 主机的IP地址是由DNS.baidu.com服务器维护的,所以baidu域的DNS服务器会回复:“知道,查询的IP地址是xxx”。此时深圳电信DNS便知道了www.baidu.com 服务器的IP地址,它会将结果告诉这台PC客户端,所以最后这台PC机就可以使用查询到的IP地址和www.baidu.com 服务器进行通信了。其中PC机向深圳电信DNS发出查询请求,就必须要得到深圳电信DNS服务器的返回结果,深圳电信DNS经过一层层的查询最后返回给客户端PC机得到的结果,这种有深圳电信DNS查询结果返回给客户端查询方式称为“递归查询”;但是深圳电信DNS在向根域DNS服务器查询时,根域DNS服务器知道结果就返回给询问方,不知道结果就不回答或者只是指引其向下查询的路径,后面的顶级com域DNS服务器也是按照这个方式回应深圳电信DNS查询,深圳DNS主机通过这种方式查询到结果的方式称为“迭代查询”。
技术图片
并不是所有的本地DNS服务器都会执行递归查询的请求,有时候地区的运营商可能只会对自己所管理的网段用户提供递归查询的操作以此来提高服务效率。例如有用户带着笔记本电脑从深圳到北京出差,用户的IP地址使用网络自动获取的北京运营商提供的IP地址,但是用户笔记本的DNS服务器的地址仍然使用深圳地区运营商IP地址,这时候用户就会发现QQ,微信,钉钉等通讯软件可以正常的使用,但网页也只有深圳地区极个别网页能打开,其他的网页都显示无法打开的情况,这时候其实最好的办法就是也将DNS服务器的地址也设置为自动获取即可,其实在互联网中也存在着一些DNS服务器,对全球的主机查询都提供递归查询请求的服务,例如8.8.8.8,4.4.4.4,114.114.114.114等DNS服务器主机,有时候我们也可以很好的利用起来。
技术图片


(二)配置unbound作为DNS服务器
(2.1)我们使用unbound软件来进行DNS服务的配置,首先在vms001主机上安装unbound软件。
技术图片
技术图片
(2.2)在我们的系统中通常会使用如下的DNS服务系统架构,有两台DNS服务器,分别是主DNS:master和辅DNS:slave,其中主DNS服务器上的数据都会定期同步到辅DNS上,在进行主辅信息同步的时候使用的是tcp的53端口;而客户端一般会设置两个DNS地址用于查询请求,当客户端PC向主DNS或者辅DNS查询的时候使用的是UDP的53端口。所以我们一般也是要在防火墙中设置开放DNS服务。
技术图片
(2.3)进入到/etc/unbound/目录中,编辑unbound.conf配置文件。
技术图片
(2.4)整个unbound.conf的框架主要包括server,local-zone,remote-control,stub-zone,forward-zone五个部分。
技术图片
(2.5)在unbound.conf配置文件中的server框架下有一个参数为interface,需要进行设置,将其服务对外开放。
技术图片
技术图片
(2.6)但是我们设置interface为0.0.0.0后发现unbound服务重启失败了,这是由于我们的系统中有虚拟化环境存在,装过了虚拟化环境后默认会有一个dnsmasq存在,这也是一个DNS服务,也是运行监听在virbr0网卡的53端口。而我们设置interface时指定运行在所有网卡上,这和虚拟化环境中的dnsmasq产生了冲突,才会导致我们配置完后服务重启失败。
技术图片
技术图片
(2.7)我们可以将interface设置为本机IP地址192.168.26.101,这样DNS服务就可以正常的重启了。
技术图片
技术图片
(2.8)接着在server框架中我们设置access-control即unbound服务器的访问控制列表也是允许所有主机可以访问。
技术图片
(2.9)然后在server框架中我们设置username的值为空即可,一般username是做认证使用的。
技术图片
(2.10)在server框架中我们常用到的配置就包含interface、access-control和username这三个。接下来include: /etc/unbound/local.d/*.conf表明在unbound.conf配置文件默认是会包含/etc/unbound/local.d/目录下的所有后缀为conf的文件的,一般我们的local-zone的信息就是通过这样的方式提供的。配置完成后记得需要将unbound服务重启一下。
技术图片
技术图片
技术图片
(2.11)配置完成后我们可以检查一下配置是否有错误:# unbound-checkconf
技术图片
(2.12)我们使用vms002主机进行测试,我们将vms002主机的DNS服务器IP地址设置为192.168.26.101
技术图片
技术图片
技术图片
(2.13)接着我们在vms002主机上进行测试。
技术图片
(2.14)我们继续对local-zone中的存在于/etc/unbound/local.d/目录下的aa.conf的配置文件中第二行进行配置。SOA(Start of Authority)表示验证的开始。
技术图片
技术图片
(2.15)最后我们将vms001主机的DNS服务器的IP地址也指向192.168.26.101,并重启网络服务。至此我们便完成了配置unbound作为DNS服务器。
技术图片
技术图片


(三)配置仅转发DNS服务器
有时候我们在家里上网的时候,会使用家庭版的路由器,这个时候家庭路由器通过WAN口将PC客户端的请求和互联网进行连接,家庭PC地址会设置在一个网段内,例如192.168.26.0网段,PC的IP地址为192.168.26.10,网关的地址为192.168.26.1。我们发现家里的路由器中并没有配置DNS的相关local-zone的条目,但是我们PC客户端配置了DNS指向这个家庭路由器后仍然可以为我们解析IP地址。这种类型其实就是一种仅转发DNS服务器,当它接收到客户端的域名解析的请求时,它是不会做解析的,它会连接到当地的互联网运营商的DNS服务器,将接收到请求转发到互联网运营商的DNS服务器处理。
技术图片
(3.1)我们将vms002主机配置为仅转发DNS服务器,安装unbound软件。
技术图片
(3.2)在vms002主机上的/etc/unbound/目录下,配置unbound.conf文件,设置vms002主机监听IP地址为192.168.26.102的53端口。
技术图片
(3.3)设置access-control允许所有主机进行查询的请求。
技术图片
(3.4)然后在我们设置username的值为空即可,一般username是做认证使用的。
技术图片
(3.5)进入到/etc/unbound/目录中,找到unbound.conf文件,使用forward-zone的模板信息,接着我们进入到/etc/unbound/local.d/目录中,创建一个aa.conf的配置文件。
技术图片
技术图片
(3.6)在vms002主机的aa.conf配置文件中设置转发的域名为“example.com”,表示当外部客户端只有在请求解析example.com域名时才做转发服务,其他情况例如查询“baidu.com”,则不作任何的操作。转发的地址设置为vms001主机地址:192.168.26.101
技术图片
(3.7)在vms002主机上需要设置防火墙规则,允许DNS服务的通信,并将设置在防火墙中写入持久态。并将unbound服务启动起来。
技术图片
技术图片
(3.8)接着我们启动一台测试DNS效果的DNSClient客户端,设置IP地址为192.168.26.23
技术图片
技术图片
(3.9)然后我们在vms001主机和vms002主机执行抓包命令,在DNSClient主机执行请求解析的命令。可以看到vms001和vms002主机都有如下的抓包结果(图3-13)
技术图片
技术图片
(3.10)以vms002提取的抓包结果为例,首先DNSClient会向vms002主机询问example.com的IP地址是多少,vms002主机会将询问转发到vms001主机进行查询,vms001主机回复了vms002主机的查询结果为192.168.26.101,此时因为有DNSKEY的问题,所以vms002主机并不信任vms001主机的回复结果。
技术图片
(3.11)此时我们需要取消vms002主机向vms001主机回复结果后的密钥验证步骤,可以进入vms001主机和vms002主机的/etc/unbound/目录,编辑unbound.conf配置文件。
技术图片
技术图片
(3.12)此时vms002主机作为一台仅转发的DNS服务器,便实现了正常的解析DNSClient客户端的查询请求了。
技术图片
(3.13)如果我们希望这台仅转发DNS服务器可以解析所有的主机名解析请求,那么就可以将name参数设置为“.”即可,并将转发的DNS地址设置为一台已经配置好DNS服务的主机上,这样就可以建立起一个实用的仅转发DNS服务器了。
技术图片
技术图片
小技巧:有时候我们也可以使用# dig +trace www.baidu.com 命令查询DNS地址解析的过程。
技术图片

以上是关于讲清楚,说明白!DNS域名解析服务实现原理的主要内容,如果未能解决你的问题,请参考以下文章

DNS解析原理

dns相关内容

Linux——DNS(正向解析+反向解析+多域配置+主从配置)

多区域 DNS 服务,子域授权,缓存 DNS及Split 分离解析的原理和实现

转:扫盲 DNS 原理,以及“域名劫持”和“域名欺骗/域名污染”

实现DNS主从域,http虚拟主机跟用户