DNS解析流程(全过程)

相信大家在平时工作中都离不开DNS解析,DNS解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。

下面这张图,详细说明了一个DNS域名解析的全过程:

一、什么是DNS

DNS,全称Domain Name System,域名系统,是一个记录域名和Ip地址相互映射的一个系统,能够将用户访问互联网时使用的域名地址转换成对应的IP地址,而不用使用者去记住数量众多的IP地址。通过域名得到域名对应的IP地址的过程被称为域名解析。DNS运行于UDP协议之上,使用的端口为53。

1.1域名结构解析

如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本都是二级域名,比如http://baidu.com、http://taobao.com等等二级域名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名,这里不多赘述。总体概括来说域名是由整体到局部的机制结构。

1.2DNS解析流程

如上图所示,我们将详细阐述DNS解析流程:

1、首先客户端位置是一台电脑或手机,在打开浏览器以后,比如输入http://www.zdns.cn的域名,它首先是由浏览器发起一个DNS解析请求,如果本地缓存服务器中找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求http://www.zdns.cn的时候,根服务器就会返回.cn服务器的位置信息。

2、递归服务器拿到.cn的权威服务器地址以后,就会寻问cn的权威服务器,知不知道http://www.zdns.cn的位置。这个时候cn权威服务器查找并返回http://zdns.cn服务器的地址。

3、继续向http://zdns.cn的权威服务器去查询这个地址,由http://zdns.cn的服务器给出了地址:202.173.11.10

4、最终才能进行http的链接,顺利访问网站。

5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把http://www.zdns.cn的A记录返回给客户端就可以了。

(1)DNS资源记录

记录一条域名信息映射关系,称之为资源记录(RR)。

当我们查询域名http://www.zdns.cn的时候,查询结果得到的资源记录结构体中有如下数据:

  • 1、TTL,就是生存周期,是递归服务器会在缓存中保存该资源记录的时长。
  • 2、网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。
  • 3、type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。
  • 4、rdata是资源记录数据,就是域名关联的信息数据。

小知识:

下面我们列出几条常用的资源记录类型:

  • A :Address地址, IPv4
  • AAAA:Address地址 IPv6
  • NS :Name Server域名服务器
  • SOA:Start of Authority起始授权机构
  • MX:Mail Exchanger邮件交换
  • CNAME:Canonical Name规范名
  • PTR:Pointer指针
  • TXT:Text
  • SRV:Service

(2)DNS服务器的分类

常见的DNS服务器就是两种:权威解析服务器和递归解析服务器。递归解析服务器也可以叫做localDNS。

(3)权威解析服务器

DNS权威服务器保存着域名空间中部分区域的数据。如果DNS服务器负责管辖一个或多个区域时,称此DNS服务器为这些区域的权威服务器。

根权威DNS或者二级权威服务器中的资源记录标记被指定为区域权威服务器的DNS服务器。通过资源记录中列出服务器,其他服务器就认为它是该区域的权威服务器。这意味着在 NS 资源记录中指定的任何服务器都被其他服务器当作权威的来源,并且能肯定应答区域内所含名称的查询。

(4)递归服务器

递归服务器在正常情况下,初始的时候里面没有任何域名解析数据,里面所有的域名解析数据都来自于它到权威解析服务器的查询结果,一旦查询完毕,递归服务器就会根据TTL时间在本地形成一条缓存记录,并为用户提供DNS解析的查询服务,这是递归服务器的功能。

二、DNS实现原理

2.1DNS域名

DNS在网络中存在着数量众多的域名,如.com、.org等,而域名系统中是以层级树状结构划分域名的,类似于下图:

位于域名系统的顶端为根域名,而后为一级域名.net、.com、.org等,再往下则为二级域名,如.qq、.ibm等。而位于域名系统最底层的为主机名,如www,finance等。一个合法的域名格式,应遵循FQDN(Full Qualified Domain Name)格式,以域名系统的级别从低到高,从左往右编写,如:www.qq.net.、www.sina.org.。

2.2DNS的查询方式

DNS的查询方式有两种,分别为递归查询(recursion)和迭代查询(iteration)。

递归查询:客户端发起一个DNS解析请求,若本地DNS服务器若不能为客户端直接解析域名,则域名服务器会代替客户端(下级服务器)向域名系统中的各分支的上下级服务器进行递归查询,直到有服务器响应回答了该请求后,将该请求结果返回客户端。在此期间,客户端将一直处于等待状态。

迭代查询:客户端(下级服务器)发起一个DNS解析请求后,若上级DNS服务器并不能直接提供该DNS的解析结果,则该上级DNS服务器会告知客户端(下级服务器)另一个可能查询到该DNS解析结果的DNS服务器IP,客户端(下级服务器)再次向这个DNS服务器发起解析请求,如此类推,直到查询到对应的结果为止。

通常递归查询这种方式用于PC机与本地DNS服务器之间的查询,而递归查询则多用于DNS服务器之间的查询,如下图:

2.3DNS服务器的类型

DNS服务器的类型可以分为:主名称服务器、辅助名称服务器和缓存名称服务器。主名称服务器至少负责解析一个域内的域名,维护所负责解析的域的数据库,可对该域数据库进行读写操作;辅助名称服务器则负责从主名称服务器或其他辅助名称服务器中复制相关解析库,为主名称服务器缓解解析压力;而缓存名称服务器则不负责域名解析,仅仅作为缓存,加快解析速度。

2.4DNS的正向解析与反向解析

在DNS服务器中逻辑上存在着两个区域,一个是正向解析区域,另一个是反向解析区域。正向解析区域即我们通常所说的域名解析,而反向解析指的是IP反向解析,即通过查询IP地址的PTR记录来得到该IP地址所指向的域名记录。而PTR记录为邮件交换记录的一种,另一种为A记录。A记录解析域名到IP地址,而PTR记录则负责解析IP地址到域名。

三、DNS服务的配置文件

在开始部署搭建DNS主从服务器前,我们先来学习下与DNS配置相关的配置文件。在Centos 系统中与DNS服务相关的配置文件包括:/etc/named.conf主配置文件、/etc/named.rfc1912.zones区域管理文件和/var/named/目录下的区域数据库文件。主配置文件/etc/named.conf和/etc/named.rfc1912.zones设置了DNS服务器能够管理哪些区域并且指定了这些区域对应的区域数据文件的存放路径和名称。

3.1/etc/named.conf

主配置文件包含着三个段落,分别为全局配置段、日志配置段和区域配置段。如下示例:

options {
        listen-on port 53 { 127.0.0.1; }; #设置监控能与外部主机通信的IP地址
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";  #指定区域数据文件的存放目录
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; };  #限制查询的来源为本地
        recursion yes;  #是否开启递归查询
        dnssec-enable yes;  #学习时建议关闭
        dnssec-validation yes;  #学习时建议关闭
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {  #根区域,包含着多个DNS顶级域信息
        type hint; 
        file "named.ca";
};
include "/etc/named.rfc1912.zones";  #把区域管理文件的内容包含进此文件
include "/etc/named.root.key";

在编辑完成主配置文件后,可使用命令named-checkconf [/etc/named.conf]对主配置文件进行语法检查。

3.2/etc/named.rfc1912.zones

此文件为区域管理文件,用以保存主机负责解析或转发的区域,为/etc/named.conf所调用。其常见内容如下:

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};
zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
zone "magedu.com" IN {
        type master;
        file "magedu.zone";
        allow-update { none; };
};

其中zone名称以in-addr.apra结尾的为反向解析区域,其命名格式为IP网段的反写.in-addr.apra,剩下的zone则为正向解析区域。其中区域内的可设置选项包括:

type:设置此区域的类型,包括master(主名称服务器)、slave(辅助名称服务器)、forward(转发域)、hint(根域名服务器);

ile FILENAME:指定区域数据文件的相对路径,目录路径由主配置文件/etc/named.conf所指定;
allow-update:是否允许客户主机或服务器自行更新DNS记录,上述为不允许更新DNS记录;

3.3区域数据文件

区域数据文件存放在/var/named目录下,文件大体分为正向解析区域文件和反向解析区域文件,通常该文件内容如下:

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     localhost.

第一行为设定TTL的值,定义区域数据文件里面的各项记录的宏;第二行为SOA起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;上述@表示当前区域的名称;往下第三到第七行定义了服务器同步信息的相关设置,其含义如下:

serial:表示配置版本的序列号,通常情况下,序列号sn遵循“年+月+日+编号”的格式,在修改了区域文件后需要手动修改序列号;
refresh:设置DNS服务器进行同步的间隔时间,只针对本区域文件总定义的NS记录的所有主机;
retry:表示同步更新失败之后,进行重试的间隔时间;
expire:表示同步更新失败之后,多长时间清楚对应的记录,又称过期时间;
minimum:指高速缓存否定回答的存活时间;

往下就是针对域名解析的设置,按照类型可划分为以下几类:

NS记录:表示当前区域中的某个DNS服务器的名字,一个区域可有多个NS记录,如:

magedu.com. 86400 IN NS ns1.magedue.com.
magedu.com. 86400 IN NS ns2.magedue.com.

MX记录:表示当前区域的某个邮件交换器的主机名;MX记录可以有多个,但每个MX记录之间应有一个数字表示其优先级,如:

magedu.com. IN  MX  10  mx1.magedu.com.
magedu.com. IN  MX  20  mx1.magedu.com.

A记录:表示主机名对应的IP地址,一个主机名可对应多个IP地址,如:

www.magedu.com IN   A   1.1.1.1
www.magedu.com IN   A   1.1.1.2
bbs.magedu.com IN   A   1.1.1.1

AAAA记录:ipv6的A记录;(暂不常用)

PTR记录:反向地址解析记录,用于将IP地址反解析成域名,常见于反向解析区域文件中,如:

80      IN      PTR     www.magedu.com.
70      IN      PTR     www.magedu..com.

CNAME记录:域名的别名记录,用于记录某个主机域名的别名,如:

web.magedu.com IN CNAME www.magedu.com.

在编辑完成相应的区域数据文件后,可使用named-checkzone DOMAIN ZONE_FILE命令检查相应的区域数据文件。

四、使用实例

4.1创建正向解析区域文件

首先编辑主配置文件/etc/named.conf中的全局配置,设置监听服务器IP地址及允许DNS查询请求等设置:

[root@localhost named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query     { any; };
recursion no;
dnssec-enable no;
dnssec-validation no;

然后编辑/etc/named.rfc1912.zones文件,设置正向区域:

[root@localhost named]# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
        allow-update { none; };
};

随后在/var/named/目录下创建区域数据文件magedu.com.zone:

[root@localhost named]# vim /var/named/magedu.com.zone
$TTL 3600
@       IN      SOA     ns.magedu.com.  10XXXXXX83.qq.com. (
        20180421
        1D
        1H
        1W
        3H
)
@       IN      NS      ns.magedu.com.
magedu.com.     IN      MX      10      mx1.magedu.com.
magedu.com.     IN      MX      20      mx2.magedu.com.
mx1     IN      A       192.168.0.1
mx2     IN      A       192.168.0.2
ns      IN      A       192.168.0.188
qq      IN      A       114.114.114.114
www     IN      A       199.247.21.135
web     IN      CNAME   www

最后检查相关配置文件是否有错误:

[root@localhost named]# named-checkconf /etc/named.conf 
[root@localhost named]# named-checkzone magedu.com /var/named/magedu.com.zone 
zone magedu.com/IN: loaded serial 20180421
OK

如没有报错,重启加载启动named服务:

[root@localhost named]# systemctl restart named

在其他主机上验证解析结果:

[root@localhost ~]# nslookup
> server 192.168.0.188
Default server: 192.168.0.188
Address: 192.168.0.188#53
> set q=A     
> www.magedu.com
Server:     192.168.0.188
Address:    192.168.0.188#53

Name: www.magedu.com
Address: 199.247.21.135
> mx1.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53

Name: mx1.magedu.com
Address: 192.168.0.1
> web.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53

web.magedu.com canonical name = www.magedu.com.
Name: www.magedu.com
Address: 199.247.21.135
> qq.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53

Name: qq.magedu.com
Address: 114.114.114.114
> www.magedu.com
Server: 192.168.0.188
Address: 192.168.0.188#53

Name: www.magedu.com
Address: 199.247.21.135

解析成功。

4.2创建反向解析区域文件

在上述案例1的基础上,首先在/etc/named.rfc1912.zones中编辑添加反向区域:

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
        allow-update { none; };
};

然后在/var/named目录下生成反向区域文件192.168.0.zone:

[root@localhost named]# vim /var/named/192.168.0.zone
$TTL 3600
@       IN      SOA     ns.magedu.com.  10XXXXXXX3.qq.com. (
        20180421
        1D
        1H
        1W
        3H
)
@       IN      NS      ns.magedu.com.
ns      IN      A       192.168.0.188
1       IN      PTR     mx1.magdu.com.
2       IN      PTR     mx2.magdu.com.
188     IN      PTR     ns.magedu.com.

随后使用命令检查相应的配置文件:

[root@localhost named]# named-checkconf /etc/named.conf 
[root@localhost named]# named-checkconf /etc/named.rfc1912.zones 
[root@localhost named]# named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.zone 
zone 0.168.192.in-addr.arpa/IN: loaded serial 20180421
OK

如无报错,则重新启动named服务:

[root@localhost named]# systemctl restart named

在其他主机上测试结果:

[root@localhost ~]# nslookup 
> server 192.168.0.188
Default server: 192.168.0.188
Address: 192.168.0.188#53
> set q=NS   
> 192.168.0.1
Server:     192.168.0.188
Address:    192.168.0.188#53

1.0.168.192.in-addr.arpa name = mx1.magdu.com.
> 192.168.0.188
Server: 192.168.0.188
Address: 192.168.0.188#53

188.0.168.192.in-addr.arpa name = ns.magedu.com.
> 192.168.0.2
Server: 192.168.0.188
Address: 192.168.0.188#53

2.0.168.192.in-addr.arpa name = mx2.magdu.com.
>

反向解析成功。

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/76221.html

(0)
速盾高防cdn's avatar速盾高防cdn
上一篇 2024年5月19日 下午11:32
下一篇 2024年5月19日 下午11:34

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注