view 是bind中的另外的一个技巧他在有防火墙的环境中非常有用。View允许你呈现出不同的配置文件给不同的客户,当你的服务器既要给内网的用户又要给外网的用户提供查询服务时使用view将是非常方便的。下其实访问控制列表就是一个有名字的地址匹配列表。
它的语法格式为除了also-notify语句之外,您可以在需要调用地址匹配列表的任何位置使用访问控制列表。一定要注意的是acl必须是named.conf中的顶级语句,named.conf只读一遍,所以访问控制列表必须在使用之前定义。
view的格式是
view "interal" {
};
尽管view的名字可以任意命名,但是做到见名之意是非常不错的一个好主意。你可以使用 match-clients view 定义那些子区域可以被特定的主机看到,如果你没有在 match-clients 中限制任何主机,这些区域会被全局可见。下面我们就进行试验,我的服务器还是上面做实验的那台我的view配置如下:
options {
directory "/var/named";
listen-on port 53 { 192.168.0.131; };
allow-query { 192.168.0.0/24; };
allow-notify { 192.168.0.12; };
notify yes ;
};
acl "fx-subnet" { 192.168.0.8; };
view "internel" {
match-clients { "fx-subnet"; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
zone "0.168.192.in-addr.arpa" IN {
type master;
allow-update { none; };
file "0.168.192.in-addr.arpa.zone";
};
zone "example.com" IN {
type master;
allow-update { none; };
file "example.com.zone";
};
zone "movie.com" IN {
type master;
file "movie.com.zone";
};
};
view "word" {
match-clients { any; };
recursion no;
zone "example.com" IN {
type master;
allow-update { none; };
file "word.example.com.zone";
};
};
下面是我的/var/named/example.com文件的内容:
下面是我的/var/named/word.example.com.zone的内容:
这里我们故意设置的不一样,这也是我们使用view所要达到的目标。
我们在客户机上查询一下,下面是我在IP地址为192.168.0.8上查询的结果:
下面是我在IP地址为192.168.0.9上面的查询结果:
看到查询结果的不同了吧 其实view是比较简单的,还是那句话有什么不明白的说出来我们一起进步好吧 我们下面说说DNS日志管理
named提供几种内置的辅助调试手段,其中最重要的是可配置性非常灵活的日志功能,您可以在命令行指定调试级别或者用rndc设置它们。下面我们说说BIND日志术语的一些词汇。
channel(通道)消息能去的地方:syslog,文件或者/dev/null
category(类别):named能够产生的消息类型。例如,有关动态更新或者有关答复查询的消息
module(模块):产生消息来源模块的名字。
facility(设备):syslog设备名。DNS没有它自己特有的设备,但是您可以选择所有的标准设备
severity(严重性):出错消息的糟糕程度。
在设置语句时首先定义通道,即消息可能有的目的地,然后,让几种不同类型的消息去往特定的通道。当产生一条消息时,在其发源地就给它指派了一种类别,一个模块和一种严重性级别。然后它被分发到与其类别和模块相关的所有通道中。每一个通道有一个严重性过滤器,用来制定一条消息要通过过滤器所必须具有的严重性级别。
logging语句的结构如下;
logging {
channel_def;
channel_def;
...
category category_name {
channel-name;
channel_name;
};
};
根据通道是文件通道或系统日志通道channel_def(通道定义)略显不同,你必须为每个通道选择时file或者syslog,一个通道不能二者都是。
channel channel_name{
file path [versions numvers | unlimited] [size sizespace];
syslog facility;
severity severity;
print-category yes | no;
print-severity yes | no;
print-time yes | no;
};
对于一个文件通道来说,numvers说明要保存文件的多少备份版本。
sizespec指定在轮换文件之前,他最大应该增加到多大。
facility指定用来对消息做日志记录的设备名称。他可以是任何标准设备。
serviety可以使用的值为:critical,error,warning,notice,info或者debug。
不同的print选项增加或删除消息前缀,print-time仅对文件通道有意义,系统日志将按自己的时间做日志记录。
BIND中预先定义的日志通道有以下几个:
default_syslog:发送到syslog,设备为daemon。严重性为info。
default_debug:日志记录到文件named.run中,严重性设置为dynamic
default_stderr发送到named进程的标准出错设备,严重性为info
null:丢弃所有的消息
类别由程序员在编写代码的时候确定,他们按照主题或者功能而不是严重性来组织日志消息。
下面我们用一个例子对上述内容进行总结:
我的主配置文件的日志定义如下:
我们在客户机上查询一下,看看/tmp/log.msgs文件中的内容:
好了 到这里我们的DNS服务的配置也基本上结束了。做这些实验,我参考了[Linux系统管理技术手册(第二版)].(美)奈米斯.(这是一本非常经典的书)和OReilly DNS and BIND 5th(2006)(这本书非常详细的介绍了DNS和BIND)以及我的linux老师的授课视频。
做这些实验由于时间匆忙,难免会有错误,当你看到是希望你提醒我,让我们共同进步,关于DNS还有一些功能,以后我会慢慢地补上来的。