DNS : Domain Name Service : 应用层协议
DNS查询类型 :
递归查询 :发出一次请求就可以获得最佳的结果
迭代查询 :服务器获取的结果不一定是需要的,需要多次发送查询请求。

解析类型 :
Name --> IP
IP --- >Name

注意 :正向解析是两个不同的名称空间,是两棵不同的解析树

本地名称解析配置文件 : /etc/hosts/

DNS服务器作用 :
接收本地客户查询请求(递归)
外部客户端请求 : 请求权威答案
肯定答案 : TTL
否定答案 : TTL
外部客户端请求 : 非权威答案

DNS 服务器的类型 :
主DNS服务器
辅助DNS服务器
缓存DNS服务器
转发器

主DNS服务器 :维护所负责解析的城内解析库服务器 :解析库由管理员维护

从DNS服务器 :从主DNS服务器或其他的从DNS服务器那里”复制(区域传送)一份解析库“;
序列号 :解析库的版本号:前提 : 主服务器解析库内容发生变化,其序列号递增
刷新时间间隔 :从服务器从主服务器请求同步解析库的时间间隔;
重试时长间隔 :从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;
过期时长 :从服务器始终联系不上到主服务器时,多久后放弃从服务器角度,停止提供服务。。。

区域传送的类型 :
全量传送 : 传送整个解析库
增量传送 :传递解析库变化的那部分内容

区域类型 :
主区域 : master
从区域 : slave
提示区域 :hint
转发区域 : forward

两种DNS转发模式 :
forward-only
forward-first

一次完整的查询请求经过的流程
Client ---> hosts文件 --> DNS Service Local Cache (本地缓存) --->DNS Server (recursion(递归)) --> Server Cache --> iteration (迭代)

解析答案
肯定答案 :
否定答案 : 请求的条目不存在等原因导致无法返回结果;
权威答案 :
菲权威答案 :

区域解析库 :由众多RR组成 ;

资源记录 : Resource Record , RR
记录类型 : A ,AAAA ,PTR ,SOA ,NS , CNAME , MX
A : internet Address , 作用 ,解析FQDN --IP

AAAA : 解析FQDN -->IPv6
PTR : PoinTeR ,解析 IP -->FQDN
SOA : Start Of Authority, 起始授权记录 : 一个区域解析库仅能有一个SOA记录,而必须为解析库的第一条记录 :
NS : Name Server , 专用于标明当前区域的DNS服务器
CNAME : Canonical Name ,别名记录

MX :Mail eXchanger , 邮件交换器
注意 :br/>(1)TTL可从全局继承
(2)@可用于引用当前区域的名字
(3)同一个名字可以通过多条记录定义多个不同的值:此时DNS服务器会以轮询方式响应;
(4)同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义 ,此仅表示通过多个

SOA :
name : 当前区域的名字,例如 : “liming.com”
value : 有多部分组成
(1)当前区域的主DNS
(2) 录前区域管理员的邮箱地址 :但地址中不能使用@符号,一般用.替换, 例如 linuxedu.liming.com
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)

NS :
name : 当前区域的名字
value : 当前区域的某DNS服务器的名字 ,例如ns.liming.com
注意 : 一个区域可以有多个NS记录
例如:
ming.com. IN NS ns1.ming.com.
ming.com. IN NS ns2.ming.com.

注意 :
(1)相邻的两个资源记录的name相同时,后续的可省略;
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;

MX
name : 当前区域的名字
value :当前区域的某邮件服务器(smtp服务器的主机名) :
一个区域内,MX记录可有多个 : 但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级 ,数字越小优先级越高;

    例如 :     
         ming.com    IN MX    10 mx1.ming.com.

         注意 :
            (1)对MX记录而已 ,任意一个MX记录后面的服务器名字,都应该在后续有一个A记录 。

A :
name : 某主机的FQDN , 例如www.ming.com
value : 主机名对应的IP地址;
例如 :
www.ming.com IN A 1.1.1.1
www.ming.com IN A 1.1.1.2

              mx1.ming.com    IN   A      1.1.1.3                
              mx2.ming.com    IN   A      1.1.1.4                            

         注意 :
         *.ming.com           IN   A       1.1.1.4

         ming.com           IN   A       1.1.1.4             

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

AAAAA :
name : FQDN
value :IPv6

PIR :
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 PIR wwww.ming.com
简写成 :
4 IN PIR wwww.ming.com

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

CNAME :
name :别名的FQDN;
value : 正工名字的FQDN
例如 :
web.ming.com. IN CNAME www.ming.com

定义转发服务器 :
注意 : 被转发的服务器需要要能够为请求者做递归,否则,转发请求不予进行;
(1)全部转发 :凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;
Options {
forward {first|only}
fowarders
}
(2)区域转发 :仅转发对特定的区域的请求至某服务器
zone “ZONE_NAME” IN {
type forward;
forward {first|only}
forwarders
}

BIND 的安装配置 :

dns服务,程序包名bind,程序名named         

程序包 :
bind
bind-libs
bind-utils

                bind-chroot : /var/named/chroot/

  bind :                
            服务脚本 : /etc/rc.d/init.d/named
            主配置文件 :/etc/named.conf , /etc/named.rfc1912.zones  ,/etc/rndc.key
                     解析库文件 :/var/named/ZONE.NAME.ZONE

                        注意 :
                                         (1)一台物理服务器可同时为多个区域提供解析
                       (2)必须要有根区域文件
                                                 (3)应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库

      rndc : remote domain controller ,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程:提供辅助性的管理功能

    主配置文件:
           全局配置 :options {}
                         日志子系统配置 :logging {}
                         区域定义 :本机能够为哪些zone进行解析,就要定义哪些zone
                                zone "ZONE_NAME"  IN {}

                        注意 :任意服务程序如果期望其能够通过网络被  其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上
            缓存名称服务器的配置 :            
                                        监听外部地址即可 :

                                        dnssec : 
                           建议测试时关闭dnssec ;

                主DNS名称服务器 :                      
                                         (1)在主配置文件中定义区域
                                                  zone "ZONE_NAME"  IN {
                                                                   type {master|slave|hint|forward};
                                                                   file "ZONE_NAME.zone";
                                                            };

                                         (2)定义区域解析库文件
                                                   出现的内容:
                                                                    宏定义;
                                                                            资源记录;

                测试命令 :dig的使用
                dig [ -t type] name [@SERVER [query options]|

            dig 用于测试dns系统,因此,不会查询host文件进行解析;

                查询选项 :
                         +[no] trace : 跟踪解析过程
                                 +[no] recurse : 进行递归解析

                测试反向解析 :
                      dig -x IP@SERVER

                模拟区域传递 :
                     dig -t axfr ZONE_NAME @SERVER

                         例如 :dig -t axfr ming.com @172.1.1.1

            host命令 :
                   host [-t type] name SERVER

          nslookup(交互式查询工具)命令 :             
                    nslookup [-option] [name | -] [server]    

                    交互式模式 : 
                                   nslookup>
                                      server IP : 指明使用哪个DNS server进行查询 ;
                                          set q=RR_TYPE :指明查询的资源记录类型;
                                                    NAME : 要查询的名称;

      反向区域 :                                                        

                                区域名称 :网络地址反写 . in -addr.arpa        
                                       172.16.100.  --> 100.16.172.in-addr.arpa;        

                            (1)定义区域                     
                                      zone "ZONE_NAME" IN {
                                                         type {master|slave|forward};
                                                         file "网络地址.zone"
                                                };

                            (2) 区域解析库文件
                                      注意 :不需要MX和A,以及AAAA记录,以PIR记录为主;

主从复制 :
1、应该为一台独立的名服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供库文件:解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传递;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致:否则,应该从高,主低;

            定义从区域的方法 :
                     zoen "ZONE_NAME" IN {
                                        type slave;
                                        masters {MASTER_IP;};
                                        file "slave/ZONE_NAME.zone";
                             }; 

rndc :
rndc --> rndc (953/tcp)

            rndc COMMAND

            COMMAND
                     reload : 重载主配置文件和区域解析库文件
                     reload zone: 重载区域解析库文件
                             retransfer zone : 手动启动区域传送过程,而不管序列号是否增加;
                             notify zone :  重新对区域传送发通知;
                             reconfig : 重载主配置文件;
                             querylog : 开启或关闭查询日志;
                             trace : 递增debug级别;
                             trace LEVEL : 指定使用的级别;

bind 中基础的安全相关的配置
acl : 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;
示例 :
acl mynet {
172.16.0.0/16
}
bind 有四个内置的acl :
none : 没有一个主机
any : 任意主机
local : 本机
localnet :本机的IP同掩码运算后得到的网络地址;
注意 : 只能先定义,后使用,因此,其一般定义在配置文件中options的前面;
访问控制指令:
allow-query {} : 允许查询的主机:白名单
allow-transfer {} : 允许区域传送的主机 :白名单;
allow-recursion {} : 允许递归的主机;
allow-update {} : 允许更新区域数据库中的内容;

bind view :         
            视图: 
                   一个bind服务器可定义多个view,每一view中可定义一个或多个zone;
                  每个view用一来匹配一组客户端;
                  多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

            例子: 
                 view VIEW_NAME {
                              match-clients { };

                     }

            注意 :
                    (1)一旦启用了view,所有的zone都只能定义在view;
                    (2)仅有必要在匹配到允许递归请求的客户所在view中定义根区域
                   (3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表;

        智能DNS : 
               dnspod :
               dns.la