Domain Name Server

    监听tcp53和udp53端口。把一种名称解析为另一种名称,字串型名称与数据型名称。解析时把用户提供的名称,查询解析库,得到另外一名称。查询,把解析后的名称返还用户。

查询分为两种

      存储名称与地址对应表格式。

          文本文件,对大量数据处理难以应付。但在bind中速度是最快的,因为bind会把文本文件加载为数据库放在内存中。

          关系型数据库,由于有索引,对大量请求比文本存储性能好。

          LDAP:lightweight directory access protocol,工作于tcp389端口。比关系型数据库快速更快。



组织域:.com  .rog .net .mil .edu .gov .info .cc

国家域:.cn .us .tw .hk .jp

反向域: .in-addr.arpa



区域解析库:

    资源记录类型

                SOA: start of authority ,起始授权记录,一个区域文件只能有一个。当前区域主DNS的fqdn.

                NS:name server , 可以有多个,每个负载一个领域

                MX:mail exchange  邮件交换器,指定本域的邮件服务器。可以有多个,每个服务器有优先级,(0-99),数据越小优先级越高

                A:fqdn与ip对应  , 专用于正向解析库

                AAAA:fqdn与ipv6对应,专用正向解析库。

                CNAME:canonical name,正式名称。

                PTR: ip与fqdn对应,专用反向解析库

                ttl值: 指定本次解析返还给请求者后,请求者最多可以缓存时间。如果不写,则使用默认。

    


查询过程

    hosts --> local dns cache  -->   dns --> dnscache  -->  dns迭代查询



DNS服务器类型

    主dns服务器,是本域的权威服务器。

    从dns服务器,间断性的向其它dns服务器同步区域数据(一般是主服务器),同步的过程叫区域传送。

        zone tracser, 解析库文件同步过程,区域传送,使用tcp协议53端口传送,以保证传输的区域文件可靠性。 两种机制:从服务器会周期性检查更新,和主服务器端更新后通知从服务器。

                完全区域传送:axfr   一般从服务器第一次向主服务器同步,会同步全部区域数据。

                增量区域传送:ixfr     有了全部区域文件后,只同步区域文件更新过的数据。      

    缓存dns服务器

    转发dns服务器



    服务脚本:/etc/rc.d/init.d/named

    主配置文件:/etc/named.com

    bain的主程序: /usr/sbin/named

            /usr/sbin/named -u named  :使用named用户启动named进程,只有管理员才可以启动。只有管理员才可以使用小于1024端口。

    检测主配置文件是否有语法错误命令: /usr/sbin/named-checkconf

    检测区域配置文件是否有语法错误命令: /usr/sbin/named-checkzone

    区域文件索引:/etc/named.rfc1912.zones

    区域解析库文件:/var/named/zone结尾的文件。

    解析localhost为127.0.0.1区域配置文件:/var/named/named.localhost

    解析127.0.0.1为localhost区域配置文件:/var/named/named.loopback

    从服务器同步的区域文件在:/var/named/slaves

==================================================================    

安全特性    

==================================================================

    服务进程以系统用户身份运行,用户名:named

    可以运行于chroo模型下,即工作于jail环境。运行在假根下。/var/named/chroot/

区域传送安全限制

   bind内置acl

    allow-transfer { none;|any;|等 }

    none:不让任何人同步

    any:任何人都可以同步

    local:本机

    localnet:本机所在的网络

    自定义acl

    acl "名字"  {                               算定义acl,此为资源统一管理,以方便在下面配置中调用。

    ip;

    ip;                                       ip格式 192.168.1.1;

    network;                            网络格式  172.16.0.0/16;

    };

    allow-query    { ip;|!ip; };                    定义只有花括号中的ip可以请求此dns服务器。ip前面加!表示取反,除了此ip其它ip都可以请求查询。

    allow-recursion { ip; };                递归白名单,只有在花括号中的ip才给递归查询。花括号中必须包括当前主机。可以写自定义白明单。

===================================================================

 相关命令

===================================================================

安装程序包与查看DNS运行状态

-----------------------------------------------------------------------------------------------------------------    

使用service服务控制脚本查看

[root@wukui ~]# service named status                          查看dns服务运行状态

version: 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1                版本信息,在redhat系统上编译

CPUs found: 4                                                                    CPU个数

worker threads: 4                                                               工作线和有多少个    

number of zones: 19                                                          有多少个区域

debug level: 0                                                                     测试级别有没有打开,比日志记录更详细,测试时使用

xfers running: 0                                                                 

xfers deferred: 0

soa queries in progress: 0

query logging is OFF                                                         查询日志是没有打开,打开后客户端每次查询请求都会记录于/var/log/messages。一般不开,急剧影响性能。

recursive clients: 0/0/1000                                                 递归客户没数量

tcp clients: 0/100                                                                有没有从服务器复制区域

server is up and running                                                    服务运行状态

named (pid 2826) is running...                                          服务进程的pid

使用rndc命令查看,显示与上条命令一样。

# rndc status               

-----------------------------------------------------------------------------------------------------------------

测试命令

-----------------------------------------------------------------------------------------------------------------

host

    -t:指定资源记录类型与名称

     # host -t A www.wukui.net 172.16.2.10     指定解析A记录,www.wukui.net,使用172.16.2.10这台DNS

      [root@wukui named]# host -t NS wukui.net 172.16.2.10           通过172.16.2.10查看wukui.net这个域的NS是谁

      # [root@wukui named]# host -t NS wukui.net 172.16.2.10       查看wukui.net域的邮件服务器


nslookup

    server ip : 指定dns服务器ip

    set type={A|SOA|NS|MX}

DNS子域授权,主从同步,视图智能DNS,安全特性_子域


dig   

    # dig -t MX -trace wukui.net @172.16.2.10   此命令可以跟踪指定dns迭代查询过程

    # dig -t AXER baidu.com @8.8.8.8      此命令可以拿到baidu.com域的完整dns数据库,前提对方允许。

    dig -t TYPE name @server

DNS子域授权,主从同步,视图智能DNS,安全特性_bind_02


rndc  控制dns服务,可以远程控制,端口为tcp953。出于安全性考虑,一般不允许远程控制。rndc控制dns服务通过交换密钥验证。

        reload :重新装载主配置文件和各区域解析库,可以装载单个区域解析库。

        reconfig:重读主配置文件。

        status:查看dns服务工作状态。

        flush:清空所有已缓存的查询信息。

        retransfer :重新同步区域解析文件。从服务器执行。

        notify   :重新给从服务器发送通知。主服务器执行。

        stop:停止dns服务。

        querylog:启用或禁用查询日志。启用后,任何查询请求都会被记录下来,日志文件在/var/log/messages。此功能只能在调试时使用,否则会极大降低服务器性能。

        

        

===========================================================

主配置文件解释  /etc/named.conf

===========================================================

    acl "名字"  {                               算定义acl,此为资源统一管理,以方便在下面配置中调用。

    ip;

    ip;                                       ip格式 192.168.1.1;

    network;                            网络格式  172.16.0.0/16;

    };

options {                                               全局配置段,在此配置对全局生效。有些特性可以写到区域选项中,可以准确定义区域工作特性。

        listen-on port 53 { 127.0.0.1; };     监听的端口和ipv4地址,如果127.0.0.1只能为自己服务。

        listen-on-v6 port 53 { ::1; };            监听的端口与ipv6地址

        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; };            允许为那些主机访问

        recursion yes;                                是否允许递归查询,给所有人递归。

        forward {only;|first;};                       开启转发模式,only如果递归到指定服务器没有查到,自己不再查询。first,如果递归到指定服务器没有查到,自己开始迭代查询。

        forwarders { ip; };                            开启转发模式后,请求转发到那个服务器上。

        allow-recursion { ip或自定义acl };    定义那些主机可以请求查询。

        dnssec-enable yes;                        是否为查询过程加密

        dnssec-validation yes;

        dnssec-lookaside auto;

        /* Path to ISC DLV key */

        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

};

------第二段--------------

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";                        设定主本配置文件还包括的配置文件



=================================================================

主配置文件之区域定义文件解释 /etc/named.rfc1912.zones

================================================================

zone "localhost.localdomain" IN {   正向区域写法:定义区域名

        type {master|slave|forward|hint};       设置区域类型,(hint用来定义根)

        file "named.localhost";               区域解析库文件名

        allow-update { none; };               ddns安全特性,只有{}中的ip的dhcp服务器才可以通知dns更新区域解析库。这里还可以写密钥,密钥方式更安全。

        allow-transfer { 172.16.2.12; };    只允许172.16.2.12这个ip可以同步区域数据。本机都不可以。如没有此项所有人都可以同步。

};


zone "16.172.in-addr.arpa." IN {       反向区域写法

        type master;                                设置区域类型    

        file "172.16.2.zone";                    区域解析库文件名

};

 

zone "wukui.net" IN {                        转发服务器写法。这里定义wukui.ne域内的主机转发

        type forward;                              标记为转发类型

        forward only;|first;                      转发类型

        forwarders { ip; };                        转发到那个ip

};


====================================================================

区域数据库正向解析文件格式和反向文件解释

====================================================================

名称解析ip

-----------------------------------------------------------------------------------------------------------------

$TTL 1D                                                       定义客户端缓存时长 ,单位,时,天,周     

$ORIGIN    wukui.net.                                此变量定义了,如果下面的fqdn名称使用了简写,简写后的名称会自动跟上wukui.net.     

@ IN SOA @ ns.wukui.net.  wukui.gmail.com (                    (当前区域名称,@为简写)(IN固定格式)(标记此区域为起始授权)(当前区域主DNS) (管理员邮箱,@用点代替)

                                        0 ; serial                    当前区域数据库序例号,最多十位数字

                                        1D ; refresh               向主DNS同步数据库的时间         

                                        1H ; retry                   连接主DNS不成功后每隔多少时间再联系

                                        1W ; expire                最多重试时间。

                                        3H ) ; minimum        未查询到的条目缓存时间,在此期间不会再次查询此主机名。

    IN       NS ns.wukui.net.                                指定本域的dns服务器,可以有多个。(ns.wukui.net.为全部名称,也可以写成ns。)

    IN       MX  10 mail .wukui.net.                     指定本域的邮件服务器,并指优先级,直小越优先。

fly.wukui.net.        IN    NS        ns.fly.wukui.net.     子域授权,指定fly.wukui.net.子域NS记录。可以简写。

ns        IN    A  172.16.2.10                                指定ns服务器地址,一定要指定。

ns.fly    IN    A    192.168.1.20                            指定子域的ns服务器ip地址。

www     IN A 8.8.8.8                                          设定www主机对就的A记录。

mail        IN   A  10.0.0.1                                    一个名称对应多个ip为了使用dns做负载均衡

ftp            IN  A 172.16.0.1

pop         IN    CNAME    mail.wukui.net.                         设定pop是mail的正式名称,mail.wukui.net。可以简写为mail

------------------------------

ip解析名称

------------------------------

$TTL 1D 

$ORIGIN   2.16.172.in-addr.arpa.                        如果下面的ip有简写,自动补上此串
@ IN SOA @ ns.wukui.net. ( 
                        0 ; serial 
                        1D ; refresh 
                        1H ; retry 
                        1W ; expire 
                        3H ) ; minimum 
                        IN NS ns.wukui.net. 
10.2 IN PTR wukui.wukui.net.                                     ip与fqdn(必须写完整)的对应。这里写成10.2是因为主配置文件中zone "16.172.in-addr-arpa"已经定义了此ip的前缀。
15.2.16.172.in-addr.arpa. IN PTR WWW.WUKUI.NET      (15.2.16.172.in-addr.arpa. 为ip的全写)

 

====================================================================

DNS主从同步

====================================================================

主从同步的前题

---------------------------------------------

    1,时间同步,主从两台服务器的时间必须要统一,可以使用ntp协议完成。

           # ntpdate 172.16.0.1              向ntp服务器同步时间

           # crontab -e                            为了保证以后时间统一,做定时任务,每隔3分钟就同步一次时间。

            */3 * * * * /sbin/ntpdate 172.16.0.1 &> /dev/null

    2,bind的使用版本,从服务器版本要与主服务器一样或者比主服务器的版本高。二者相同最好。

    3,需要在域名注册商再添加一个NS记录,以便互联网上的主机通过父域可以找到它。

    4,在主dns服务器的区域配置文件中加入从服务器的NS记录,并定义从服务器的ip。

        

------------------------------------------------          

区域文件定义

 

      zone "区域名" IN {    指定区域名称
        type slave;                   指定本工作模式
        file "slaves/区域文件名";        指定同下来的数据文件名,rpm包安装后一般为/var/named/slaves。专存放同步过来的数据文件。
        masters {  172.16.0.1; 172.16.100.1;  };    指定同步的服务器,一般是主服务器,(可以为从服务器)。如果指定多个,第一个联系为上会找第二个同步。
};

--------------------------------------------

====================================================================

bind view  , 视图,根据客户端的来源不同,将同一个名称解析至不同的ip。智能DNS。判断顺序自上而下匹配,需要本机解析的区域定义都需要放在视图中(包括点区域定义),

-----对查询请求的地址归类-------

acl "名称" {                        把访问客户端分类,比如这里电信一类
    172.16.0.0/16;
};
acl "unicom" {                            第二类客户端,
    192.168.0.0/24;
};
-------定义视图----------------------
    view "名称" {                                           匹配第一个视图
        match-clients { acl;或ip;  };
        zone "wukui.net" IN {
            type master;
            file "区域库文件路径";
        };
        区域二................
};
    view "名称二" {                                        匹配第二个视图
        match-clients { acl;或ip; };
        zone "wukui.net" IN {
            type master;
            file "区域库文件路径";
        };
        区域二................
};
       view "名称二" {                                       如果上两个视图匹配不到,默认匹配此视图
        zone "wukui.net" IN {
            type master;
            file "区域库文件路径";
        };
        区域二................
};

==================================================================

配置正向反向解析DNS,并配置从服务器。两台服务器时间必须一样。

1,配置主配置文件,加入正向解析与反向解析,并且设定只允许本机与从服务器可以请求

2,配置解析库文件。位于/var/named/。并在此文件中指明第二个服务器的NS记录与A记录。

3,配置从dns服务器,把test.com区域同步到本机

4,使用客户端测试

DNS子域授权,主从同步,视图智能DNS,安全特性_dns_03

在主dns/etc/named.rfc1912.zones文件中定义正反向区域

zone "test.com." IN {
        type master;
        file "test.com.zone";
        allow-update { none; };
        allow-transfer { 192.168.0.20; };
};
zone "16.172.in-addr.arpa" IN {
        type master;
        file "16.172.zone";
        allow-transfer { 192.168.0.20; };
};


区域解析库文件/var/named/test.com.zone

$TTL 1D
@ IN SOA ns.test.com. admin.test.com. (
                2014080601
                1H
                5M
                1W
                1D )
        IN NS ns
        IN NS ns2
ns IN A 172.16.2.10
ns2 IN A 192.168.0.20
www IN A 172.16.0.1


区域解析库文件/var/named/16.172.zone

$TTL 1D
@ IN SOA @ ns.test.com. (
                        2014080601
                        1H
                        5M
                        1W
                        1D )
        IN NS ns.test.com.
        IN NS ns2.test.com.
10.2 IN PTR ns.test.com.

从服务器配置文件中写入(/etc/named.rfc1912.zones)

zone "test.com" IN {
        type slave;
        file "slaves/test.com.zone";
        masters { 172.16.2.10; };
};
zone "16.172.in-addr.arpa" IN {
        type slave;
        file "slaves/16.172.zone";
        masters { 172.16.2.10; };
};


两台服务器重启服务,配置完成,

============================================================

子域授权,test.com授权给192.168.0.20为hello.test.com的ns服务器

1,父域服务器授权给子域,

2,子域服务器配置子域解析文件和解析库。

DNS子域授权,主从同步,视图智能DNS,安全特性_dns_04

1,配置父域服务器解析库,添加子域服务器的NS记录,并且指定子域的dns服务器为192.168.0.20。在/var/named/test.com.zone文件中加入。

 hello    IN   NS    ns3.hello.test.com.
 ns3.hello.test.com.    IN        A       192.168.0.20

2,子域dns服务器在/etc/named.rfc1912.zones文件中加入

zone "hello.test.com" IN {
        type master;
        file "hello.test.com.zone";
};

    配置子域解析库文件/var/named/hello.test.com.zone

$TTL 1D
@ IN SOA ns.hello.test.com. admin.test.com. (
                        2014080601
                        1H
                        5M
                        1W
                        1D )
        IN NS ns
        IN MX 10 www
ns IN A 192.168.0.22
www IN A 192.168.2.22


配置完成。

===================================================================

bind视图配置,根据客户端的ip不一样,返还给客户端的ip不同。a区的客户机请求www.test.com解析为192.168.0.1。b区的客户机请求www.test.com解析的ip为172.16.0.1。

配置大体过程:

    1,配置/etc/named.conf定义alc,关闭安全传输功能。

    2,配置/etc/named.rfc1912.zones ,定义三个view,第一个解析a区域,第二个解析b区域,第三个解析其它。在view中定义match-clients和为此网络解析的区域。

    3,配置区域解析数据文件/var/named/test.com.zone.a和/var/named/test.com.zone.b。

    4,客户端配置dns为172.16.2.10,设置ip为192.168.0.100测试,设置ip为172.16.2.100测试,是否把www.test.com解析到定义好的ip。

DNS子域授权,主从同步,视图智能DNS,安全特性_bind_05

主配置文件如下。/etc/named.conf------------------------------------------------

acl "b" {                        自定义acl,b区
 172.16.0.0/16;
};
acl "a" {                        自定义acl,a区
 192.168.0.0/24;
};
options {
 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";
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
include "/etc/named.rfc1912.zones";


主配置区域文件/etc/named.rfc1912.zones------------------------------

view "192.168.0.0" {                        第一个视图区,给acl定义a网络的主机解析
 match-clients { a; };                        acl列表a中的主机匹配此视频
 zone "test.com" {
  type master;
  file "test.com.zone.a";
 };
 zone "." IN {
  type hint;
  file "named.ca";
 };
 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; };
 };
 zone "wukui.net" IN {
  type master;
  file "wukui.net.zone";
  allow-transfer { 172.16.2.12; };
 };
 zone "16.172.in-addr.arpa." IN {
  type master;
  file "172.16.2.zone";
 };
};

//-------------------------------------------------------------------------------

view "172.16.0.0" {                 第二个视图区,给acl定义的b网络主机解析               
 match-clients { b; };              定义匹配b网络
 zone "test.com" {
  type master;
  file "test.com.zone.b";
 };
 zone "." IN {
  type hint;
  file "named.ca";
 };
 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; };
 };
 zone "wukui.net" IN {
  type master;
  file "wukui.net.zone";
  allow-transfer { 172.16.2.12; };
 };
 zone "16.172.in-addr.arpa." IN {
  type master;
  file "172.16.2.zone";
 };
};


//-------------------------------------------------------------------------------

view "other" {                                       为除了a和b的网络解析,这些请求是内网主机,所以只给内网主机服务。

  zone "." IN {
   type hint;
   file "named.ca";
  };
  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; };
  };
  zone "wukui.net" IN {
   type master;
   file "wukui.net.zone";
   allow-transfer { 172.16.2.12; };
  };
  zone "16.172.in-addr.arpa." IN {
   type master;
   file "172.16.2.zone";
  };
};

区域库文件配置----------------------------

[root@wukui ~]# cat /var/named/test.com.zone.a
$TTL1D
 
@    IN    SOA    ns.test.com.    admin.test.com. (
        2014080601
        1H
        5M
        1W
        1D )
    IN    NS    ns
    IN    MX    1    mail
ns    IN    A    172.16.2.10
mail    IN    A    172.16.2.10
wwwI    N    A    192.168.0.1
[root@wukui ~]# cat /var/named/test.com.zone.b
$TTL 1D
@    IN    SOA    ns.test.com.    admin.test.com. (
        2014080601
        1H
        5M
        7W
        1D )
    IN NS    ns 
    IN    MX    1mail
ns    IN    A    172.16.2.10
mail    IN    A    172.16.2.20 
www    IN    A    172.16.0.1

===================================================================

完成!!