• BIND服务


    BIND

    基础概念

    域名对应的IP地址修改完要将近一天的时间才能有效果?
    DNS的数据库通常是在跑在DNS服务器的内存当中的,但是我们如果临时增加一条的话其实是写到了硬盘当中,当数据库服务刷新的时候新增的新记录才会被记录到内存当中。

    这其实也会是与DNS的缓存有关系的,举个例子你的主机在.com下注册了域名1.1.1.1,后来又换成了2.2.2.2,在一天的时候当中你会发现当你ping主机的时候域名解析还是1.1.1.1,为什么?因为不仅DNS不仅PC本地有缓存,而且互联网上很多的DNS都有缓存,当它们所有的缓存都失效后才再去解析,所以这一通下来,也差不多是一天的时间。

    递归和迭代
    递归查询就是我们发出一个请求就一定能得到最终结果的查询,所以递归是对于我们的主机而言的,主机可以发一次查询就可以通过自己设置的DNS得到结果,但是我们设置的本地DNS服务器可能要费很大的力气才能帮助我们查找到,所以递归是针对主机而言的,主机发一个查询请求,主机不管DNS服务器费了多大的力气,它反正只要最后的结果,它一次查询的结果就是递归。

    迭代就是说本地DNS服务器想要得到最终的答案需要多次查询,这就是迭代,所以迭代是针对本地DNS而言的,它要通过多次查询才能帮助客户端查询到查到对应的IP,它多次查找的过程就是迭代。

    在公司内网部署DNS服务器的意义何在?
    在内部搞一个DNS服务器之后,客户端可以通过此DNS实现递归,客户端自己发一次查询就好,让DNS服务器替自己迭代;同时如果在本公司内部有一个服务器不打算让互联网上的人访问,只想让公司的人访问的话,那么就把此服务器的域名和IP写入到本地搭建的DNS服务器的数据库当中,这样的话,本公司内部的人访问自己的服务器时把DNS指向自己搭建的DNS服务器就可以实现内部事务内部解决,如果想访问互联网的的主机时,本地的DNS会帮助客户端实现递归,它自己去迭代。所以说非常的方便。内网的DNS服务器万一坏了怎么办?要设置主从即可。

    迭代非常浪费资源,所以尽量给组织内部的人提供迭代,但是ISP必须得自己搭建让自己自足,谷歌帮助全人类提供了一台迭代8.8.8.8,4.4.4.4。

    正向和反向区域解析:
    通过域名解析成IP是正向解析,通过IP解析域名是反向解析。通过正向区域可以实现正向解析,通过反向区域可以实现反向解析,值得一提的是反向区域在一定程序是依赖正向区域,正向区域完全不依赖反向区域。正反向区域是两个不同的系统,可以位于同一个主机,也可以位于不同的主机。

    互联网的.com等一级域服务器只支持迭代,不支持递归,所以这些域不能帮助我们递归,而客户端也不支持,只能找一个中间人,这个中间人一般由ISP提供,人家只是中继一下帮你查询的,它有帮客户端递归的能力,而客户端就是需要这种能力。

    服务器的主机名一定要与提供的服务一样吗?
    baidu.com是一个域名,而www是一个主机,但是www主机所指向的主机的名字不一定就非得叫www,所以说网络的标识某一台服务器的的名字和服务器本身主机的名字没有一毛钱的关系,顶多就是IP的对应关系,你在.com域名下注册了一个域名baidu那么.com就在自己的数据库就加上一条

    1.1.1.1                 baidu
    

    一旦有人来找.bom查询百度的对应的IP,把1.1.1.1返回就是了,至少你是访问www还是mail还是什么,.com不管,.com只看到了你访问的是baidu。

    DNS服务器的类型:
    缓存DNS服务器,主DNS服务器、从DNS服务器、转发器

    运营商给客户提供的DNS服务器,比如联通给提供的202开头的DNS服务器,它不负责任何域的解析,它仅仅给通过自己上网的客户端做递归的服务器(牺牲自己做迭代,自己麻烦最后把结果返回给客户端),其实这种的DNS就叫做缓存DNS,因为它只有缓存的功能,不负责解析任何域,当一个内网的主机请求时,如果它本地没有,它就去找根,进行迭代查询。虽然本地PC会缓存DNS,但是过一会儿就会失效了,失效之后再访问同一个网站还要去向DNS服务器查询,这其实就浪费了带宽,如果在内网我们自己搭建一个DNS服务器,让内网的DNS服务器去帮助我们迭代多好呀,还能节省带宽,会节省一部分带宽,它迭代的内容同样也有有效期,这个有效期是权威DNS规定的。其实家里的小米路由器就是一个缓存DNS服务器,通过小米路由器获得的DNS是网关,而路由器也有一个DNS,这个DNS指向的就是联通公司给分配的DNS,小米路由器充当了缓存器,帮助用户节省了带宽。

    因为要冗余,所以DNS服务器通常会成双出现,所以有了主从之分。

    主从DNS之间的区域传送、全量传送,增量传送
    但是内网当中的部署的DNS服务器挂了之后怎么办?所以通常还会有一个从DNS服务器,那么这个主从是如何区分的呢?主DNS服务器挂了之后,从DNS要立马顶上,所以就要求它们的数据库是相同的,从DNS服务器的数据库从主DNS服务器那里复制过来的,从DNS服务器从主DNS服务器复制数据库的过程就是区域传送的过程。区域传送也有两类型,如果从DNS服务器刚刚配置好数据库什么东西都没有,下一步就要把主DNS服务器那里把所有的内容都复制过来,这是全量传送;假如主DNS的数据库变化了,从DNS服务器保存的还是原来全量传送时的数据,在这种情况下,从DNS服务器只要复制主DNS服务器被修改的部分即可,用不上全部复制了,这个过程又被称做增量传送。

    主从DNS之间的解析库序列号、刷新时间、重试时间间隔、过期时长
    上文提到,主从DNS服务器之间的解析库需要进行增量传送,两台DNS服务器的解析库要及时同步,但是当主DNS的解析库更新了之后从DNS服务器怎样才能知道呢?解析库是有序列号的,解析库的序列号是随着修改的次数而递增的,就比如主DNS的解析库原来的序号是1,从DNS服务器对主服务器的解析库进行了全量传送,从DNS服务器的解析库的序列号也是1,现在主DNS解析库里面又加了一条记录之后 ,主DNS服务器的解析库序列号又递增为2,此时,从DNS服务器解析库的序列号还是1,从DNS服务器并不知道主DNS服务器的序列号已经发生了改变,从DNS服务器要定期去主DNS服务器上查看解析库序号又没有变化,那么多长时间去查看一次好呢?这个时间我们是可以定义的,这个时间就是刷新时间。现在要考虑一种情况,实际上从DNS服务器向主DNS服务器查询解析库的过程就是两台主机相互通信的过程,只要是通信就有失败的可能,如果从DNS在与主DNS服务器通信时没有刷新成功,假如说是主DNS挂了怎么办?如果第一次通信失败的话,从DNS服务器会认为是网络阻塞,并不会立马认定主DNS已经挂了,在第一次通信失败之后,再隔一会儿从服务器还会再去与主DNS服务器同步一下尝试能不能通信成功,这个隔一会儿就是重试时间间隔(如刷新时间一样都是可以定义的),重试时间应该小于刷新时间,因为重试时间要是大于刷新时间的话,在等待重新刷新时又重新刷新了一次,这样没有任何意义。假如刷新一直失败怎么办?有过期时长,假如一直刷新失败的话,从服务器并不会趁此机会上位,它们比人要有人性多了,假如从服务器一直联系不上主服务器,从服务器认为主服务器已经停止服务了,既然主服务器停止服务器,从服务器提供服务也没有什么意思了,所以从服务器当发现主服务器失联时自己也会停止所有的服务,与主服务器一同“赴死”。所以在我们人的角度来考虑,当主服务器宕机时要尽快修复主服务器,不然从服务器也会跟着罢工的。

    主从同步的缺点
    值得声明的一点是,主从服务器实际上一起提供服务器,并不是一台工作,另一台闲着。它们两个通常会负载,它们是不是负载取决于上一级DNS服务器的解析库记录,同一个域名对应两个IP地址,这样就会负载均衡,如果其中的一个联系不上了,就给第二个来解析。肯定会有这样的情况,假如主从的刷新时间为5分钟,在从服务器刚同步完后的1秒之后主服务器的解析库发生了变化,但是从服务器要等到刷新时间到了之后才能把新增加的内容同步到自己的解析库当中,如果在此期间,正好有人找从服务器解析来解析新增加的这一条内容的话,这样不就解析不到了吗? 通常是这样,当我们在DNS解析库里面加了一条记录之后主DNS服务器会通知从DNS服务器过来同步,即便是刷新还没有到,这样在一定程度上缓解了主从两台主机解析库不一致的情况,可以抓包进行验证。

    当主机第一个DNS服务器时并没有解析结果时,会再解析第二个DNS服务器吗?
    如果一个主机上设置两个DNS服务器,使用第一个的时候解析不成功,那么还会使用第二个吗?并不会的,因为第一个在查找第一次的时候肯定访问了根,根没有找到才返回给你没有找到的信息,这样的话,第一个都解析不出来,第二个肯定也不成的,所以根本没有必要使用第二个DNS。

    什么时候会用到第二个DNS服务器呢
    当第一个DNS服务器连接不上的时候才会使用第二个DNS。

    域和区域
    我们讲课一直讲区域传送,为什么不说是域传送呢?

    区域要么正向的,要么是反向的,而域没有正向反之说,域在概念是包括了正向和反向。

    FQDN
    正向区域和反向区域不是使用一个数据库。

    FQDN:full qualified domain name,完全限定域名,如www.baidu.com. 注意最后有一个点

    主机名+域名的格式就被称为完全限定域名(FQDN)

    域是一个概念,比如baidu就是一个域,在这个域之下还有区域,也就是所谓的正向区域和反向区域。

    正向区域就是把FQDN解析成IP,而反向区域就是把IP解析成FQDN。

    一次完整的查询请求经过的过程
    hosts(本地hosts文件)

    DNS server:local cache(本地缓存)—recurtion(递归)—server cache(服务器缓存)----intertive(迭代)

    具体的含义的解释:

    客户端首先在本地的hosts文件查看,没有就找指定的本地DNS服务器
    通常本地DNS都是缓存服务器,比如8.8.8.8 223.6.6.6这些DNS服务器,这些DNS服务器本身不具有解析的功能,只能帮你迭代解析罢了。
    客户端找到223.6.6.6,阿里的DNS首先在自己的缓存当中查找
    如果缓存当中没有,就去迭代(找根解析)
    迭代回来之后在本地缓存
    然后把结果返回到客户端
    答案类型
    如果DNS帮你找了正确的答案就是肯定答案;如果DNS没的找到答案的话就返回一个否定的答案,否定答案并不代表对方不在线,只是没找到你想到的答案,否定答案其实也有缓存。其实无论是肯定答案还是否定答案都有权威与非权威之分。

    那么何为权威答案?权威答案就是你访问www.baidu.com.时,缓存DNS服务器帮你递归时从负责百度这个域里面的区域明确回应的,就是权威答案。

    那么何为非权威答案?非权威答案就是访问www.baidu.com.时,缓存DNS服务器没有去找负责百度这外域里面的区域,而是直接从自己的缓存当中找到了答案,这就是非权威应答。

    其实这种分布式系统的缓冲带来的好处就是给DNS服务器减小了压力,缺点就是在某一个时刻肯定失去了一致性,就比如一个缓存服务器刚刚缓存了一答案,但是权威DNS服务器更改之后,缓存服务器并不会立马收到,这就失去了一致性,但是还好,当缓存失效之后就会一致了。如果没有缓存的话,的确得到的答案都是权威答案,但是服务器的压力会很大。

    DNS的数据库通常是在跑在DNS服务器的内存当中的,但是我们如果临时增加一条的话其实是写到了硬盘当中,当数据库服务刷新的时候新增的新记录才会被记录到内存当中。

    这其实也会是与DNS的缓存有关系的,举个例子你的主机在.com下注册了域名1.1.1.1,后来又换成了2.2.2.2,在一天的时候当中你会发现当你ping主机的时候域名解析还是1.1.1.1,为什么?因为不仅DNS不仅PC本地有缓存,而且互联网上很多的DNS都有缓存,当它们所有的缓存都失效后才再去解析,所以这一通下来,也差不多是一天的时间。

    区域解析库

    每个域都要维护一个区域解析库,而区域解析库都是由一条条的记录组成的,而每一条记录就被称为资源记录(resource record RR).

    我们知道大多数域名下面都不仅仅有www服务器,可能还会有mail、oa、CRM等服务,用来标识不同服务的资源记录类型是不一样的,也就是说资源记录有多种类型,常见的资源记录类型有7种:A/AAAA/PRT/SOA/NS/CNAME/MX

    l SOA记录:任何解析库的第一条都必须是SOA记录,start of authority 起始授权记录,一个区域解析库有且仅能有一个SOA记录,且必须在第一条。说明当前这个区域解析库为哪一个区域所用,由谁负责。

    l A记录:作用是把FQDN解析成为IPV4的IP地址

    l AAAA记录:使用是把FQDN解析成为IPV6的IP地址

    l PTR:pointer 指针记录,作用是把IP解析成为FQDN,反向解析。

    l NS:name server 专用于标识当前区域的DNS服务器

    l CNAME:canonical name 别名记录

    l MX:mail exchanger邮件交换器,

    当我们写邮件的时候收件人通常会这样写746620446@qq.com,其实我们想把邮件发送给746620446](mailto:当我们写邮件的时候收件人通常会这样写746620446@qq.com,其实我们想把邮件发送给746620446)这个用户,但是首先肯定会是先找到QQ.COM然后通过QQ.COM再找到746620446这个用户,那么QQ.COM其实是一台服务器主机,这个记录就是用来标识QQ.COM对应的那台服务器主机的Ip地址,总结就是一名话,当有人给QQ.COM这个区域发送邮件时由谁来中转此邮件,毕竟不能一下直接发给746620446 这个用户,必须要有一个中转服务器,然后通过中转服务器再转发给746620446这个用户。

    //资源记录的通用格式
    name   [TTL]   IN      rr-type    value
    

    name:当前的区域的名字,例如magedu.com. 注意最后的点一定不能省略。

    TTL可以省略,可以从全局继承,也可以自行定义,单位是秒,所谓的TTL就是DNS记录在客户端的缓存时长,默认单位是秒。

    @可以用于引用当前区域的名字

    IN代表internet,没有实际意义,可以当做固定格式。

    rr-type当前资源记录的类型,rr是资源记录的缩写。

    value由多个字段组成,其中以SOA的格式最为奇特。

    SOA记录

    SOA记录与其它记录不同的是就是value部分,SOA的value部分由很多的字段组成。

    value:有以下三部分组成:

    1. 负责当前区域的主DNS服务器FQDN,也可以使用当前区域的名字,用@可表示当前区域的名字
    2. 当前区域管理员的邮箱地址,但是地址不能有@符号,一般用.来代替,例如15069028007.163.com
    3. (主从服务器协调属性的定义以及否定的答案的统一的TTL)

    例如:

    baidu.com.   86400    IN   SOA     www.baidu.com.   zhanghe.163.com.   (
                            2017102501          序列号
                            2H                  刷新时间
                            10M                重试时间
                            1W                 过期时间,一星期
                            1D                 否定答案的TTL,一天
    )
    

    NOTE:如果后面不加单位,默认是秒

    A记录

    name某主机的FQDN,例如www.magedu.com.

    value:主机名对应主机的IP地址

    例如:

    www.magedu.com.    IN       A     1.1.1.1
    www.magedu.com.    IN     A     1.1.1.2         #多条会出现轮询
    

    同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询的方式响应。

    同一个值也可能有多个不同的定义名字,通过多个不同的名字指向向一个值,,这种效果也可以通过CNAME实现

    mx1.magedu.com.       IN        A     1.1.1.3
    mx2.magedu.com.       IN        A     1.1.1.3
    

    注意:

    *.magedu.com. IN    A     1.1.1.4
    magedu.com.       IN    A     1.1.1.4
    

    避免用户写错名称给错误答案,可通过泛域名解析进行解析到某个特定地址。

    AAAA记录

    与A记录的作用是一样,用于IPV6而已,此处略过。

    PTR记录

    name vlue

    name是IP地址有特定的格式,把IP地址反过来写,比如1.2.3.4要写成4.3.2.1而且有特定后缀:in-addr.arpa.所以完成的写法为:

    4.3.2.1.in-addr-arpa.

    value:FQDN

    例如:

    4.3.2.1.in-addr.arpa.     IN    PTR      www.magedu.com.
    

    注意:网络地址及后缀可以省略,主机地址依然需要反着写。

    NS记录

    name:当前区域的名字

    value:当前区域某DNS服务器的主机名,例如ns.magedeu.com.

    注意,一个区域可以有多个NS记录

    例如:

    magedu.com.       IN   NS      ns1.magedu.com.
    magedu.com.       IN    NS       ns2.magedu.com.
    

    注意:

    相邻的两个资源记录的name相同时,后续的可以省略

    对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录。

    MX记录

    name 当前区域的名字

    value:当前区域的某邮件服务器(smtp服务器)主机名

    一个区域内,MX记录可以有多个,但每个记录的value之意应该有一个数字(0-99),表示此服务器的优先级,数据越小优先级越高。

    例如:

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

    注意:对mx记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

    CNAME记录

    name:别名的FQDN

    value:真正名字的FQDN

    例如:

    web.magedu.com.       IN    CNAME       www.magedu.com.
    
  • 相关阅读:
    操作系统
    C++流类库(11)
    C++运算符重载(10)
    C++虚函数(09)
    C++向量(08)
    C++继承(07)
    ResNet实战
    ResNet,DenseNet
    经典卷积网络VGG,GoodLeNet,Inception
    CIFAR100与VGG13实战
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/12354108.html
Copyright © 2020-2023  润新知