DNS的简介和BIND实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS的简介和BIND实现相关的知识,希望对你有一定的参考价值。

DNS简介

    DNS其实大家都不陌生,因为这个是我们访问互联网必不可少的一个东西,全称:Domain Name System。在当今计算机网络中是通过IP地址来进行主机之间互联的,但是我们知道IP地址有32位,以后还会普及IPv6,128位。对于人类来记忆实在太痛苦了。DNS的作用就是为了解决域名到IP之间的转换。这样大家就恍然大悟了吧,我们每天都在享受着DNS带来的便捷。

    DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的IP地址就能通过主机名的形式访问互联网。那么你要想了,全球这么多IP地址,都在一台DNS服务器上,万一宕机了咋办?每天这么多访问量,配置得多高啊!前辈们早就想好解决方法了。DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载。具体结构参考下图:

技术分享

DNS解析过程

    第一种:递归查询。递归查询一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交给上层服务器去解决,然后一层一层的反馈结果到客户端;

    第二种:迭代查询。一般是DNS服务器与DNS服务器之间的方式,最初的服务器负责发起请求,一层层的找到目标服务器,在返回给客户端,这个过程叫迭代。

一次完整的查询请求经过的流程:

Client --> hosts文件 -->DNS service

       Local DNS cache --> DNS server(recursion递归)-->server cache -->iteration(迭代) -->根--> 顶级域名DNS-->二级域名DNS…

DNS服务器的类型   

    主DNS服务器:维护所负责解析的域内解析库服务器。解析库由管理维护;

    从DNS服务器:从主DNS服务器或其他的从DNS服务器那里“复制”(区域传递)一份解析库;

    缓存DNS服务器:提高DNS的访问速度,实现快速解析,在安装完成DNS软件后就已经实现了简单的缓存服务器,通常在/etc/named.conf当中的forward only设定;

    转发器:通过区域传送,将所需要的域名解析传送给其他DNS服务器进行解析            

                    区域传输:

                            完全传输:传送整个解析库

                            增量传输:传递解析库变化的那部分内容

DNS监听的端口

    DNS是一个网络服务,端口号是53.通常DNS在查询的时候是以udp这个快速的数据传输协议来查询的, 但是一旦没有办法查询到完整的信息时就会再次以TCP协议来进行重新查询,因此DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。

安装DNS服务

    1、DNS服务程序包:bind,程序名:named

        使用yum list all bind* 查看相关安装包:

                            bind:服务器;

                            bind-libs:于bind相关的库文件;

                            bind-utils:客户端相关命令文件;

                            bind-chroot:bind主目录禁锢程序,就是将bind程序禁锢在家目录中,centos6之后的系统已经默认在/var/named目录下了;

                            补充:如果你的程序是centos之前,那么还有一个软件包caching-nameserver:作用是为bind提供简单的配置文件模版,centos5之后的系统这个软件功能都被包含在bind主程序软件包当中。
        *根据需求使用yum安装bind软件

    2、DNS服务器配置文件

                第一步:修改主配置文件:/etc/named.conf                      <==主配置文件一般用来定义全局配置和根zone

~]#cat /etc/named.conf 
options {                          <==在options包含的是全局配置
                listen-on port 53 { any; };       <==监听的端口,即哪些主机可以进行访问解析;
                directory       "/var/named";     <==对应数据库文件的目录位置;       
                dump-fi    le       "/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     { any; };       <==运行哪些主机请求查询,这里修改为any运行所有;
                recursion yes;                <==将自己视为客户端的一种查询方式;
                dnssec-enable no;              <==测试环境建议先关闭;
                dnssec-validation no;
};

             第二步:配置/etc/named.rfc1912.zones              <==主配置文件之一,一般用来存放zone,就是定义解析的域

zone "ZONE_NAME" IN {                      <==ZONE_NAME表示要解析的域名,正解时就是域名本身,如:jd.com;反解的时候:ip网段反写.in-addr.arpa;
        type {master|slave|hint|forward};  <==定义zone的类型:master主DNS服务器,slave从服务器,hint根服务器,forward转发域
        file "ZONE_NAME.zone";             <==标明解析域名的数据库文件名
};

             第三步:解析库文件:/var/named/ZONE_NAME.ZONE          <==与zone中file相对应,文件名必须一致   

                            区域解析库:由众多资源记录RR组成:

                            资源记录类型:

                                1、SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录                  

                                 格式:name       [TTL]      IN        rr_type          value

                                                1、TTL表示该记录被其他dns服务器查询到后保留到对方服务器上的缓存当中保持多少秒,可全局继承;

                                                2、name:当前区域的名字

                                                3、value: 有多部分组成:

$TTL 1D
@    IN  SOA  dns1   admin.xiaomage.com. (          <[email protected]可用于引用当前区域的名字,dns1当前区域的主DNS服务器,admin.xiaomage.com.
                                                            当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换;
                                  31     ;序列号 
                                 1D     ;刷新时间
                                 1H     ;重试时间
                                 1W     ;过期时间
                                 3H )    ;否定答案的TTL值
dns1    IN  A                       *.*.*.*             <==主机名对应主机的IP地址

                                2、A :internet Address,作用,FQDN --> IP

                                3、AAAA: FQDN --> IPv6 

                                4、PTR: 反向解析:有特定格式,把IP地址反过来写,1.2.3.4  要写出4.3.2.1;而且有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.

                                        例如:4.3.2.1.in-addr.arpa. IN PTR www.jd.com.       <==注意每个后面必须要加“.”作为结束符,不然系统会自动补上当前域名

                                5、NS: Name Server,专用于标明当前区域的DNS服务器,对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

                                        例如:jd.com    IN     NS    ns1.jd.com

                                6、CNAME:Canonical Name,别名记录

                                7、MX:Mail eXchanger,邮件交换器,对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

测试命令

    1、dig 只用于测试dns系统,不会查询hosts文件进行解析

        语法:dig [-t type] name [@SERVER]

        例如:dig -t a www.hxsd.com @1.1.1.1

                    +trace:跟踪解析过程

                    +recurse:进行递归解析

    2、host [-t type] name [SERVER]

          例如:host –t NS hxsd.com 172.16.0.1

    3、nslookup命令:nslookup[-option] [name | -] [server]

        交互式模式:

            nslookup>

            server IP: 指明使用哪个DNS server进行查询

            set q=RR_TYPE: 指明查询的资源记录类型

            NAME: 要查询的名称

        非交互式模式:·

            nslookup www.hxsd.com 172.18.0.1 

以上是关于DNS的简介和BIND实现的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维实战之DNS(bind)服务器的安装与配置

DNS服务基础之Bind

CentOS7上使用bind9搭建DNS主从服务器

DNS原理与BIND基础

Linux之bind服务(DNS)部署配置

DNS学习笔记