DNS服务器的基本原理详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS服务器的基本原理详解相关的知识,希望对你有一定的参考价值。

域名简介:使用tcp/udp协议,默认使用53端口号

           默认情况下,客户端发起的查询请求都是用UDP/53查询的。

           默认情况下,从从服务器到主服务器传输数据用的是TCP/53。

           tcp/953 :rndc监听到这个端口,远程域名服务控制器。

           全球唯一的,所有的域名都是以“.”(根)开始的。

顶级域名:

(1) 国家顶级域名(cn—中国、uk—英国、us—美国等) (2) 国际顶级域名(.int)

(3) 通用顶级域名(.com—商业组织、.edu—教育机构、.org—非赢利性组织、.gov—政府部门、.biz—公司或企业)

二级域名:

(1) 类别域名(ac—科研机构、com—商业组织、edu—教育机构、gov—政府部门、net—网络服务机构、org—各     种非赢利组织) (2) 行政域名(bj—北京、sh—上海、nm—内蒙等)

组织内域名:

当一个组织拥有一个域的管理权后,它可以决定是够需要进一步划分层次。例如:CERNET网络中心将“.edu”               域划分为多个三级域,将三级域名分配给各个大学与教育机构。同时某大学也可以决定是否将自己得到的三级域划   分为多个四级域,将四级域分配给下属部门或主机。

DNS服务器的基本原理详解_linux

在DNS服务器关系方面,只有上层DNS服务器知道下层服务器的位置,下层不知道上层位置。

查询过程:根域名服务器在全球的数量:逻辑上有13台,实际上有386台。

当客户端不知道DNS服务器位置,先查询计算机中的hosts文件,hosts文件中没有,查找本地DNS服务器的缓存(DNS服务器缓存由设置人员设置时间,最多为1天),缓存上没有,查找服务器数据文件,DNS服务器上的数据文件也没有,本地DNS服务器会直接请求根服务器,根服务器告诉你负责这个区域服务器的位置,然后,由请求的那个DNS服务器来查找,根服务器只告诉你该找那台服务器。直到查询到那个位置的DNS服务器,然后那个DNS服务器直接再交给管理查询客户端的那个DNS服务器!所以,配置DNS服务器要配置好根服务器的位置。

两种查询:

递归查询:本地请求,由我们所请求的DNS服务器(本地直接管理)直接返回的答案,叫权威答案。只需发送一次请求得到最终结果!!!

迭代查询:需要自己去发出n次查询才能得到结果的。

dns从数据存储来说是分布式的,从域名本身来说是树状结构。

dns工作在应用层,他是一个服务。

 

DNS服务器两种功能

 正向解析:从FQDN(全称域名)====>IP

       一个域名可以有多个IP

 反向解析:从IP===>FQDN

       一个IP可以有多个域名

DNS的高级功能,DNS轮循是指将相同的域名解析到不同的IP,随机使用其中某台主机的技术,该项技术可以智能的调整网站的访问量到不同服务器上,减轻网站服务器的压力,实现负载匀衡。

    正反向解析是完全不同的两颗解析树,不必在同一个服务器上,正反向区域记录也没必要完全对应

在DNS服务器的缓存表中,每一个对应关系都称为一个 记录“record”。而记录本身所实现的功能不同,我们称为记录类型,

常用六种资源记录(RR):

1.A(addres)记录:正向解析的记录,将域名转换成IP地址的记录

   A资源记录语法格式:完整主机名(FQDN)   IN   A   IP地址

2. 叫指针记录(PTR):反向解析的记录,将IP地址转换成域名的记录

这两类记录水火不相容,它们是不能放在同一个地方的。必须分开存放。

   PTR资源记录语法格式: IP地址      IN      PTR      主机名(FQDN)

3. SOA(起始授权机构):该记录表明DNS名称服务器是DNS域中的数据表的信息来源,该服务器是主机名字的管理者,创建新区域时,该资源记录自动创建,且是DNS数据库文件中的第一条记录。一个区域解析库有且仅有一个SOA记录,且必须为解析库的第一条记录

   SOA资源记录语法格式:

    区域名(当前)  记录类型SOA   主域名服务器(FQDN)  管理员邮件地址  (序列号 刷新间隔 重试间隔 过期间隔 TTL)

   SOA资源记录字段: 主域名服务器 :区域的主DNS服务器的FQDN

管理员:管理区域的负责人的电子邮件。在该电子邮件名称中使用英文句号“.”代替at符号“@”。

4. NS记录:是用来做授权的,向下授权。用于标识某一个区域内最高长官是谁,长官是谁。

在一个区域内只能有一个soa(最高长官),而ns可以有多个。

   NS资源记录语法格式:   区域名  IN  NS  完整域名(FQDN)

5.MX记录(邮件交换器):它规定了域名的邮件服务器要么处理,要么向前转发有关该域名的邮件.处理邮件是指将其传送给其地址所关联的个人,向前转发邮件是指通过SMTP协议将其传送给其最终目的地.为了防止邮递路由,MX记录除了邮件交换器的域名外还有一个特殊参数:优先级值.优先级值是个从0 到99的无符号整数,它给出邮件交换器的优先级别.,一般只出现在正向解析记录里面的。(数值越小,优先级越大)

MX记录记录了发送电子邮件时域名对应的服务器地址。电子邮件发送使用的是SMTP应用层协议。

例如要发送邮件到abc@qq.com的时候,其中的域名部分为qq.com,MX记录描述了发送电子邮件时应该发往那个服务器。

可以使用dig命令查询MX记录:dig qq.com mx

   MX资源记录语法格式:

      区域名      IN      MX      优先级(数字)      邮件服务器名称(FQDN)

6.CNME:别名记录,也被称为规范名字:这种记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“r0WSPFSx58.”(A记录)。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。 这两个别名的全称

   CNAME资源记录语法格式:  别名   IN   CNAME   主机名

区域与域:

域(domain):逻辑概念: 是一个专业术语 它是用来划分和管理一组客户端的.

区域(zone):物理概念。

子域授权:子域授权:其实就是将一个比较大的域再分割成小区域,每个小区域可以交由一组或多组服务器管理,这些服务器只解析其管辖范围内的域名,超出其范围的解析请求一般会转发给父域或直接转发给根域。

正向区域的子域授权:使用胶水记录(glue record),也就是在父域中添加一条NS记录和一条A记录即可。

DNS服务器类型

主DNS服务器(primary name server):它是特定域所有信息的权威性信息源。它从域管理员构造的本地磁盘文件中加载域信息,该文件(区文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。

辅助DNS服务器(secondary name server):它可从主服务器中复制一整套域信息。区文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为"区文件复制"。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。

高速缓存服务器(caching-only server):可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件,这或许是最常见的域名服务器配置。


转发服务器:是指当本DNs服务器无法对DNs客户端的解析请求进行本地解析时,可以允许本地DNs服务器转发DNS客户端发送的查询请求到其他的DNs服务器。此时本地DNs服务器又称为转发服务(不缓存数据)。

配置基本DNS服务器

一台域名服务器可以解析多个域名。.

在Linux中用来提供DNS服务的软件包叫"bind"-------名称服务器进程,安装后的这个进程叫"named",这个进程提供的协议叫"DNS"。

安装DNS需要的软件包-----------前两个是默认安装上的,使用yum安装。

bind-utils------客户端工具

bind-libs-------通用库

bind------主软件包

bind----chroot---伪根目录。

caching-nameserver-----提供主配置文件(named.conf)的模板

DNS文件

/etc/named.conf  --->bind进程的工作属性,以及区域定义。

/etc/rndc.key     --->远程域名服务控制器,(秘钥文件)

       配置信息:/etc/rndc.conf

/var/named/   --->区域数据文件

/etc/rc.d/init.d/named    --->脚本文件, 控制服务启动关闭:

                                          start :启动服务

                                          stop :关闭服务

                                        restart :重启服务

                                        reload :重新读取配置文件和数据文件,不用停止服务

                                     configtest :测试配置文件是否有语法错误。

/var/named/  : 

                    named.ca : 存放的是13台根域名服务器

               named.localhost : 专门将localhost解析为127.0.0.1

               named.loopback : 专门将127.0.01解析为localhost

              

type字段指定区域的类型,对于区域的管理至关重要,一共分为六种:

Master:主DNS服务器:拥有区域数据文件,并对此区域提供管理数据

Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。如果没有指定class IN的线索区域,服务器使用编译时默认的根服务器线索。不是IN的类别没有内置的默认线索服务器。

Slave:辅助DNS服务器:拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据。

Stub:stub区域和slave类似,但其只复制主DNS服务器上的NS记录而不像辅助DNS服务器会复制所有区域数据。

Forward:一个forward zone是每个域的配置转发的主要部分。一个zone语句中的type forward可以包括一个forward和/或forwarders子句,它会在区域名称给定的域中查询。如果没有forwarders语句或者forwarders是空表,那么这个域就不会有转发,消除了options语句中有关转发的配置。

Delegation-only:用于强制区域的delegation .ly状态。

(1.)配置主程序文件------named.conf

      /etc/resolv.conf   --->配置自己DNS服务器的指向,自己配置后,指向自己的IP地址!!!

bind的主配置文件/etc/named.comf t他的属主为root。属组为named

options

        listen-on port 53 127.0.0.1​​[B1]​​ ; ;   --->监听在那一个端口(0.0.0.0 :53 监听所有IP地址的53端口),

        listen-on-v6 port 53 ::1; ;    --->监不监听ipv6的端口,那个端口

        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;    --->

        dnssec-lookaside auto;    --->

 

        /* Path to ISC DLV key */     --->

        bindkeys-file "/etc/named.iscdlv.key";    --->

 

        managed-keys-directory "/var/named/dynamic";    --->

;

手动编辑完配置文件一定要改组:chown :named   /etc/named,conf

                       该权限:chmod  644  文件名

(2.)创建根域名服务器

 使用命令:dig  -t  NS(名称类型)  . (根域名服务器)

 然后把查询的结果导入到文件中并改名:dig  -t  NS  .  >......(文件路径)

 改组...chown  :named   文件名 

(3.)正向解析文件(A记录)

先是宏定义 

$TTL  600​​[B2]​​   (定义生命周期) 

$ORIGIN. (定义当前区域的名称,注意要有.

语法格式:name(()完整域名)​​[B3]​​      TTL(已定义,省略)  IN   资源记录类型    对应数值(IP地址)

(4.)反向解析文件(PTR记录)

语法格式:数值(IP地址)​​[B4]​​   IN  资源记录类型    完整域名

(5.)NS记录​​[B5]​​ 文件

语法格式: 域名    TTL  IN  NS   这个域中DNS服务器的名称(可以有多个)​​[B6]​​ 

          DNS服务器名称   TTL  IN  A  IP地址

 例:ss.com.  600  IN   NS   ns1.ss.com.

      ns1.ss.com.  600  IN   A   1.1.1.1

      ss.com.  600  IN  NS   ns2.ss.com.

      ns2.ss.com.  600  IN   A   1.1.1.2

(6.)MX记录​​[B7]​​ 文件:一般只出现在正向解析文件中

语法格式:域名  TTL  IN  MX   优先级(0-99) 主机名

          主机名  IN  A    IP地址

(7.)SOA记录​​[B8]​​ 文件

语法格式:域名​​[B9]​​   TTL  IN  SOA   主DNS服务器​​[B10]​​  管理员的邮箱地址​​[B11]​​ 

                         (

           20160116----序列号/版本号(主服务器发生改变时,从服务器检查序列号更新数据,一般只有10位)

           20M---刷新时间(从服务器多长时间到主服务器上检查一次数据是否更新)

           时间表示:M--分钟  D--天 W--周  H--小时

           解析域名:  dig  -t  NS  .....    解析IP:dig  -x  IP地址  

       显示查询次序:dig  +trace  -t  A 域名

       显示解析过程:dig  +trace  -t  A  完整域名   @ 交给谁去解析

           区域传送:  -t   axfr(完全区域传送)   域名   --->得到对方区域内的所有数据缓存

                              IXFR(增量区域传送)   序列号  --->得到变化后的数据文件,查看产生了几条纪录。

            验证语法错误命令:service  namad  configtest

                              named-checkconf

                            

配置主从DNS服务器


1.修改主服务器配置文件

options

        directory       "/var/named";

        allow-recursion    192.168.1.1;  ;  --->用于定义递归对象,我只给这个地址的主机递归,可以是网段!(前提自己要查询没有缓存)

           ;

注意!区域传送可以查到你自己服务器的DNS服务器缓存,并且能判断出dns服务器的解耦,所以,不能让别人都能够传送区域文件。

      只能允许自己的从服务器传送数据文件,别人不可以!

可以定义全局,对每个区域都生效

options

        directory       "/var/named";

       allow-transfer  172.168.1.12; ;  --->用于定义允许谁发起递归传送数据请求

        allow-recursion 192.168.0.0; ;

;

也可以只定义某个区域(根区域不需要规定!)

zone "sun.com"  IN  type master;

                         file "named.sun";

                         allow-transfer  172.168.1.12; ;  -->用于定义允许谁发起递归传送数据请求

                           ;

zone "1.168.192.in-addr.arpa"   IN      type master;

                                     file "named.1";

                                     allow-transfer  172.168.1.12; ;     -->用于定义允许谁发起递归传送数据请求

                                         ;

 

本地区域不需要传送,所以禁止传送数据(根区域不需要规定!)

zone "localhost" IN        type master;

                       file "named.localhost";

                      allow-transfer  none; ;         -->本地区域文件不需要传送,所以禁止!                  

                ;

2.修改从服务器配置文件

从主dns服务器上复制文件:scp   目标IP地址 : 文件路径     要放到那个地方

 1.1 安装bind服务

 1.2  /var/named/slaves/  : 同步主dns服务器的文件放在这里

 1.3 编辑从服务器主配置文件

           zone  "sun.com"  IN  type slave;   --->类型改为从服务器

                         masters 192.168.1.1; ;   ---> 指向主服务器是哪一个

                         file "slaves/named.sun";  --->文件路径改为slave目录下的

                   allow-transfer  none; ;   --->不需要别人从我这里请求区域文件传送

                          ;

 

注意!这里可以正反向都为从服务器,可以正向为主,反向为从,也可以反向为主,正向为从。

 

DNS视图

智能DNS:能够根据客户端来源所属的网络,进行判断,并且返回给一个我们事先定义好的IP地址。

视图(View):形成脑裂,不同网段IP解析不同的服务器地址!

注意一旦定义了视图,那么所有区域都必须定义在视图中                  

       根区域只需要定义在需要递归的视图中就可以了

主配置文件格式:

options

        directory       "/var/named";

 ;

 

view dianxin   

    match-clients  192.168.1.2;;    :只要是这个网址的客户端来解析,解析的配置文件是sun1.com

zone  "sun.com"  IN   type master;

                file "sun1.com";

                           ;

                  ;

view    wangtong 

match-clients  any;;   :只要不是上面定义的IP地址 ,都给他下面定义的配置文件sun2.com

zone "sun.com"   IN   

                         type master;

                      file "sun2.com";

     ;

     ;

 

若是想再重新定义一个新的域名,只需要在每个view中再添加记录就可以了。别忘了创建解析文件!

 

 

专业书籍、问题答疑、教学视频、在线实验平台等服务请移步:​​www.noylinux.com​​【零基础趣学Linux】

如果此文章有帮助到您,还请麻烦动动您的小手点个赞,谢谢~
Linux运维技术交流q:962822359

 


 

以上是关于DNS服务器的基本原理详解的主要内容,如果未能解决你的问题,请参考以下文章

DNS原理及其解析过程

DNS高速缓存搭建原理

DNS服务简介和配置详解

第十八天 DNS服务原理及bind详细配置

DNS解析问题:递归服务器和权威服务器有什么区别?

iptables及智能DNS