本篇主要介绍DNS服务器中的子域授权、智能解析和创建日志

子域授权

我们还继续前面的例子。现在,公司规模扩大了,公司的研发部门想实现独立管理,也就是说,现在我有两个个部门需单独管理,分别为研发部门和自身。但不是说哪个部门想单独管理就可以单独管理,需上级授权才可以。这里我们介绍一下子域授权中的正向区域授权。
 
   
   
   
   
  1. 正向区域格式如下:  
  2. SUB_ZONE_NAME    IN   NS    NSSERVER_SUB_ZONE_NAME  
  3. NSSERVER_SUB_ZONE_NAME    IN    A   IP  
  4.   
  5. 记住这个区域一定是当前区域下的子域才行。举个例子:  
  6. 在.com这个域,我们在该域下建立一个叫langdu.com的域,则可写为:     
  7. langdu.com.          IN      NS     ns1.langdu.com.  
  8. ns1.langdu.com.      IN      A      172.16.32.100  
  9.    
  10. 不同部门实现各自管理:  
  11. langdu.com.   
  12. rd.langdu.com.  
  13.    
  14. 该子域分配的DNS服务器及IP如下:  
  15. rd.langdu.com.           IN     NS      ns1.rd.langdu.com.  
  16. ns1.rd.langdu.com.       IN     A       172.16.32.101      #分给该部门的IP地址,每一条NS记录后都必须跟一条A记录 
  17.   
 
现在去修改172.16.32.100主机的区域数据文件:
 
   
   
   
   
  1. vim langdu.com.zone  
  2. $TTL 600  
  3. langdu.com.    IN    SOA       ns1.langdu.com.      admin.langdu.com. (  
  4.                                2013040102  
  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. now            IN    A         172.16.32.23  
  17. langdu.com.    IN    A         172.16.32.21  
  18. *.langdu.com.  IN    A          172.16.32.20  
  19.    
  20. rd             IN   NS         ns1.rd      #添加这两行信息  
  21. rd             IN    A          172.16.32.101  #与其对应的A记录  
  22.    
  23. 现在去修改我们子域主机的配置文件和数据文件  
  24. vim rd.langdu.com      
  25. $TTL 600  
  26. rd.langdu.com.    IN    SOA       ns1.rd.langdu.com.      admin.rd.langdu.com. (  
  27.                                2013040101  
  28.                                1H  
  29.                                5M  
  30.                                2D  
  31.                                6H )  
  32.                IN    NS         ns1  
  33.                IN    MX  10     mail  
  34. ns1            IN    A         172.16.32.101  
  35. mail           IN    A         172.16.32.102  
  36. www            IN    A         172.16.32.103  
  37.    
  38. vim /etc/named.conf  #添加如下内容  
  39. zone "rd.langdu.com" IN {  
  40.      type master;  
  41.      file "rd.langdu.com.zone";   #添加区域数据文件  
  42. }; 
 
 
修改完成后检查配置文件和区域文件,无误后重启服务。
我们分别使用如下命令查看下效果:
 
   
   
   
   
  1. dig -t NS rd.langdu.com @172.16.32.100  #通过父域查询rd.langdu.com的NS记录  
  2. dig -t NS rd.langdu.com @172.16.32.101   #通过子域查询自己的NSA记录  
  3. dig -t A www.rd.langdu.com @172.16.32.101   #通过子域查询A记录 
 
不管是从父域还是子域,都可以查询都结果,但子域自己解析时可得到权威答案(在flag选项中显示有aa),父域解析时得到的不是权威答案。
 
假如我执行了如下的命令,会得到我想要的结果么?
 
   
   
   
   
  1. dig -t A www.langdu.com @172.16.32.101  #通过子域查询父域  
 
从结果可以看出,并不是我们想要的结果。我们知道,子域是不知道父域在什么地方的,但如果我想要通过子域去解析父域该如何实现呢?其实我们只需要在子域中告诉父域在什么地方即可。修改子域的配置文件/etc/named.conf
 
   
   
   
   
  1. vim /etc/named.conf  
  2. options {  
  3.      directory "/var/named";  
  4.      forward first;                ;转发,如果转发的DNS服务器解析不了,在自己解析  
  5.      forwarders { 172.16.32.100; };   ;表示转发到哪里  
  6. };  
  7.    
  8. 重启子域的服务即可生效。  
  9. dig -t A www.langdu.com @172.16.32.101 #通过子域插叙父域  
  10. dig +trace -t A www.baidu.com @172.16.32.101   #通过子域去查询www.baidu.com  
  
上边的设置是有问题的。因为所有通过子域查询的都会交给父域去查询,我们知道我们父域应该是仅负责本地的查询服务的。因此,上边第二个命令是有我们的父域解析出来的。其实我们可以设置凡是通过子域查询父域的,我们就把查询请求发给父域,其他的自己来处理。
我们修改子域的配置文件
 
   
   
   
   
  1. vim /etc/named.conf  
  2. zone "langdu.com" IN {        ;添加该区域,并设定相关参数  
  3.      type forward;              ;设置类型为转发  
  4.      forward first;           
  5.      forwarders { 172.16.32.100; };   #转发地址为其父域  
  6. };   
 
检查后重启服务。然后当我们在使用上边的命令查询时,就是子域自己负责了。
 
 
智能解析
在网络中,有些网页,不管我们是用电信的还是联通的网线,打开同一个网页都非常快。有些机房可实现双线接入,然后通过某些技术在本机房内实现使用同一个服务器解析,这样可以实现。这里我们主要介绍如何通过我们的DNS服务器来实现智能解析。在DNS服务器中是通过视图view来实现智能解析的。其实就是让不同来源的用户,能够取得他们自己的 zone 响应就是了。
我们现在假如172.16.0.0/16和10.0.0.0/8网段属于电信,其他的网段属于联通,我们看如何来实现。
 
首先定义配置文件:
 
   
   
   
   
  1. vim /etc/named.conf #编辑该文件,修改为如下内容  
  2. acl telenet {      ;指定网段,定义名称  
  3.     172.16.0.0/16;  
  4.     10.0.0.0/8;  
  5. };  
  6.    
  7. options {  
  8.      directory "/var/named";  
  9.      allow-recursion { innet; };  
  10. };  
  11.    
  12. view telecom {     
  13.     match-clients { telenet; };    ;匹配该选项的,使用如下方式查询  
  14.     zone "langdu.com" IN {    ;将所有区域写在视图中  
  15.         type master;  
  16.         file "telecom.langdu.com.zone";  
  17.     };  
  18. };  
  19.       
  20. view unicom {  
  21.     match-clients { any; };  
  22.     zone "langdu.com" IN {  
  23.         type master;  
  24.         file "unicom.langdu.com.zone";  
  25.     };  
  26. };    
  27.       
  28. 保存退出。编辑如下两个文件:  
  29. vim /var/named/telecom.langdu.com.zone  
  30. $TTL 600    #宏,表示TTL值为600,全局使用  
  31. @             IN    SOA       ns1.langdu.com.      admin.langdu.com. (  
  32.                                2013040101  
  33.                                1H  
  34.                                5M  
  35.                                2D  
  36.                                6H )  
  37.                IN    NS         ns1             #域名与第一行相同时可不写,表示直接继承上一行的区域名  
  38.                IN    MX  10     mail            # 同上,mail还可以写成mail.langdu.com.  
  39. ns1            IN    A         172.16.32.100  
  40. mail           IN    A         172.16.32.22  
  41. www            IN    A         172.16.32.21  
  42.    
  43.       
  44. vim /var/named/unicom.langdu.com.zone  
  45. $TTL 600    #宏,表示TTL值为600,全局使用  
  46. @             IN    SOA       ns1.langdu.com.      admin.langdu.com. (  
  47.                                2013040101  
  48.                                1H  
  49.                                5M  
  50.                                2D  
  51.                                6H )  
  52.                IN    NS         ns1             #域名与第一行相同时可不写,表示直接继承上一行的区域名  
  53.                IN    MX  10     mail            # 同上,mail还可以写成mail.langdu.com.  
  54. ns1            IN    A         172.16.32.100  
  55. mail           IN    A         192.168.2.2  
  56. www            IN    A         1100.110.110.110  
  57.       
  58. 下边该怎么做,你懂的!好吧,我再写一遍,请各位务必记牢。  
  59. named-checkconf  
  60. named-checkzone "telecom.langdu.com.zone" /var/named/telecom.langdu.com.zone  
  61. named-checkzone "unicom.langdu.com.zone" /var/named/unicom.langdu.com.zone  
  62.   
  63. dig -t A www.langdu.com @172.16.32.100  #可以看到得到的结果是我们172.16.32.21  
  64.       
  65. 假如我有个langdu.net的区域不想区分来自哪个网段该如何实现呢?修改配置文件  
  66. vim /etc/named.conf    
  67. acl innet {  
  68.     172.16.0.0/16;  
  69.     10.0.0.0/8;  
  70. };  
  71.    
  72. options {  
  73.         directory "/var/named";  
  74.         allow-recursion { innet; };   #上边定义的acl名称  
  75. };  
  76.    
  77. view telecom {  
  78.         match-clients { innet; };  
  79.         zone "langdu.com" IN {  
  80.                 type master;  
  81.                 file "telecom.langdu.com.zone";  
  82.         };  
  83.         zone "langdu.net" IN {    #添加该区域  
  84.                 type master;  
  85.                 file "langdu.net.zone";  
  86.         };  
  87. };  
  88.    
  89. view unicom {  
  90.         match-clients { any; };  
  91.         zone "langdu.com" IN {  
  92.                 type master;  
  93.                 file "unicom.langdu.com.zone";  
  94.         };  
  95.         zone "langdu.net" IN {    #添加该区域因我们不区分来自哪个运营商,两个均添加该区域  
  96.                 type master;  
  97.                 file "langdu.net.zone";  
  98.         };  
  99. };    
  100.       
  101. 编辑区域数据文件  
  102. vim langdu.net.zone   #添加如下内容  
  103. $TTL 86400  
  104. @                       IN      SOA     ns1.a.net.      admin.a.net. (  
  105.                                         2013040201  
  106.                                         1H  
  107.                                         5M  
  108.                                         2D  
  109.                                         1D )  
  110.                         IN      NS      ns1  
  111.                         IN      MX 10   mail  
  112. ns1                     IN      A       172.16.32.100  
  113. www                     IN      A       120.0.0.3  
  114. mail                    IN      A       134.120.1.1  
  115.    
  116. 修改完毕,该怎么做,你懂的!  
  117.    
  118. dig -t A www.langdu.net @172.16.32.100  
  119.    
  120.    
  121.    
 这里给大家介绍一个智能解析网站www.dns.la

 

BIND的日志系统

BIND有一个非常灵活和可配置的日志记录系统。

   
   
   
   
  1. 下面举一个具体定义日志的例子,一块分析下: 
  2. logging {  
  3.     channel my_log {   #定义通道名称 
  4.         file "log.msgs" versions 3 size 10k;   #定义存放文件名,保留3个版本,大小为10K 
  5.         severity dynamic;     #定义日志的级别 
  6.     };  
  7.     channel my_syslog {       
  8.         syslog local0;     #定义syslog的日志,这是另一种记录日志的方式,该日志通常记录在/var/log目录下 
  9.         severity info;     #日志级别 
  10.     }; 
  11. category xfer-in  { my_log; };   #作为从服务器,接受主服务器发来的增量区域传送数据   
  12. category update  { my_syslog; };   #更新信息 
  13. };  

 

 

BIND的日志系统

BIND有一个非常灵活和可配置的日志记录系统。 

   
   
   
   
  1. 下面举一个具体定义日志的例子,一块分析下: 
  2. logging {  
  3.  
  4.     channel my_log {   #定义通道名称  
  5.         file "log.msgs" versions 3 size 10k;   #定义存放文件名,保留3个版本,大小为10K 
  6.         severity dynamic;     #定义日志的级别  
  7.     };  
  8.  
  9.     channel my_syslog {
  10.         syslog local0;     #定义syslog的日志,这是另一种记录日志的方式,该日志通常记录在/var/log目录下  
  11.         severity info;     #日志级别  
  12.     }; 
  13.  
  14. category xfer-in  { my_log; };   #作为从服务器,接受主服务器发来的增量区域传送数据    
  15. category update  { my_syslog; };   #更新信息  
  16. };  
  17.  
  18.  
  19.  
  20. 日志级别: 
  21.  
  22. critical           #紧急信息  
  23. error              #错误信息  
  24. warning            #警告信息  
  25. notice             #提示信息  
  26. info               #一般信息,默认为该级别  
  27. debug [level]      #调试信息,其中又可分多种级别  
  28. dynamic            #动态信息  
  29.  
  30.  
  31. category的类别,包含15种,我们只介绍几种常用的: 
  32.  
  33. default               #为category定义默认channel  
  34. general               #捕获所有非机密信息  
  35. client                #客户端请求的问题  
  36. config                #配置文件的问题  
  37. network               #与网络运营相关  
  38. notify                #通知,提示  
  39. queries               #查询处理  
  40. security               #接受或拒绝请求  
  41. update                 #动态更新 
  42. xfer-in                #通过服务器传送的增量数据 
  43. xfer-out               #通过服务器传出的增量数据 

 

下面看下如何在我们本地主机上添加日志系统

在我们自己的系统上添加记录日志。

   
   
   
   
  1. vim /etc/named.conf  #编辑该文件,添加如下内容 
  2. logging { 
  3.     channel querylog { 
  4.         file "/var/log/named/bind_query.log" versions 5 size 10M;   #保存文件,保留5个版本,大小为10M 
  5.         severity dynamic;    #日志记录级别 
  6.         print-time yes;     #是否记录时间 
  7.         print-severity yes;    #是否记录级别 
  8.     }; 
  9.     category queries { querylog; };  #查询处理 
  10. }; 
  11.  
  12. 上面文件中提到的目录必须存在,且须为named属主,named组。 
  13.  
  14. mkdir /var/log/named    #创建该目录 
  15. chown named:named /var/log/named   #修改该目录为named属主named属组 
  16. named-checkconf  
  17. service named restart 
  18.  
  19. dig -t A www.langdu.com @172.16.32.100   
  20.  
  21. ls /var/log/named   #查看该目录下是否有我们日志生成的文件 
  22. bind_query.log      #日志文件存在 
  23. tail named/bind_query.log   #查看日志,显示如下信息 
  24. 06-Apr-2013 19:37:54.510 info: client 172.16.32.100#56946: query: www.langdu.com IN A + (172.16.32.100) 
  25. 06-Apr-2013 19:39:24.040 info: client 172.16.32.100#52592: query: www.langdu.com IN A + (172.16.32.100) 

可以看到我们的日志系统添加成功。下面给大家添加个附件,里边有具体介绍日志的信息,大家可参考该ppt在本机上为DNS添加日志。附件:DNS服务器中的日志系统介绍.ppt

其实我们还可以对我们的DNS服务器进行压力测试,可用queryperf命令实现压力测试。

queryperf:对DNS服务器做压力测试,需要先安装libpcap-devel软件包

这里不再介绍,有兴趣的可上网查找相关资料。