上一遍由于篇幅的问题,介绍和配置实例放一块,字数有点超,每次发表,总不成功,没办法,只好分开发表。本篇主要介绍本地DNS服务器的配置,主从服务器配置,泛域名解析,以及一个可远程控制本地DNS服务器的命令rndc。

 
  配置本地DNS服务器示例 
比如我新注册了一个域名,希望172.16.32.100这台主机可以负责该域名的解析,我该如何实现呢?
langdu.com,新域名    172.16.32.0/24,该网段分给该域名使用 
ns1   172.16.32.100     #域名服务器名称及IP
www   172.16.32.20   172.16.32.21     #www服务及IP
mail   172.16.32.22            #邮件服务及IP
ftp  别名为www                 #别名 
 
 
 
  
  1. 编辑# vim /etc/named.conf配置文件,添加如下内容: 
  2. vim /etc/named.conf 
  3.  options { 
  4.     directory  "/var/named" ; 
  5. }; 
  6.  
  7. zone "." IN { 
  8.     type hint; 
  9.     file "named.ca"
  10. }; 
  11.  
  12. zone "localhost" IN { 
  13.     type master;     #指定主服务器 
  14.     file "named.localhost"
  15. }; 
  16.  
  17. zone "0.0.127.in-addr.arpa" IN { 
  18.     type master; 
  19.     file "named.loopback"
  20. };  
  21. zone "langdu.com" IN {     #新添加区域 
  22.      type master; 
  23.      file "langdu.com.zone"
  24. }; 
  25. 以上添加完成后,编辑# vim /var/named/langdu.conf.zone文件,添加如下内容  
  26. $TTL 600    #宏,表示TTL值为600,全局使用,单位默认为秒  
  27. langdu.com.    IN    SOA       ns1.langdu.com.      admin.langdu.com. (  
  28.                                2013040101  
  29.                                1H  
  30.                                5M  
  31.                                2D  
  32.                                6H )  
  33.                IN    NS         ns1             #域名与第一行相同时可不写,表示直接继承上一行的区域名  
  34.                IN    MX  10     mail            # 同上,mail还可以写成mail.langdu.com.  
  35. ns1            IN    A         172.16.32.100  
  36. mail           IN    A         172.16.32.22  
  37. www            IN    A         172.16.32.21  
  38. www            IN    A         172.16.32.20  
  39. ftp            IN    CNAME      www  
  40. *.langdu.com.   IN   A         172.16.32.21   #表示泛域名解析,下边会具体介绍  
  41.    
  42. named-checkconf       #检查配置文件有没有语法错误,下面每次的修改都需要进行检查,下面每次修改后检查命令不在给出,各位在实际操作中一定要检查没有错了在执行下面的命令  
  43. named-checkzone "langdu.com" /var/named/langdu.com.zone    #检查区域文件有没有错误  
  44. service named start     #以上检查正常后重启服务即可生效      
  45. dig -t A www.langdu.com   #使用该命令请求解析www.langdu.com这台主机  
   
 
假如现在我想添加反向查询172.16.32.0这个网段,该怎么办呢?
 
 
  
  1. 编辑# vim /etc/named.conf配置文件,添加如下内容: 
  2. zone "32.16.172.in-addr.arpa" IN {   #反向区域名 
  3.      type master; 
  4.      file "172.16.32.zone";         #保存的区域数据文件 
  5. }; 
  6.   
  7. 编辑/var/named/172.16.32.zone输入如下内容: 
  8. $TTL 600 
  9. @              IN    SOA       ns1.langdu.com.      admin.langdu.com. ( 
  10.                                2013040101 
  11.                                1H 
  12.                                5M 
  13.                                2D 
  14.                                6H ) 
  15.                IN    NS         ns1.langdu.com. 
  16. 100            IN    PTR       ns1.langdu.com. 
  17. 22             IN    PTR      mail.langdu.com. 
  18. 21             IN    PTR      www.langdu.com. 
  19. 20             IN    PTR      www.langdu.com. 
  20.   
  21. #其中@表示直接继承区域名,也可以写成:32.16.172.in-addr.arpa. 
  22. #下面一行前面为空表示自动继承上一行中区域名,当与上一行的去域名相同时可不写,想写的话可写成32.16.172.in-addr.arpa. 
  23.   
  24. named-checkconf       #检查配置文件有没有语法错误 
  25. named-checkzone "32.16.172.in-addr.arpa" /var/named/172.16.32.zone    #检查区域文件有没有错误 
  26. service named start   #以上检查正常后重启服务即可生效每次修改完成后,都必须执行这三个命令     
  27.   
  28. dig -t PTR 172.16.32.21   #反向查询172.16.32.21 
  29.   
 
再来看一种情况,我们现在配置的主机是我们本地的域名服务器,就是说我们只负责我们本地的解析,但如果有个用户让我们的这个域名服务器去解析www.sohu.com,我们的主机会做出何种响应呢,会不会去解析呢?我们使用如下命令来试一下。
 
 
 
  
  1. dig -t A www.sohu.com @172.16.32.100  #通过该主机去查询www.sohu.com的IP等相关信息,@表示指定通过其后边的主机来查询 
 
我们看到这个解析过程是可以得到答案的。其实dig默认是替所有主机解析的,只要有主机发来要解析的请求。dig命令中有一个选项recurse,该选项默认是启动的,就是说,我们来看下下面这个命令。 
 
 
  
  1. dig +recurse -t A www.sohu.com @172.16.32.100 #该命令与上边的命令得到的结果一样,为了看效果,你也可以换一个网址重新测试下,如换成www.baidu.com的,看得到的结果是否一样 
  2.   
  3. 现在我可以使用另一个选项norecurse,实现不给www.sohu.com递归查询,命令如下: 
  4.   
  5. dig +norecurse -t A www.126.com @172.16.32.100   #这里我们换了一个网址,否则在上边的命令执行过后,我们系统上会有缓存,影响我们的结果,你也可以先执行该命令,然后再执行上边的两个命令,这样就可以使用同一个网址了 
 
我们上边已经介绍过了,使用dig命令时,ANSWER SECTION选项出现的信息才是我们想要的答案,其他都是辅助信息。可以看到,当我们使用了norecurse选项后,我们本地的域名解析服务器就不在递归查询了。而是告诉该用户这个FQDN(FQDN:Qualified Domain Name,完全限定域名)归.com.管理,让该用户去找.com.来解析,自己不在负责解析。我们现在从.com.中选择一个域名服务器,再来查询一下。 
 
 
  
  1. dig +norecurse -t A www.126.com @a.gtld-servers.net  #为了看效果,我们同样加上norecurse选项 
 
从上边命令的执行结果我们看到,我们依然没有得到我们想要的结果,系统仅返回给我们该FQDN的本地域名服务器,及各IP地址。现在我们在通过该FQDN的本地域名服务器,在来查询一下。我们从里边随便选一个试试,看结果会怎么样。
 
 
  
  1. dig +norecurse -t A www.126.com @ns1.nease.net   #通过其本地的域名服务器查询其本地的FQDN解析情况 
 
这次,出现了ANSWER SECTION选项的信息,这就是我们想要的答案,因此,当我们使用了norecurse选项时,当我们使用@指定某个主机来解析时,除非该主机是其本地的域名服务器,否则,我们是得不到我们想要的结果的。假如你就是不想得到ANSWER SECTION选项的信息,我就是想看其他选项的信息,那就另当别论了。怎么样,通过以上几个命令,现在你应该已经了解norecurse了吧。我们在来看dig命令中另一个有趣的选项。那就是trace。先来看个命令吧。
 
 
  
  1. dig +trace -t A www.baidu.com @172.16.32.100   #通过本主机追踪查询www.baidu.com的解析过程   
 
从执行结果可以看到,因为我们的本地域名服务器不负责该域名的解析,所以会直接从根.查询,根域名服务器告诉我们可以从.com那里查询到,.com的域名服务器又告诉我们可以从baidu.com处查询,最后才返回给我们最终结果。这就是trace的作用。从中我们还可以看到递归是如何进行的。
 
泛域名解析
经常上网的人可能会遇到这样的情况,我在输入某个网址时,不小心输错了一个字符,但依然有结果返回,比如:我不小心想输入baidu的网址,结果写成wwww.baidu.com,但我依然可以打开百度首页,这是为什么呢?这里我们引入另一个概念,那就是 泛域名解析
要实现泛域名解析,只需要在区域文件中添加一行信息即可实现泛域名解析。比如,当用户输入的信息错误时,我统统指向我的www服务器。则可在区域文件langdu.com.zone中添加如下一行信息:
 
 
  
  1. vim /var/named/langdu.com.zone 
  2. $TTL 600 
  3. langdu.com.    IN    SOA       ns1.langdu.com.      admin.langdu.com. ( 
  4.                                2013040101 
  5.                                1H 
  6.                                5M 
  7.                                2D 
  8.                                6H ) 
  9.                IN    NS         ns1 
  10.                IN    MX  10     mail 
  11. ns1            IN    A         172.16.32.100 
  12. mail           IN    A         172.16.32.22 
  13. www            IN    A         172.16.32.20 
  14. www            IN    A         172.16.32.21 
  15. ftp            IN    CNAME      www 
  16. *.langdu.com.  IN    A          172.16.32.20     :添加该行信息,即可实现泛域名解析  
  17.  
  18. 上面修改完成后,接下来的三个命令是什么你懂得!!! 执行完这三个命令我们来查询下。
  19.  
  20. dig -t A fin.langdu.com @172.16.32.100   #区域文件中没有fin,使用本主机查询看能否实现泛域名解析 
从上边的执行结果可以看到,能够实现泛域名解析。
 
我们知道,在实际的网络中,我们本地的DNS服务器除了本地的主机外,是不应该为别的主机提供递归域名解析的,因为如果我们的服务器为所有用户都提供递归查询,假如有外部的某个用户发起恶意的查询或***,我们的DNS服务器会很快挂掉的。所以我们必须设置我们的本地DNS服务器不随便为外部的主机提供递归。下面我们来看一下如何定义为谁递归。
 
 
  
  1. 在我们的配置文件/etc/named.conf中,在options中有这么一行信息: 
  2. recursion yes;    :表示为所有用户提供递归,不管有没有该选项,默认递归是开启的 
  3. 我们可以去掉该选项,设置为谁递归,如可添加下面一行信息: 
  4. options { 
  5.     directory "/var/named";     
  6.     allow-recursion { 172.16.0.0/16; };   :表示只给该网段的用户提供递归 
  7. }; 
  8. 我们使用下面的命令测试一下,想要看到效果。 
  9. dig -t A www.baidu.com @172.16.32.100  #该FQDN不归我们本地的DNS服务器解析,我们使用不同网段的IP看下我们指定的主机能否为我们递归查询 
  10.   
  11. 同样,我们还可以设置允许为谁查询,如我们添加添加下面一行信息: 
  12. options { 
  13.     directory "/var/named";   
  14.     allow-query { 172.16.0.0/24; };  :表示仅给该网段的用户提供查询请求 
  15. }; 
  16. 在实际的网络中,我们一般很少使用该选项。因为你只允许某些用户来查询,其他用户查询不了,就没法访问了。 
 
我们继续介绍dig命令中,有两个选项我们经常也会用到,axfr和ixfr。
    axfr:完全区域传送,同步所有数据
    ixfr:增量区域传送,只同步没有的数据。如:
 
 
  
  1. dig -t axfr langdu.com   #完全区域传送,可得到该区域内的所有数据 
使用该命令可得到对方区域的所有数据,假如允许任何用户使用该命令这样是很危险的,所以,我们只允许我们的从服务器使用该命令,其他不允许使用。但我如何去定义谁可以使用该命令,谁不可使用该命令呢?我们可以再配置文件/etc/named.conf的options中添加一项内容,比方说我允许172.16.32.101这台主机传送,可写为:
 
 
  
  1. options { 
  2.      directory "/var/named"
  3.      allow-recursion { 172.16.0.0/16; }; 
  4.      allow-transfer { 172.16.32.10; };      :新添加内容,表示仅允许该主机传送 
  5. }; 
  6.   
  7. 在options选项中添加表示全局使用,我们可以将该选项添加到指定的区域中,表示仅允许传送某一区域的数据。如我们修改我们的配置文件/etc/named.conf里的内容: 
  8.  
  9. options { 
  10.      directory "/var/named"
  11.      allow-recursion { 172.16.0.0/16; };    :表示仅允许该网段的用户递归 
  12. }; 
  13.   
  14. zone "." IN { 
  15.      type hint; 
  16.      file "named.ca"
  17. }; 
  18.   
  19. zone "localhost" IN { 
  20.    type master; 
  21.    file "named.localhost"
  22.    allow-transfer { none; };     :新添加内容,表示不允许任何人传送该区域数据 
  23. }; 
  24.   
  25. zone "0.0.127.in-addr.arpa" IN { 
  26.     type master; 
  27.     file "named.loopback"
  28.     allow-transfer { none; };     :新添加内容,表示不允许任何人传送该区域数据 
  29. }; 
  30.   
  31. zone "langdu.com" IN { 
  32.      type master; 
  33.      file "langdu.com.zone"
  34.      allow-transfer { 172.16.32.10; };   :新添加内容,表示仅允许该IP传送该区域数据 
  35. }; 
  36.   
  37. zone "32.16.172.in-addr.arpa" IN { 
  38.      type master; 
  39.      file "172.16.32.zone"
  40. }; 
  41.   
  42. dig -t axfr langdu.com    
  43.  
  44. 可以看到没有任何结果,因为我们本主机IP为172.16.32.100,我们设置的仅172.16.32.20允许传送,所以我们是无法得到该区域的所有数据的。 
 
主、从服务器
 
既然是主从服务器,肯定需要两台主机了,这里我们本机做主服务器,另一台IP为172.16.32.10的主机作为从服务器。在从服务器上需安装bind97及bind97工具包。在从服务上,我们使用ls -lh命令查看/var/named目录发现,该目录属主为root,属组为named,权限为750,即属组没有写权限,因为如果作为从服务器,我们需要将主服务器的数据文件同步到从服务器上,既然没有写权限,数据文件肯定不能存放在该目录下,但我们发现该目录下有个slaves,属主属组均为named,且权限为770,所以,我们将主服务器上同步过来的数据保存到该目录下。
 
 
  
  1. 修改从服务器上的配置文件/etc/named.conf: 
  2. vim /etc/named.conf 
  3. options { 
  4.      directory "/var/named"
  5.      allow-recursion { 172.16.0.0/16; }; 
  6. }; 
  7.   
  8. zone "." IN { 
  9.      type hint; 
  10.      file "named.ca"
  11. }; 
  12.   
  13. zone "localhost" IN { 
  14.    type master; 
  15.    file "named.localhost"
  16.    allow-transfer { none; };     :表示不允许任何人传送 
  17. }; 
  18.   
  19. zone "0.0.127.in-addr.arpa" IN { 
  20.     type master; 
  21.     file "named.loopback"
  22.     allow-transfer { none; }; 
  23. }; 
  24.   
  25. zone "langdu.com" IN { 
  26.      type slave;        #设定为从服务器 
  27.      file "slaves/langdu.com.zone";     #这里是相对路径 
  28.      masters { 172.16.32.100; };    #标明主服务器是谁 
  29.      allow-transfer { none; };       
  30. }; 
  31.   
  32. zone "32.16.172.in-addr.arpa" IN { 
  33.      type slave;        #设定为从服务器 
  34.      file "slaves/172.16.32.zone";     #这里是相对路径 
  35.      masters { 172.16.32.100; };      #标明主服务器是谁 
  36.      allow-transfer { none; }; 
  37. }; 
  38.   
  39. 默认情况下该配置文件属主属组均为root,这里我们将其属组修改为named。 
  40.   
  41. 一切工作完成后,记得先检查,无误后重启named服务。这里不再给出命令。 
 
现在我们回到我们的主服务器上,查看下主服务器的日志。
 
 
  
  1. tail /var/log/messages    #查看主服务器上的日志,发现出现如下信息 
  2. Apr  2 18:32:05 liqiang named[6952]: zone 32.16.172.in-addr.arpa/IN: loaded serial 2013040101 
  3. Apr  2 18:32:05 liqiang named[6952]: zone langdu.com/IN: loaded serial 2013040101 
  4. Apr  2 18:32:05 liqiang named[6952]: zone localhost/IN: loaded serial 0 
  5. Apr  2 18:32:05 liqiang named[6952]: running 
  6. Apr  2 18:32:05 liqiang named[6952]: zone 32.16.172.in-addr.arpa/IN: sending notifies (serial 2013040101
  7. Apr  2 18:32:05 liqiang named[6952]: zone langdu.com/IN: sending notifies (serial 2013040101
  8. Apr  2 18:32:15 liqiang named[6952]: client 172.16.32.10#39300: transfer of '32.16.172.in-addr.arpa/IN': AXFR started    #完全区域传送开始 
  9. Apr  2 18:32:15 liqiang named[6952]: client 172.16.32.10#39300: transfer of '32.16.172.in-addr.arpa/IN': AXFR ended   #完全区域传送结束 
  10. Apr  2 18:32:16 liqiang named[6952]: client 172.16.32.10#55631: transfer of 'langdu.com/IN': AXFR started    #完全区域传送开始 
  11. Apr  2 18:32:16 liqiang named[6952]: client 172.16.32.10#55631: transfer of 'langdu.com/IN': AXFR ended     #完全区域传送结束 
 
从上边结果可以看到,主服务器完成了数据传送,我们再来看一下从服务器上的日志。 
 
 
  
  1. tail /var/log/messages    #查看从服务器上的日志,出现如下信息 
  2. Mar 30 08:34:31 practice named[15728]: zone 32.16.172.in-addr.arpa/IN: Transfer started. 
  3. Mar 30 08:34:31 practice named[15728]: transfer of '32.16.172.in-addr.arpa/IN' from 172.16.32.100#53: connected using 172.16.32.10#39300 
  4. Mar 30 08:34:31 practice named[15728]: zone 32.16.172.in-addr.arpa/IN: transferred serial 2013040101 
  5. Mar 30 08:34:31 practice named[15728]: transfer of '32.16.172.in-addr.arpa/IN' from 172.16.32.100#53: Transfer completed: 1 messages, 9 records, 259 bytes, 0.071 secs (3647 bytes/sec) 
  6. Mar 30 08:34:31 practice named[15728]: zone 32.16.172.in-addr.arpa/IN: sending notifies (serial 2013040101
  7. Mar 30 08:34:32 practice named[15728]: zone langdu.com/IN: Transfer started. 
  8. Mar 30 08:34:32 practice named[15728]: transfer of 'langdu.com/IN' from 172.16.32.100#53: connected using 172.16.32.10#55631 
  9. Mar 30 08:34:32 practice named[15728]: zone langdu.com/IN: transferred serial 2013040101 
  10. Mar 30 08:34:32 practice named[15728]: transfer of 'langdu.com/IN' from 172.16.32.100#53: Transfer completed: 1 messages, 13 records, 299 bytes, 0.045 secs (6644 bytes/sec) 
  11. Mar 30 08:34:32 practice named[15728]: zone langdu.com/IN: sending notifies (serial 2013040101
 
通过以上两个日志我们看到,完全区域传送完成。且我们去从服务器上/var/named/slaves目录下查看,有这两个区域文件,打开查看后,发现其写法也更规范。完全传送实现了,那增量传送能不能实现呢?我们去修改一下主服务器上区域文件的信息。
 
 
  
  1. 先修改主服务器上的配置文件: 
  2. vim /etc/named.conf 
  3. options { 
  4.      directory "/var/named"
  5.      allow-recursion { 172.16.0.0/16; }; 
  6.      notify yes;         #添加该行,表示有修改时通知从服务器 
  7. }; 
  8.   
  9. 修改主服务器的区域文件,先修改langdu.com.zone: 
  10. vim langdu.com.zone   #修改该文件 
  11. $TTL 600 
  12. langdu.com.    IN    SOA       ns1.langdu.com.      admin.langdu.com. ( 
  13.                                2013040102      ;修改后记得将版本号加1 
  14.                                1H 
  15.                                5M 
  16.                                2D 
  17.                                6H ) 
  18.                IN    NS         ns1 
  19.                IN    NS         ns2 
  20.                IN    MX  10     mail 
  21. ns1            IN    A         172.16.32.100 
  22. ns2            IN    A         172.16.32.10 
  23. mail           IN    A         172.16.32.22 
  24. www            IN    A         172.16.32.20 
  25. www            IN    A         172.16.32.21 
  26. ftp            IN    CNAME      www 
  27. now            IN    A         172.16.32.23     ;添加该行信息 
  28. langdu.com.    IN    A         172.16.32.21 
  29. *.langdu.com.  IN    A          172.16.32.20 
  30.   
  31. 在修改172.16.32.zone  
  32. vim 172.16.32.zone     #修改该文件 
  33. $TTL 600 
  34. @              IN    SOA       ns1.langdu.com.      admin.langdu.com. ( 
  35.                                2013040102     ;修改后记得将版本号加1 
  36.                                1H 
  37.                                5M 
  38.                                2D 
  39.                                6H ) 
  40.                IN    NS       ns1.langdu.com. 
  41.                IN    NS       ns2.langdu.com. 
  42. 100            IN    PTR      ns1.langdu.com. 
  43. 10             IN    PTR      ns2.langdu.com. 
  44. 22             IN    PTR      mail.langdu.com. 
  45. 21             IN    PTR      www.langdu.com. 
  46. 20             IN    PTR      www.langdu.com. 
  47. 23              IN    PTR     now.langdu.com.     #新添加内容 
  48.   
  49. 修改完成后,检查然后重启服务。 
 
 我们在一块来看一下日志吧。
 
 
  
  1. tail /var/log/messages   #查看主服务器的日志 
  2. Apr  2 18:41:39 liqiang named[6952]: reloading configuration succeeded 
  3. Apr  2 18:41:39 liqiang named[6952]: reloading zones succeeded 
  4. Apr  2 18:41:39 liqiang named[6952]: zone 32.16.172.in-addr.arpa/IN: loaded serial 2013040102 
  5. Apr  2 18:41:39 liqiang named[6952]: zone langdu.com/IN: loaded serial 2013040102 
  6. Apr  2 18:41:39 liqiang named[6952]: zone 32.16.172.in-addr.arpa/IN: sending notifies (serial 2013040102)     #发送通知,标明新版本号 
  7. Apr  2 18:41:39 liqiang named[6952]: zone langdu.com/IN: sending notifies (serial 2013040102
  8. Apr  2 18:41:39 liqiang named[6952]: client 172.16.32.10#52251: transfer of '32.16.172.in-addr.arpa/IN': AXFR-style IXFR started 
  9. Apr  2 18:41:39 liqiang named[6952]: client 172.16.32.10#52251: transfer of '32.16.172.in-addr.arpa/IN': AXFR-style IXFR ended 
  10. Apr  2 18:41:40 liqiang named[6952]: client 172.16.32.10#48890: transfer of 'langdu.com/IN': AXFR-style IXFR started    #增量传送开始 
  11. Apr  2 18:41:40 liqiang named[6952]: client 172.16.32.10#48890: transfer of 'langdu.com/IN': AXFR-style IXFR ended    #增量传送结束 
 
可以看到,主服务器向从服务器发送了修改通知。最后四行显示增量传送也完成了。我们再来看一下从服务器的区域文件内容,看是否有我们添加的内容。
 
 
  
  1. cat langdu.com.zone     #查看该文件,记住我们当前是处于/var/named/slaves目录下 
  2. $ORIGIN . 
  3. $TTL 600    ; 10 minutes 
  4. langdu.com      IN SOA  ns1.langdu.com. admin.langdu.com. ( 
  5.                 2013040102 ; serial       
  6.                 3600       ; refresh (1 hour) 
  7.                 300        ; retry (5 minutes) 
  8.                 172800     ; expire (2 days) 
  9.                 21600      ; minimum (6 hours) 
  10.                 ) 
  11.             NS  ns1.langdu.com. 
  12.             NS  ns2.langdu.com. 
  13.             A   172.16.32.21 
  14.             MX  10 mail.langdu.com. 
  15. $ORIGIN langdu.com. 
  16. *           A   172.16.32.20 
  17. ftp         CNAME   www 
  18. mail            A   172.16.32.22 
  19. now         A   172.16.32.23            ;我们刚才新添加的内容也显示正常 
  20. ns1         A   172.16.32.100 
  21. ns2         A   172.16.32.10 
  22. www         A   172.16.32.20 
  23.             A   172.16.32.21 
  24.   
  25. 再来看一下反向区域文件。 
  26. cat 172.16.32.zone     
  27. $ORIGIN . 
  28. $TTL 600    ; 10 minutes 
  29. 32.16.172.in-addr.arpa  IN SOA  ns1.langdu.com. admin.langdu.com. ( 
  30.                 2013040102 ; serial 
  31.                 3600       ; refresh (1 hour) 
  32.                 300        ; retry (5 minutes) 
  33.                 172800     ; expire (2 days) 
  34.                 21600      ; minimum (6 hours) 
  35.                 ) 
  36.             NS  ns1.langdu.com. 
  37.             NS  ns2.langdu.com. 
  38. $ORIGIN 32.16.172.in-addr.arpa. 
  39. 10          PTR ns2.langdu.com. 
  40. 100         PTR ns1.langdu.com. 
  41. 20          PTR www.langdu.com. 
  42. 21          PTR www.langdu.com. 
  43. 22          PTR mail.langdu.com. 
  44. 23          PTR now.langdu.com.       ;新加内容 
  45.   
 
 
下面看一个命令,该命令可实现控制我们的DNS服务器。
rndc,域名服务器控制工具,使用该命令可实现控制本地主机的DNS服务器,也可实现控制远程主机的DNS服务器,但最好不要使用,会增加风险,这里我们仅简单介绍下如何使用,但不建议运行其他主机控制DNS服务器。首先需要生成rndc的配置文件,我们通过如下命令实现:
 
 
  
  1. rndc-confgen > /etc/rndc.conf   #表示生成配置文件 
  2. 我们看一下其配置文件的内容: 
  3. cat /etc/rndc.conf 
  4. key "rndc-key" {          ;该配置文件生成的密钥文件/etc/rndc.key没有用,可删除,这里我们删除,不用此文件。       
  5.         algorithm hmac-md5;       
  6.         secret "okzisTdkFy5dOW9QMU1QtQ=="
  7. }; 
  8.   
  9. options { 
  10.         default-key "rndc-key";           ;默认生成的密钥,随机生成,各不相同 
  11.         default-server 127.0.0.1;        ;默认的服务器IP 
  12.         default-port 953;               ;默认工作的端口号 
  13. }; 
  14.    
  15. # key "rndc-key" { 
  16. #   algorithm hmac-md5; 
  17. #   secret "okzisTdkFy5dOW9QMU1QtQ=="; 
  18. # }; 
  19.  
  20. # controls { 
  21. #   inet 127.0.0.1 port 953 
  22. #       allow { 127.0.0.1; } keys { "rndc-key"; }; 
  23. # }; 
  24. 其中这部分#注释内容需添加到named.conf文件中。 
  25.   
  26. 先介绍几个选项,待会我们可以使用: 
  27. rndc [-c /etc/rndc.conf] status    #可查看服务状态信息 
  28. rndc [-c /etc/rndc.conf] flush    #清空缓存 
  29. rndc [-c /etc/rndc.conf] stop    #停止服务 
  30. rndc [-c /etc/rndc.conf] notify "ZONE_NAME"   #通知该区域 
  31.   
首先将上边说的注释部分添加到我们的named.conf配置文件中,检查无误后重启named服务。
 
 
  
  1. vim /etc/named.conf    #编辑该文件,添加如下内容 
  2. key "rndc-key" { 
  3.         algorithm hmac-md5; 
  4.         secret "okzisTdkFy5dOW9QMU1QtQ=="
  5. }; 
  6.   
  7. controls { 
  8.         inet 127.0.0.1 port 953 
  9.         allow { 127.0.0.1; } keys { "rndc-key"; }; 
  10.          
  11. 检查后重启服务。命令是什么你懂的。不会自己去上边找。
  12.   
  13. rndc -c /etc/rndc.conf status   #使用该命令查询服务信息,下面是显示的信息 
  14. version: 9.7.0-P2-RedHat-9.7.0-6.P2.el5_7.4      #版本 
  15. CPUs found: 1                    #CPU个数 
  16. worker threads: 1                 #工作的进程数 
  17. number of zones: 16               #区域个数 
  18. debug level: 0                     
  19. xfers running: 0                  #有没有增量区域传送 
  20. xfers deferred: 0                  
  21. soa queries in progress: 0 
  22. query logging is OFF 
  23. recursive clients: 0/0/1000 
  24. tcp clients: 0/100 
  25. server is up and running          #服务开启,且正在运行 
  26.   
  27.  
  28. rndc notify "langdu.com"   #指定配置文件可省,这里我们省略,通知langdu.com区域,当某个区域修改时可使用该命令通知从服务器 
  29. rndc flush   #表示清空缓存 
  30. rndc stop    #停止服务 
  31. netstat -tunlp   #可使用该命令查询下,我们的53号端口都已停止 
  32. service named restart #重启服务 
 
如果想让别的主机控制我们的DNS服务器,可修改named.conf中的信息,如现在我想让172.16.32.10控制我们本地这台主机的DNS服务器,可修改为:
 
 
  
  1. vim /etc/named.conf 
  2. controls { 
  3.         inet 172.16.32.100 port 953     ;修改IP地址为DNS服务器的IP 
  4.         allow { 172.16.32.10; } keys { "rndc-key"; };   ;设定由哪个主机控制我们的DNS服务器,密钥是多少 
  5. };  
  6.   
  7. 检查后重启服务。 
  8.  
  9. netstat -tunlp   #可使用该命令查询下,我们的953端口已经开启 
  10. 因我们的远程主机上没有该主机的密钥,要想实现其他主机控制我们的DNS服务器,我们指定的主机需也有该主机的rndc.conf文件才行。 
  11. scp /etc/rndc.conf 172.16.32.10:/root/     #将本主机的rndc.conf文件传送到我们的远程主机上,并保存到/root目录下 
  12. rndc -c /etc/rndc.conf status   #使用该命令查询远程主机的服务信息,因为我们两个主机的时间没有同步,所以会报错 
 
 
下一篇介绍子域授权、智能解析和DNS的日志系统。敬请关注。