DNS解析过程及相关配置文件

版权声明:转载 请标注 出处 https://blog.csdn.net/youyou1543724847/article/details/83960933

参考文献:http://linux.vbird.org/linux_server/0350dns.php

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,DNS服务器将用户方便记忆的网址转化为计算机可以识别的IP地址,这一过程就称为域名解析。DNS协议运行在UDP协议之上,使用端口号53。

通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。通常顶级域名又称为根域,目前全球共有13个根服务器,其中10个在美国,另外三个位于英国、瑞典、日本。

域名结构为根域、一级域名、二级域名…….最多可以有127个域名。
一级域名就是我们常见的网址的后缀,即com、cn、edu等等。

1. DNS解析过程

在这里插入图片描述

<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器.
当客户端在前本地DNS域名服务器请求前,首先会检查自己的缓存和本地DNS配置。
具体过程包括:

  1. 浏览器将会检查缓存中有没有这个域名对应的解析过的IP地址,如果有该解析过程将会结束。浏览器缓存域名也是有限制的,包括缓存的时间、大小,可以通过TTL属性来设置。
  2. 如果用户的浏览器中缓存中没有,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。(windows中,hosts文件目录:c:\windows\system32\drivers\etc)
  3. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。3.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

<2> 当本地的域名服务器收到请求后,就先查询本地的缓存.

如果有查询的DNS 信息记录,则直接返回查询的结果.

如果没有该记录,本地域名服务器就把请求发给根域名服务器.

扫描二维码关注公众号,回复: 4596256 查看本文章

<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址.

<4> 本地服务器再向返回的域名服务器发送请求.

<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址.

<6> 本地域名服务器将查询请求发送给返回的DNS 服务器.

<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应).

<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机.

1.1 DNS解析过程中两种模式

(1)递归查询(适合DNS本地服务器,DNS本地服务器会将最终结果反馈给客户)

递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机.如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机.

(2)迭代查询(其他高级DNS服务器,如跟域名服务器,当本地DNS服务器请求时,根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址)

DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止.

2.DNS服务器类型

主名称服务器(primary name server)

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

从名称服务器(secondary name server)

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

唯高速缓存名称服务器(caching-only server)

唯高速缓存名称服务器可运行域名服务器软件,但是没有域名数据库软件。它从某个远程服务器取得域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。

当BIND被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器。缓存名称服务器只需要.这个zone file文件即可。

3.DNS服务器安装配置

CentOS:

yum install bind

3.DNS服务器配置

3.1相关配置文件

  • /etc/hosts  
    主机的固定DNS配置文件,对于简单的主机名解析(点分表示法),默认在请求DNS或NIS网络域名服务器前,/etc/named.conf 通常会告诉程序先查看此文件。

  • /etc/resolv.conf  :指定查看那个域名时,使用那个DNS服务器(如DNS server指定根域名解析服务器,client指定本地DNS 服务器)

  • /etc/named.conf  DNS服务器的运行主配置文件。设置一般的name参数,指向该服务器使用的域数据库的信息源、权限过滤配置等;

  • /var/named/named.ca  根域名配置服务器指向文件。指向根域名配置服务器,用于告诉缓存服务器初始化

  • /var/named/localhost.zone  localhost区正向域名解析文件

用于将本地IP地址(127.0.0.1)转换为本地回送IP地址(127.0.0.1)

  • /var/named/name.local  localhost区反向域名解析文件。用于将localhost名字转换为本地回送IP地址(127.0.0.1)

  • /etc/named.rfc1912.zones  区块设置文件,指定当前DNS服务器管理的区域及区域数据解析数据配置文件;

3.2 /etc/hosts:全局本地域名解析配置

该文件的默认配置:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

一般的配置格式:

IP hostname
192.169.49.121 node1

3.3 /etc/resolv.conf 配置文件

# Generated by NetworkManager
search DHCP HOST
nameserver 192.168.0.1
nameserver 192.168.1.1

3.4 /etc/named.conf : nameserver总体配置

默认配置:

options {
        listen-on port 53 { 127.0.0.1; };
        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; };

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        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 {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


options  定义全局配置选项和默认值。包括:

  • listen-on port 53 { any; } :监听在这部主机系统上面的哪个网络接口。预设是监听在 localhost, 亦即只有本机可以对 DNS 服务进行查询,那当然是很不合理。 所以这里要将大括号内的数据改写成 any。 记得, 因为可以监听多个接口, 因此 any后面得要加上分号才算结束。另外, 这个项目如果忘记写也没有关系,因为默认是对整个主机系统的所有接口进行监听的。
  • directory “/var/named” : 如果此档案底下有规范到正、反解的 zone file 档名时,该档名预设应该放置在哪个目录底下的意思。预设放置到 /var/named/ 底下。由于 chroot 的关系,最终这些数据库档案会被主动链接到/var/named/chroot/var/named/ 这个目录。
  • allow-query { any; }: 这个是针对客户端的设定,到底谁可以对我的 DNS 服务提出查询请求的意思。原本的档案内容预设是针对 localhost 开放而已, 我们这里改成对所有的用户开放,防火墙也得放行才行。不过,默认 DNS 就是对所有用户放行,所以这个设定值也可以不用写。
  • forward only :这个设定可以让我们的 DNS 服务器仅进行 forward,即使有 . 这个 zone file 的设定,也不会使用 . 的数据, 只会将查询权交给上层 DNS 服务器而已,是 cache only DNS 最常见的设定。
  • forwarders { 114.114.114.114; } :既然有 forward only,就要指定哪部上层 DNS 服务器进行转递,这就是 forwarders 设定值的重要性。

logging  定义日志内容和位置
zone  定义一个区
include  把其他的文件包含到配置文件中

acl  定义ip地址的访问控制清单
control  定义rndc使用的控制通道
key  定义授权的安全密钥
server  定义远程服务的特征

3.5 /etc/named.rfc1912.zones配置文件:zone配置,指定每个zone的配置文件路径

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

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


3.6 /var/named/xxx.xx:某个zone解析对应的数据文件,用来正向和反向的解析

3.6.1 DNS区域(ZONE)相关概念

dns区域是为了便于根据实际情况来分散DNS名称管理工作的负荷,将DNS名称空间划分为区域(zone)来进行管理。一个区域就是DNS解析树上一个独立管理的子树。

区域是DNS服务器的管辖范围, 是由DNS名称空间中的单个区域或由具有上下隶属关系的紧密相邻的多个子域组成的一个管理单位. 因此, DNS名称服务器是通过区域来管理名称空间的,而并非以域为单位来管理名称空间,但区域的名称与其管理的DNS名称空间的域的名称是一一对应的.

一台DNS服务器可以管理一个或多个区域, 而一个区域也可以由多台DNS服务器来管理(例如:由一个主DNS服务器和多个辅助DNS服务器来管理). 在DNS服务器中必须先建立区域, 然后再根据需要在区域中建立子域以及在区域或子域 中添加资源记录,才能完成其解析工作.

zone 通常具有以下几种标志:

  1. SOA:开始验证 (Start of Authority);
  2. NS:名称服务器 (NameServer),后面记录的数据是 DNS 服务器的意思;
  3. A:地址 (Address),后面记录的是 IP 的对应 (最重要)。

/var/named/named.localhost文件配置:

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

猜你喜欢

转载自blog.csdn.net/youyou1543724847/article/details/83960933
今日推荐