DNS服务是域名转换服务。

    原理及功能可以参考http://kmk0226.blog.51cto.com/5975994/1678180

    


今天的博客是介绍DNS服务的编译安装,以及安装之后如何配置DNS服务,让服务能正常运行。


    在Linux系统中,DNS服务在Bind这个程序中配置的。

    首先,要编译安装DNS服务,需要先去下载源码包。

    源码包可以在bind官方网站下载

        bind官方站点:www.isc.org

    

        wKioL1W7daHyibRkAABTISyDLpQ169.jpg


            有9.9.X与9.10.X的版本,我们这里以9.9.X的版本来编译安装。

            X代表子版本,可能版本会跟图片中不一样


        先下载源码包到Linux系统中。

            具体如何下载可以先下载到win系统中再共享方式到linux系统中,如果linux系统有图形界面可以直接到官方网站下载。


        下载完成之后,解压源码包

           

 tar -xvf bind-9.9.7-P1.tar.gz :解压源码包
 cd bind-9.9.7-P1    :进入解压后的目录
 ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --enable-threads --disable-chroot --disable-ipv6    :运行configure程序,生成配置脚本文件makefile文件

        

        --prefix= :指定单独的安装路径,为了删除方便,一般放在/usr/local/下

--sysconfdir= :存放配置文件,配置文件一般在,/etc/下

--enable-threads:默认关闭的,启用线程工作模式,拥有更好的性能

--disable-ipv6:关闭IPV6的功能

--with-dlz--mysql:基于mysql安装


        

        编译完之后直接可以安装        

make && make install    :编译与安装,编译安装都是根据以上配置脚本文件中的配置来编译与安装的

        

        安装完之后程序会放在原来指定的安装路径中。

            我们这里的安装路径在:/usr/local/bind9

                安装目录下有很多的工具与库文件     

        bin,sbin:存放工具,如dig。

share:存放man

man -M /usr/local/bind9/share/man

可以查看新版的man

lib:库文件




        虽然已经安装完成了,但是我们的服务还没有完全安装完成,因为我们编译安装的服务程序,是不会自动帮忙更新man、PATH、库文件,以及服务启动脚本


        所以我们需要自己导入与编写。


        首先:先导入man

    vim /etc/man.config

            修改man配置文件

                MANPATH /usr/local/bind9/share/man

                将/usr/local/bind9/share/man加入到MANPATH参数中
         

MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
MANPATH /usr/local/share/man
MANPATH /usr/X11R6/man
MANPATH /usr/local/bind9/share/man


        导入man文件之后,我们要将我们的bind工具加入到PATH中

        vim /etc/profile.d/bind.sh 
         在/etc/profile.d目录中新建一个bind.sh的shell脚本
        脚本中写入:export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH

        注意:最后的$PATH一定要加,这是为了添加原先已经有的PATH,否则原来的就不能用了。


        脚本添加完毕重启系统,脚本将会自动将我们的新工具添加到PATH中


        最后我们查看下库文件。

            所有的库文件都是静态的以.a结尾的库文件,所以不需要安装

                如果遇到动态的库文件就需要安装了,结尾为.so的为动态库文件

            

        到此我们的服务就安装完成了,接下去就是要提供配置文件,让服务运行起来了。

            编译安装的服务是不会自带配置文件的。


        DNS的配置文件都放在/etc/named目录下

        

        

先进入/etc/named 

cd /etc/named
    
然后新建named.conf这个配置文件
vim named.conf

    
options {

   directory "/var/named";
   recursion yes;


};

#这里options代表是配置文件中的全局配置
    directory:是配置文件中的工作目录,一般都位置为/var/named目录中
    recursion yes:代表是否允许递归,一定要保留,看过DNS原理的都知道DNS服务器是以递归方式工作的,所以这一项必须要开启
        全局配置只要开启两项就能正常工作了
        其他的配置可以参考man文件来配置。毕竟我们已经更新了man文件了,嘿嘿

zone "." IN {

  type hint;
  file "named.ca";

};

zone "localhost" IN {

  type master;
  file "localhost.zone";
  allow-update { none;  };

};

zone "0.0.127.in-addr.arpa" IN {

   type master;
   file "127.0.0.zone";
   allow-update { none; };
   
zone "kmk.com" IN {

  type master;
  file "kmk.zone";
  allow-update { none; };

};
   
   
   zone代表区域配置
       zone "域名"   IN{
	type {master(主区域)|slave|hint(根区域)|forward};  :类型
	
	file "mageedu.com.zone";     :文件	
	
	allow-update { none; };    :域DHCP服务联动更新,域名IP,绝对不允许这是安全问题	
	
			    };
			    
            反解域需要将IP地址倒过来写,并且添加.in-addr.arpa
                如上:0.0.127.in-addr.arpa
               
       注意:所有的语句后面都需要用;分号结尾
       
 主配置文件建立完毕,我们要先修改下权限,让配置文件可以被named用户访问,如果没有named用户需要先建立,named的用户与组
     id named:查看下是否有建立用户组
     
        没有的话新建用户与组
    useradd -r named    :添加用户-r代表添加的是系统用户
    groupadd named    :添加组
    
    修改属组属主及权限:chown root:named named.conf
		        chmod 640 named.conf

        

    以上为主配置文件的建立,配置完主配置文件,我们还需要配置区域配置文件


        进入刚刚全局配置中的工作目录

            

先创建工作目录与修改属组属主,编译安装的服务,工作目录是没有的
       
创建目录:mkdir /var/named/slaves -pv
		chown root:named /var/named/
		chown named:named /var/named/slaves/
		chmod 750 /var/named/
		chmod 770 /var/named/slaves/
		
		
    目录创建完成,先获取根域的节点信息
        dig -t NS . @a.root-servers.net > /var/named/named.ca
            用dig工具获取到根节点的信息,然后发送到/var/named/named.ca这个配置文件中
       这样就配置玩根节点了
       
       然后配置本地域名解析
           在配置.zone文件
           vim localhost.zone
           
           $TTL 3600    :定义统一的缓存时长单位是秒钟
            @       IN      SOA     localhost.      admin.localhost.        (SOA记录,文件必须要的。
                        2015072207    :序列号,最多十个数字
                        2H    :刷新时间间隔 ,每两个小时同步一次
                        10M    :如果主DNS服务器不在线,每十分钟重试一次
                        7D    :试7天之后,还不在线断线
                        1D    :否定回答TTL值 ,1天
    
                            )
                    IN      NS      localhost.    :ns记录,第一行的区域名称与上面一条一样可以省略
                    IN      A       127.0.0.1    :A记录
                    
                    
         vim 127.0.0.zone:这个是反向解析区域文件
             $TTL 3600
                @       IN      SOA     localhost.      admin.localhost. (
                                        2015072305
                                        3H
                                        15M
                                        7D
                                        1D
                )
                        IN      NS      localhost.
                1       IN      PTR     localhost.
            
          vim kmk.zone    :配置自定义的区域文件
              $TTL 3600
                @       IN      SOA     ns.kmk.com.     admin.kmk.com. (
                                        2015072301
                                        2H
                                        10M
                                        7D
                                        1D
                )
                        IN      NS      ns.kmk.com.
                        IN      MX      10      mail.kmk.com.
                ns.kmk.com.     IN      A       192.168.142.128
                www.kmk.com.    IN      A       192.168.142.128
                mail.kmk.com.   IN      A       192.168.142.129 
                    
     区域解析库文件说明:
         区域解析库:
	资源记录:rr(resource record),一行一个资源记录
		有类型的概念:用于此记录解析时的属性
		
	SOA:Start Of Authority,起始授权记录,一个区域文件,只能有一个soa文件记录
	NS:Name Server,代表名称服务器
	MX:Mail eXchange,邮件交换器,MX记录有优先级属性(0-99,越小越高)
	A:FQDN --> IP:专用于正向解析库,不能域PTR同时在一起
	PTR:IP --> FQDN:专用于方向解析库,不能域A同时在一起
	AAAA:FQDN --> IPV6,专用于正向解析库
	CNAME:Canonical Name,正式名称,别名记录
	    张三的正式名称是tom,代表张三是别名
                    
                    
                    
            配置完之后修改属组属主及权限:
            
	    	chgrp named 127.0.0.zone localhost.zone named.ca kmk.zone:修改属组
		chmod 640	127.0.0.zone localhost.zone named.ca kmk.zone :修改权限		

        

现在一个缓存DNS服务器已经完成

可以尝试启动缓存名称服务器

named-checkconfig:检查配置文件是否有语法错误

named 命令可以直接启动named服务

-h:查看版主文件

-g:前台启动

-u:启动服务

-c:启动服务的配置文件在哪

named -g -u named -c /etc/named/named.conf:启动服务


成功之后出现字符:

all zones loaded

running

            出现以上字符代表已经启动成功,但是不会继续下去,如果想要测试,可以新建窗口进行测试

            测试方法为

                dig -t PTR kmk.com @192.168.142.128

                    这个代表解析kmk.com这个域里面的所有信息,而解析服务器为192.168.142.128这个服务器IP为你现在建立的DNS服务器IP,如果解析出来了代表成功了。


            

        如果测试成功,那么不要高兴,因为你的服务器还是个半成品,我们要需要导入rndc密钥信息

            否则你的服务器将会很不安全。

        

        导入rndc

        

        rndc-confgen -r /dev/urandom > /etc/named/rndc.conf

    利用rndc-confgen将urandom中的一个随机数添加至rndc.conf

                urandom:一个提供随机数的目录

    -r:代表利用urandom中的随机数,不是熵池中的随机数

再将rndc.conf中的key段发送到/etc/named/named.conf中

    options {

   directory "/var/named";
   recursion yes;


};

#rndc发送过来的key信息
#Use with the following in named.conf, adjusting the allow list as needed:
 key "rndc-key" {
        algorithm hmac-md5;
        secret "4NNN/HzlnbeGLOewSowoaQ==";
 };


zone "." IN {

  type hint;
  file "named.ca";

};

zone "localhost" IN {

  type master;
  file "localhost.zone";
  allow-update { none;  };

};

zone "0.0.127.in-addr.arpa" IN {

   type master;
   file "127.0.0.zone";
   allow-update { none; };
};

zone "kmk.com" IN {

  type master;
  file "kmk.zone";
  allow-update { none; };

};

以上是最后完整的全局配置文件信息


最后再重读named.conf这个配置文件

killall -HUP named

chmod 440 rndc.conf:修改rndc.conf权限


     到此DNS服务的配置就全部完成了,可以使用named -g -u named -c /etc/named/named.conf来启动服务,但是这样很不方便,可以再编辑一个服务脚本来控制启动关闭及重启之类的操作。

    如用service机制,具体可以参考cent OS 6的service脚本编辑来写脚本