码迷,mamicode.com
首页 > 其他好文 > 详细

DNS

时间:2018-02-21 21:39:16      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:local   架设   centos   消息   keygen   生效   不包含   0.12   ddn   

DNS服务介绍

    1》DNS(Domain Name System),其主要作用就是将主机名解析成ip地址的过程,完成了从域名(FQDN)到主机识别ip地址之间的转换。
    2》DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。
    3》DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载,同时也方便记录的更新同步。
    4》DNS是一个网络服务,因此就有对应的端口,其端口号为53号。DNS查询的时候,是以udp这个较快速的数据传输协议来查询的,但万一没有方法查询到完整的信息时,就会再次以tcp这个协定来重新查询,DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。
    5》DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议。
    6》FQDN(Full Qualified Domain Name):完整主机名,是有主机名和域名构成。例如www.baidu.com当中,www就是web网站服务器的主机名,baidu.com就是域名,主机名和域名之间用实心点号来表示。
    7》DNS是基于c/s架构(多数基于套接字架构的C/S架构),对于每一级域名长度的限制是63个字符,域名总长度则不超过253个字符。
    8》DNS系统记录的信息非常多,不过重点就两个:一个是记录服务器所在的NS(name server)标志,另一个是记录主机名对应的A(address)标志。

DNS的域名结构系统

技术分享图片

    1》DNS的域名是倒状的树状结构,在最顶层的是一个根服务器,它主要负责顶级域名的管理,所谓的顶级域名如下所示:
        .com:用于公司、行号、企业、.gov:用于政府机构、.edu:用于教育机构、.mil:用于军事机构、.net:用于网络和通信机构
        .org:用于组织和机构、.cn:中国
        顶级域则负责其所对应的二级域名,接下来二级域名负责对应的主机名名称解析或者三级域名解析,以此类推。
    2》一级域名共分为三类,组织域、国家域和反响域,最多可以有127级域名。
    3》每一级的域名服务器只负责对应下级的域的管理,其中根节点是分布在世界各地的13台服务器组成,其中10台位于美国地区,另外3台设置于英国、瑞典和日本,在这13台根服务器当中有1台为根服务器放置在美国,其余12台均为辅根服务器,所有的根服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和ip地址等的管理。
    4》基于udp的dns报文的最大限制为512byte,在这个报文中包含13台DNS服务器信息,占用了511byte,没有地方再放置第14台记录了,所以只有13台根,根本原因是因为协议限制。

DNS域名解析工作原理

    1》客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
    2》当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
    3》根域名服务器接收到请求后,再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
    4》本地服务器接收到顶级域名服务器地址后,再向返回的域名服务器发送请求。
    5》 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知给客户机下级的域名服务器的地址。
    6》本地域名服务器将查询请求发送给返回的DNS服务器。
    7》域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
    8》 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
    9》正向解析与反向解析
        1。正向解析
            正向解析是指域名到IP地址的解析过程。
        2。反向解析
            反向解析是从IP地址到域名的解析过程。反向解析的作用为服务器的身份验证
        3。正反向解析是两个不同名称空间,是两颗不同的解析树。
    10》DNS解析过程中的两种查询方式:
        1。递归查询:
            一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交由上层服务器去解决,然后最后一层一层的反馈到客户端。
        2。迭代查询:
            一般是DNS服务器与DNS服务器之间的方式,即最起初的DNS服务器负责发起请求,而其他涉及到的DNS服务器只负责响应即可,然后一直查找到目标DNS服务器,并将结果返回给客户端。
        3。DNS查询过程:
            DNS在查询的时候是以udp这个快速的数据传输协议来查询的,但是一旦没有办法查询到完整的信息时,就会再次以tcp协议来进行重新查询。
            因此DNS服务在启动的时候会同时开启udp和tcp的53号端口。
    11》一次完整的查询请求经过的流程:
        Client -->hosts文件 -->DNS Service Local Cache--> DNS Server (recursion,递归) --> Server Cache -->iteration( 迭代) -->  根-->  顶级域名DNS--> 二级域名DNS…
    12》解析答案:
        肯定答案:
        否定答案:请求的条目不存在等原因导致无法返回结果
        权威答案:
        非权威答案:

DNS服务器

    1》DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。
    2》DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 
    3》域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
    4》域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
    5》DNS 服务器的类型:
        1。主DNS 服务器:
            管理和维护所负责解析的域内解析库的服务器。
        2。从DNS 服务器:
            从主DNS服务器或其他的从DNS服务器哪里“复制”(区域传输)解析库副本。
        3。缓存DNS 服务器:
            提高DNS的访问速度,实现快速解析,在安装完成DNS软件后,就已经实现了简单的缓存服务器,通常是在/etc/named.conf当中的forward only哪设定。
        4。转发器:
            通过区域传送,将所需要的域名解析传送给其他DNS服务器进行解析
        
    6》“通知”机制:
        主服务器解析库发生变化时,会主动通知从服务器
    7》子域授权:
        每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权。
    8》类似根域授权tld: 
        .com. IN  NS ns1.com.
        .com. IN NS ns2.com.
        ns1.com.  IN  A  2.2.2.1
        ns2.com. IN  A  2.2.2.2
    9》DNS服务器地址文件
        /etc/resolv.conf
        此文件内容就是dns服务器地址文件,只有在客户端中的此文件中添加DNS服务器地址,DNS服务器才能对启客户端起作用。

DNS服务程序

    DNS服务程序包有:bind和unbound
    以bind为例进行学习
    
    1》程序包:yum list all bind*
        bind:   服务器
        bind-libs:  与bind相关的库文件
        bind-utils:     客户端相关命令文件
        bind-chroot:    bind主目录禁锢程序,centos6之后的系统已默认禁锢在/var/named/目录下
    
    2》配置文件
        rpm -ql bind :
            提供dns server程序、以及几个常用的测试程序。
            /etc/NetworkManager/dispatcher.d/13-named
            /etc/logrotate.d/named
            /etc/named
            /etc/named.conf
            /etc/named.iscdlv.key
            /etc/named.rfc1912.zones
            /etc/named.root.key
            /etc/portreserve/named
            /etc/rc.d/init.d/named
            /etc/rndc.conf
            /etc/rndc.key
            /etc/sysconfig/named
            /usr/lib64/bind
            /usr/sbin/arpaname
            /usr/sbin/ddns-confgen
            /usr/sbin/dnssec-dsfromkey
            /usr/sbin/dnssec-keyfromlabel
            /usr/sbin/dnssec-keygen
            /usr/sbin/dnssec-revoke
            /usr/sbin/dnssec-settime
            /usr/sbin/dnssec-signzone
            /usr/sbin/genrandom
            /usr/sbin/isc-hmac-fixup
            /usr/sbin/lwresd
            /usr/sbin/named
            /usr/sbin/named-checkconf
            /usr/sbin/named-checkzone
            /usr/sbin/named-compilezone
            /usr/sbin/named-journalprint
            /usr/sbin/nsec3hash
            /usr/sbin/rndc
            /usr/sbin/rndc-confgen
            /var/log/named.log
            /var/named
            /var/named/data
            /var/named/dynamic
            /var/named/named.ca:存放根服务器地址
            /var/named/named.empty
            /var/named/named.localhost
            /var/named/named.loopback
            /var/named/slaves
            /var/run/named
        rpm -ql bind-libs :
            被bind(服务器包)和bind-utils包中的程序共同用到的库文件。
            /usr/lib64/libbind9.so.80
            /usr/lib64/libbind9.so.80.0.4
            /usr/lib64/libdns.so.81
            /usr/lib64/libdns.so.81.4.1
            /usr/lib64/libisc.so.83
            /usr/lib64/libisc.so.83.0.3
            /usr/lib64/libisccc.so.80
            /usr/lib64/libisccc.so.80.0.0
            /usr/lib64/libisccfg.so.82
            /usr/lib64/libisccfg.so.82.0.1
            /usr/lib64/liblwres.so.80
            /usr/lib64/liblwres.so.80.0.2
        rpm -ql bind-utils :
            bind客户端程序集,例如dig,host,nslookup等
            /usr/bin/dig
            /usr/bin/host
            /usr/bin/nslookup
            /usr/bin/nsupdate
        rpm -ql bind-chroot :
            让named运行于jail(容器沙箱)模式下。
            /var/named/chroot
            /var/named/chroot/dev
            /var/named/chroot/dev/null
            /var/named/chroot/dev/random
            /var/named/chroot/dev/zero
            /var/named/chroot/etc
            /var/named/chroot/etc/localtime
            /var/named/chroot/etc/named
            /var/named/chroot/etc/named.conf
            /var/named/chroot/etc/pki
            /var/named/chroot/etc/pki/dnssec-keys
            /var/named/chroot/lib64
            /var/named/chroot/usr
            /var/named/chroot/usr/lib64
            /var/named/chroot/usr/lib64/bind
            /var/named/chroot/var
            /var/named/chroot/var/log
            /var/named/chroot/var/named
            /var/named/chroot/var/run
            /var/named/chroot/var/run/named
            /var/named/chroot/var/tmp
        rpm -q --script bind
    
    3》架设好dns服务器,需要进行两方面的配置
        bind本身的配置文件的配置:
            主要规范主机的设定、zone file的所在、权限的设定等。
        正反解数据库(zone file):
            记录主机名与ip对应。
    
    4》配置相关配置文件
        1。服务脚本:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
        2。主配置文件:/etc/named.conf, /etc/named.rfc1912.zones,/etc/rndc.key
        3。解析库文件目录:/var/named/
            注意:
                1>一台物理服务器可同时为多个区域提供解析
                2>必须要有根区域文件;named.ca
                3>应该有两个(如果包括ipv6 的,应该更多)实现localhost和本地回环地址的解析库
        4。/var/run/named:named这支程序执行时默认放置pid-file在此目录中
        5。主配置文件/etc/named.conf里的内容
            帮助:man named.conf
            1>全局配置:options {};
                options {
                    listen-on port 53 { any; }; #监听的端口,即哪些主机可以进行访问解析,any表示所有。
                //  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     { any; }; #运行哪些主机请求查询,any表示所有。
                    recursion yes; #将自己视为客户端的一种查询方式,实现的是递归查询
                    forward  only ;  #只转发请求,不做解析,此时DNS服务器是一个缓冲服务器
                    forwarders {
                    } ;  #针对forward only 设置的转交给那个上层DNS进行解析,这里可以列出多个,每行一个并以分号结尾
                    dnssec-enable yes; #缓存名称服务器的配置,监听外部地址即可,建议关闭dnssec设为no
                    dnssec-validation yes;
                    /* Path to ISC DLV key */
                    bindkeys-file "/etc/named.iscdlv.key";
                    managed-keys-directory "/var/named/dynamic";
                };
            2>日志子系统配置:logging {};
                logging {
                        channel default_debug {
                                file "data/named.run";
                                severity dynamic;
                        };
                };
            3>区域定义:
                本机能够为哪些zone进行解析,就要定义哪些zone,也就是定义由本机负责解析的区域,或转发的区域。
                zone "ZONE_NAME" IN {
                    type {master|slave|hint|forward} ;
                    file "ZONE_NAME.zone";
                };
                zone "IP网段的反向.in-addr.arpa"  IN {
                    type {master|slave|hint|forward} ;
                    file "IP网段.zone";
                };
                    type:表示该zone类型,master是针对主DNS;slave是针对从DNS;hint是针对根;forward是针对转发域;除了根以为默认伟master
                    file:表示该zone的文件名称
                    ZONE_NAME:表示要解析的域名,正解时就为域名本身;反解时有固定的格式,格式为IP网段的反向.in-addr.arpa,如0.0.127.in-addr.arpa
            4>注意:
                1..任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上。
                2..大括号前后要有空格,每个地址之后必须以;结束,否则会语法错误。
                3..测试时建议关闭dnssec,需要时开启
                4..关闭仅允许本地查询:// allow-query  { localhost ; };
                
            5>主配置文件检查和生效命令
                主配置文件语法检查:
                    named-checkconf
                主配置文件修改后的生效
                    rndc status|reload ;service named reload
                    service named restart ;systemctl restart named
        6。域名的解析库文件/var/named/ZNOE_NAME.zone,反向解析库文件/var/named/ip.zone。
            1。。一台DNS服务器可同时为多个区域提供解析
            2。。必须要有根区域解析库文件:centos上是named.ca文件
            3。。还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库。
                正向示例:/var/named/named.localhost
                反向示例:/var/named/named.loopback
            有关域名解析库文件的资源记录格式说明在前面有解释
            1>正向解析例子
                cat adc.com.zone 
                $TTL 1D
                @           IN    SOA    dns1    admin.adc.com. (
                                                               2017091901   ; serial
                                                                 1D ; refresh
                                                                      1H    ; retry
                                                                1W  ; expire
                                                                3H )    ; minimum
                                   NS        dns1
                dns1    2D          A     192.168.213.130
                websrv               A      192.168.213.130
                www                 CNAME       websrv
                
            2>反向解析例子
                cat 192.168.213.zone 
                $TTL 1D
                @               IN   SOA    dns1.adc.com.   admin.adc.com. ( 1 10m 2m 1h 3h )
                                    NS    dns1
                107         PTR   dns1.adc.com.
                106         PTR   websrv.adc.com.
                
                注意:
                    这里的左侧只用添加ip地址的最后一段,因为前面我们已经定义好了它的域213.168.192.in-addr.arpa,因此107就已经能够代表107.213.168.192,也就是代表了192.168.213.107了。
                    不需要MX, 以PTR 记录为主。
            3>解析库文件语法检查:
                named-checkzone "adc.com" /var/named/adc.com.zone
    5》其他相关配文件
        /etc/hosts:最早的hostname 对应ip的档案。
        /etc/resolv.conf:这个很重要,就是isp的dns服务器ip记录处,记录的dns的ip最好不要超过2个。
        /etc/nsswitch.conf:这个是决定先要使用/etc/hosts还是使用/etc/resolv.conf的决定。

DNS

标签:local   架设   centos   消息   keygen   生效   不包含   0.12   ddn   

原文地址:https://www.cnblogs.com/shenxm/p/8457435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!