互联网的诞生,衍生了更多的服务,每个主机可以通过IP地址上网,访问相应的服务,面对这么多IP地址,人们就想出了采用名称来访问服务的办法。这样DNS就应运而生,它能够实现IP和域名间的相互转换。下面笔者就详细介绍linux系统下的DNS。

简介:DNS是应用层协议,监听53端口,能够实现IP和域名的相互解析,其中FQDN-->IP为正向解析,IP-->FQDN为反向解析。域名是一个倒立的树,上级域能够查询到下级,而下级不知道上级域,且它只知道根。

原理:当进行域名解析时,网络中有两种查询:递归查询和迭代查询,查询到的结果返回给用户。

DNS相关术语:

  1. 查询类型:递归查询(recursive)当用户访问DNS服务器,此时DNS会不断询问,直至给出结果,这样会消耗大量的互联网资源。 
  2.    例:当用户访问tech.kingshuo.com时,DNS服务器首先会去询问根.,根会指定去访问com域,查询到kingshuo.com域时,然后再去找tech.kingshuo.com,然后就给出查询结果 
  3.           迭代查询  当用户访问DNS服务器时,此时DNS服务器会指出谁会知道相应的域 
  4.           实际互联网中,为了很好的利用资源,会采用结合两种查询共同实现。 
  5.           
  6. DNS服务器类型:主服务器 
  7.                辅助名称服务器 
  8.                cacheing-name服务器 
  9.            主服务器无法负载查询时,辅助名称服务器会启用,给出相应的查询结果。缓存服务器能够缓存解析记录,下次查询时能够迅速的给出结果。 
  10.                主机服务器 
  11.                从服务器 
  12.             从服务器会从主服务器上获得一份DNS名称解析的记录,这样能够加快域名的解析。 
  13.  
  14. 区域类型: 
  15.        hint 根域,也称为跟提示 
  16.        master 主服务器 
  17.        slave  从服务器 
  18.   
  19. 区域传送:axfr  完全区域传送   
  20.           ixfr  增量区域传送 
  21.  比较主从服务器的序列号,当主的大于从的就开始区域传送,然而在传送时间间隔内主机服务器宕掉后,会启用notify机制通知从服务器。 
  22.  例: 
  23.    #dig -t  axfr kingshuo.com @192.168.0.101 
  24.  
  25. 域和区域: 
  26.    域是逻辑概念,其中包括正向区域和反向区域 
  27.    区域是物理概念 
  28.   
  29. 查询过程: 
  30.     查找/etc/hosts文件-->查找本地dns缓存-->server缓存-->authoritive 
  31.     
  32. 查询结果:权威答案 
  33.           非权威答案 
  34.     权威答案是负责区域返回的结果,而非权威答案是缓存记录或者从服务器返回的结果 
  35.     例:使用dig命令查询时,有aa字样的为权威答案,否则则是非权威答案 
  36.         ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1     



安装DNS服务器:
    #yum  install bind
   
编辑dns的配置文件: 
  

  1. #vim /etc/named.conf 
  2.      options { 
  3.          directory "/var/named";<---区域存放的目录 
  4.      }; 
  5.  
  6.      zone "." IN { 
  7.          type hint;          <----区域类型 
  8.          file "named.ca";    <----区域文件 
  9.      }; 
  10.  
  11.      zone "localhost" IN { 
  12.          type master; 
  13.          file "localhost.zone";<----正向区域类型文件 
  14.      }; 
  15.  
  16.      zone "0.0.127.in-addr.arpa" IN { 
  17.          type master; 
  18.          file "named.local"; <---反向区域文件 
  19.      }; 



编辑区域文件:
  正向区域文件localhost.zone
  

  1. $TTL 86400<------最大生存时间 
  2.    $ORIGIN localhost. 
  3.    @    IN    SOA    ns.localhost.    admin.localhost. ( 
  4.                 2011082201<-----序列号 
  5.                 1H<-------发送间隔时间 
  6.                 10M<-----重试时间 
  7.                 7D<------过期时间 
  8.                 1D )<----否定回答间隔时间 
  9.             IN       NS        ns.localhost. 
  10. localhost IN      A     127.0.0.1 



   反向区域文件named.local
   

  1. $TTL    86400 
  2.     @       IN      SOA     localhost. root.localhost.  ( 
  3.                                       1997022700 ; Serial 
  4.                                       28800      ; Refresh 
  5.                                       14400      ; Retry 
  6.                                       3600000    ; Expire 
  7.                                       86400 )    ; Minimum 
  8.               IN      NS      localhost. 
  9.     1         IN      PTR     localhost. 


其他DNS命令:
 

  1. #dig  -t NS . @a.root-server.net >  /var/named/named.ca<--生成named.ca文件 
  2.   #dig  +rescurs  -t  A  www.baidu.com   <---强行进行递归查询 
  3.         +norescus                       <---不要递归查询 
  4.         +trace   -t  A  www.baidu.com   <---追踪解析过程 
  5.   #service  named  configtest           <---检查配置文件 
  6.   #named-checkconf                      <---检查配置语法错误                   
  7.   #named-checkzone  "localhost"  /var/named/localhost.zone<---检查区域语法错误 
  8.     
  9.   #service named start <----重启DNS服务 
  10.   #dig -x  192.168.0.5 <---反向解析 
  11.   #rndc-confgen > /etc/rndc.conf <---手动生成rndc 
  12.      rndc是远程配置工具  953端口 
  13.   #rndc reload   重载 
  14.   #rndc  stop    停止named 
  15.   #rndc   flush  清空服务器缓存 
  16.   #rndc   status 查看状态 



---------------------------------------------------------------------------------
案例解析: 考虑到某公司内网客户端众多,且彼此间访问经常需要用到主机名的情况下,
 公司计划自建一台DNS服务器kingshuo.com,为了防止主服务宕掉后用户无法相互访问,此时还搭建一个从DNS服务器;为了内部快速解析tech.kingshuo.com,采取了子域授权;区别内部和外部DNS解析
 
 安装DNS软件:
   #yum  install  bind
 #####################主DNS服务器的配置##########################
 编辑/etc/named.conf文件:
  

  1. #vim  /etc/named.conf 
  2.      acl internel { 
  3.         192.168.0.0/24;<----内网地址 
  4.         127.0.0.0/8; 
  5.      }; 
  6.      
  7.      acl externel { 
  8.         172.16.0.0/16;<----外网地址 
  9.      }; 
  10.      
  11.         options { 
  12.            directory "/var/named"; 
  13.            recursion no; <-----不允许递归查询 
  14.         }; 
  15.         
  16.      view INNET {<-----建立视图 
  17.         match-clients { internel; }; 
  18.  
  19.         zone  "." IN { 
  20.             type hint; 
  21.             file "named.ca"; 
  22.         }; 
  23.         
  24.         zone "localhost" IN { 
  25.               type master; 
  26.               file "localhost.zone"; 
  27.         }; 
  28.  
  29.         zone "0.0.127.in-addr.arpa" IN { 
  30.               type master; 
  31.               file "named.local"; 
  32.         }; 
  33.         zone "kingshuo.com" IN { 
  34.              type master; 
  35.              file "kingshuo.zone.inter"; 
  36.              allow-transfer { 192.168.0.102; };  <-----只允许传送给此地址,防止信息丢失 
  37.         }; 
  38.        
  39.         zone "0.168.192.in-addr.arpa" IN { 
  40.              type master; 
  41.              file "192.168.zone.inter"; 
  42.              allow-transfer { 192.168.0.102; }; 
  43.         }; 
  44.      }; 
  45.      
  46.      view EXNET { 
  47.             match-clients { externel; }; 
  48.         recursion no; <-----不允许递归查询 
  49.         
  50.         
  51.         zone  "." IN { 
  52.             type hint; 
  53.             file "named.ca"; 
  54.         }; 
  55.         
  56.         zone "localhost" IN { 
  57.               type master; 
  58.               file "localhost.zone"; 
  59.         }; 
  60.  
  61.         zone "0.0.127.in-addr.arpa" IN { 
  62.               type master; 
  63.               file "named.local"; 
  64.         }; 
  65.         zone "kingshuo.com" IN { 
  66.              type master; 
  67.              file "kingshuo.zone.exter"; 
  68.         }; 
  69.        
  70.         zone "0.16.172.in-addr.arpa" IN { 
  71.              type master; 
  72.              file "172.16.zone.exter"; 
  73.         }; 
  74.      }; 


    
   编辑区域文件:
   #cd  /var/named
   #dig  -t NS . @a.root-server.net > named.ca
   相应的localhost.zone,named.local如上配置即可,此处不再赘余。
   vim  kingshuo.zone.inter
   

  1. $TTL  86400 
  2. $ORIGIN  kingshuo.com. 
  3. @    600  IN   SOA  ns1.kingshuo.com.  admin.kingshuo.com. ( 
  4.                         2011081801 
  5.                       1H 
  6.                              10M 
  7.                      7D 
  8.                           1D 
  9.     ) 
  10.                      IN     NS     ns1.kingshuo.com. 
  11.                      IN     NS     ns2.kingshuo.com. 
  12.                      IN     MX  10 mail.kingshuo.com. 
  13.   ns1                IN     A      192.168.0.101 
  14.   ns2                IN     A      192.168.0.102 
  15.   mail               IN     A      192.168.0.102 
  16.   www                IN     A      192.168.0.101 
  17.   admin              IN        A      192.168.0.101 
  18.   
  19.   tech.kingshuo.com  IN     NS     ns1.tech.kingshuo.com.<----声明子域 
  20.   ns1.tech.kingshuo.com IN  A      192.168.0.102 


 
  #vim 192.168.zone.inter
   

  1. $TTL  86400 
  2. @          IN   SOA  ns1.kingshuo.com.  admin.kingshuo.com. ( 
  3.                          2011081801 
  4.                             1H 
  5.                             10M 
  6.                             7D 
  7.                             1D 
  8.       ) 
  9.  
  10.                        IN     NS     ns1.kingshuo.com. 
  11.                        IN     NS     ns2.kingshuo.com. 
  12.    101                 IN     PTR    ns1.kingshuo.com. 
  13.    102                 IN     PTR      ns2.kingshuo.com. 
  14.    102                 IN     PTR      mail.kingshuo.com. 
  15.    101                 IN     PTR      www.kingshuo.com. 
  16.    101               IN     PTR      admin.kingshuo.com. 


  
   #vim kingshuo.zone.exter
    

  1. $TTL  86400 
  2. $ORIGIN  kingshuo.com. 
  3. @    600  IN   SOA  ns1.kingshuo.com.  admin.kingshuo.com. ( 
  4.                2011081801 
  5.                    1H 
  6.                    10M 
  7.                    7D 
  8.                    1D 
  9.      ) 
  10.                       IN     NS     ns1.kingshuo.com. 
  11.                       IN     NS     ns2.kingshuo.com. 
  12.                       IN     MX  10 mail.kingshuo.com. 
  13.    ns1                IN     A      172.16.0.101 
  14.    ns2                IN     A      172.16.0.102 
  15.    mail               IN     A      172.16.0.100 
  16.    www                IN     A      172.16.0.100 


  
   #vim 172.16.zone.exter
     

  1. $TTL  86400 
  2. @          IN   SOA  ns1.kingshuo.com.  admin.kingshuo.com. ( 
  3.                        2011081801 
  4.                      1H 
  5.                             10M 
  6.                     7D 
  7.                     1D 
  8.           ) 
  9.                           IN     NS     ns1.kingshuo.com. 
  10.                           IN     NS     ns2.kingshuo.com. 
  11.       101                 IN     PTR    ns1.kingshuo.com. 
  12.       102                 IN     PTR      ns2.kingshuo.com. 
  13.       100                 IN     PTR      mail.kingshuo.com. 
  14.       100                 IN     PTR      www.kingshuo.com. 



###################辅助名称服务器的配置####################

编辑/etc/named.conf文件:
   #vim /etc/named.conf
        

  1. options { 
  2.            directory "/var/named"; 
  3.         }; 
  4.         
  5.         zone  "." IN { 
  6.             type hint; 
  7.             file "named.ca"; 
  8.         }; 
  9.         
  10.         zone "localhost" IN { 
  11.               type master; 
  12.               file "localhost.zone"; 
  13.         }; 
  14.  
  15.         zone "0.0.127.in-addr.arpa" IN { 
  16.               type master; 
  17.               file "named.local"; 
  18.         }; 
  19.         zone "kingshuo.com" IN { 
  20.              type slave; 
  21.              file "slaves/kingshuo.zone"; 
  22.              masters { 192.168.0.101; }; 
  23.              allow-transfer { none; }; 
  24.         }; 
  25.        
  26.         zone "0.168.192.in-addr.arpa" IN { 
  27.              type slave; 
  28.              file "slaves/192.168.zone"; 
  29.              masters { 192.168.0.101; }; 
  30.              allow-transfer { none; }; 
  31.         }; 
  32.         
  33.        zone "tech.kingshuo.com"  IN { 
  34.               type  master; 
  35.               file  "tech.kingshuo.zone"; 
  36.        }; 


  编辑named.ca,named.local,localhost.zone文件如上。
  编辑子域:
   #vim tech.kingshuo.zone
    

  1. $TTL  86400 
  2. $ORIGIN  tech.kingshuo.com. 
  3. @    600  IN   SOA  ns1.tech.kingshuo.com.  admin.tech.kingshuo.com. ( 
  4.                        2011081801 
  5.                            1H 
  6.                            10M 
  7.                            7D 
  8.                            1D 
  9.      ) 
  10.                       IN     NS     ns1.tech.kingshuo.com. 
  11.                       IN     NS     ns2.tech.kingshuo.com. 
  12.                       IN     MX  10 mail.tech.kingshuo.com. 
  13.    ns1                IN     A      192.168.0.102 
  14.    ns2                IN     A      192.168.0.101 
  15.    mail               IN     A      192.168.0.102 
  16.    www                IN     A      192.168.0.101 



配置停当,您这里就可以重启DNS服务器进行相关的测试了。