【讲清楚,说明白!】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地址解析的过程。

原文地址:https://blog.51cto.com/13613726/2435842

时间: 2024-10-11 23:42:15

【讲清楚,说明白!】DNS域名解析服务实现原理的相关文章

【讲清楚,说明白!】DNS域名解析服务实现原理之二--智能解析

目录:(一)DNS介绍(二)DNS服务器部署(三)DNS域名解析(四)DNS容灾(五)DNS智能解析 (一)DNS介绍(1.1)DNS是一个域名系统,在互联网环境中为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.类似于生活中的114服务,可以通过人名找到电话号码,也可以通过电话号码找到人名(生活中没有那么准确的原因是人名有重名,而域名时全世界唯一的).其中DNS协议运行在UDP协议之上,使用端口号53.(1.2)在我们的互联网络

服务基础篇       dns 域名解析服务  

实验环境   :     redhat7.2       redhat 6.7      redhat    6.7 搭建主从DNS服务 :         主服务器ip  192.168.1.144     从服务器ip192.168.1.120 客户机   192.168.1.110 服务安装包 修改主配置文件named.conf 监听端口开放 允许任何主机访问 修改named.rfc1912.zone 定义正反向解析区域  ,   服务模式为master  且允许从dns服务器同步数据 修

Linux系统安装DNS域名解析服务

在linux系统下安装DNS域名解析服务 步骤如下: 1>查看挂在镜像位置 2>查看光盘是否挂载 3>查看需要挂在的位置 4>进行挂载 [[email protected] mnt]# mount /dev/sr0 /mnt 5>进入挂载的文件夹进行安装 使用rpm命令过滤已bind开头的软件 安装以bind开头的软件 过滤以bind开头的软件 注:默认已安装bind-utils和bind-libs,所以只需要安装bind和bind-chroot. 6>配置DNS的地址

Linux网络服务05——DNS域名解析服务(一)

Linux网络服务05--DNS域名解析服务(一) 一.DNS系统的作用 1.DNS服务器概述 整个Internet大家庭中连接了数以亿计的服务器.个人主机,其中大部的网站.邮件服务等服务器都使用了域名形式的地址,如crushlinux.google.com.mail.163.com等.很显然这种地址形式要比使用64.233.189.147.202.108.33.74的IP地址形式更加直观,更加容易被用户记住. FQDN格式(完整域名格式):在常见域名后添加"."(根域).例如:cru

【初级篇】Linux下部署DNS域名解析服务

Linux下部署DNS域名解析服务 1.          实验需求: 1)     使用RPM包安装bind服务 2) 实现配置正向解析域名,反向解析IP地址. 3)搭建从服务器,实现配置和主服务器实时同步,相互提供冗余备份. 2.          实验环境: Linux服务器系统版本:Red Hat Enterprise Linux 6.5(主)   IP:192.168.10.20 Linux服务器系统版本:Red Hat Enterprise Linux 6.5(从)   IP:192

DNS域名解析服务

第四章 DNS域名解析服务 搭建缓存域名服务器 具体步骤: 1. 插入安装光盘并挂载,然后安装bind软件包及相关的软件包.如图所示: 2. 编辑主配置文件. 主配置文件named.conf通常位于/etc/目录下,如果安装了bind-chroot软件包,则主配置文件默认位于/var/named/chroot/etc/目录下,需要用户手工建立.在named.conf文件中,主要包括全局配置.区域配置两个部分,每一条配置记录的行尾以分号":"表示结束,以"#"号或&q

Redhat6.5中搭建DNS域名解析服务

DNS系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名与IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务.下面我将在Redhat6.5中搭建DNS域名解析服务,包括正向解析,反向解析.正向解析1.安装bind软件包,bind软件包提供了域名服务的主要程序和相关文件.2.bind安装完成,可以使用rpm -qc bind显示bind软件包安装的配置文件3.编辑主配置文件,修改监听地址为提供DNS服务的主机IP地址,我本次实验为本机IP地址,allow-query改成

DNS域名解析服务(正向解析、反向解析)

介 绍 Internet发展至今,在网的服务器和个人主机数量庞大,每个用户通过记忆IP地址访问网络资源并不现实了. 目前大家访问互联网进行上网浏览信息时,正常是通过域名进行访问(例如:www.baidu.com),而实际上网络中的计算机之间只能基于IP地址来相互访问识别对方的身份,而且要想在互联网中传输数据,也必须基于外网的IP地址来完成.这里就出现了DNS域名系统技术来帮我们简化此过程,以此来降低用户访问网络资源的门槛.为什么呢?因为它相对于IP地址,域名更容易被理解并记忆,这样大家便可以通过

DNS域名解析服务(bind)

BIND简介: 现在使用最为广泛的DNS服务器软件是BIND(Berkeley Internet Name Domain),最早有伯克利大学的一名学生编写 BIND服务的名称称之为named DNS默认使用UDP.TCP协议,使用端口为53(domain),953(mdc,远程控制使用) DNS(Domain Name System,域名系统) 用于管理和解析域名与IP地址对应关系的技术. 简单来说,就是能够接受用户输入的域名或IP地址,然后自动查找与之匹配(或者说具有映射关系)的IP地址或域名