bind9.8 视图和日志功能

参考:《OReilly DNS and BIND 5th(2006)》

1.视图(view)

大家都知道,现在中国大陆上有三大运营商:联通、电信、移动。他们彼此之间的网络都是独立的,而它们彼此之间相连的带宽非常之小,这就导致了我们跨运营商网络访问的服务因为带宽原因变得缓慢。假设我们的用户大都是电信和移动的用户,那么如果我们把服务器单独放在电信或者移动机房都会导致一部分人访问缓慢。解决方法就是使用双线机房,服务器开双网卡,一个接入电信的网络,一个接入移动的网络,然后,让电信的用户访问电信的网,移动的访问移动的。

这个主意确实不错,可以完美解决我们的问题。但是,具体怎么实现呢?假设我们一个用户过来访问,我们怎么知道它是哪个网络的用户呢? 这就意味的,我们需要一个ip库,这个ip库记录着ip归属哪个网络,而根据这些信息把不同ip指挥到不同地方的功能在bind软件的实现中就是view。 显而易见,ip库越庞大和准确,我们的指挥效果越好,当然,庞大的数据意味着效率的降低,所以,数据库的优化,一直都是个值得探讨的问题。

view的选项很多,只提取必备的话,就可以很简短

	   view string optional_class {
                match-clients { address_match_element; ... };
                zone string optional_class {
                        type ( master | slave | stub | hint |
                     forward | delegation-only );
						file quoted_string;
                };
			};

view的原理是,进来的链接地址匹配某个ip库,给匹配到的ip使用特定的区域文件,给其他匹配到的ip使用其他的区域文件,这样,我们就可以在不同的区域文件中给出不一样的解析。

所以它必备的参数有:

match-clients :匹配客户端地址

zone:区域文件

当然,match-clients 可以匹配很多形式的ip,比如内置变量any、localhost等,还有单个ip如1.1.1.1,网段127.0.0.1/8等等。 如果我们匹配的ip很多,这个时候使用match-clients 一条条写就很费力了。 bind官方最终提出的解决方案是把这些ip放进mysql之类的数据库里。

这里,因为我只是做下实验,网络规模不大,所以直接使用match-clients了。当然,如果view比较多的话,每次都写一大串也是很烦人的,所以这里我使用了acl。

acl的语法非常简单:

acl string { address_match_element; ... };

string:给acl取个别名

address_match_element:ip地址参数,比如1.1.1.1、any、127.0.0.0/8等。

我最终的named.conf非常简单,如下:

acl local { 172.16.0.0/16 ;};

options {
	directory 	"/var/named";
};

view insides IN {
	match-clients { local;};
	zone linzb.com IN {
		type  master;
		file  "linzb.com.zone";
	};
};
view besides IN {
	match-clients { any;};
	zone linzb.com IN {
		type  master;
		file  "linzb.com.zone.1";
	};
};

linzb.com.zone 内容如下:

$TTL 600
@  IN     SOA ns1.linzb.com.     admin.linzb.com. (
                        2 
                        1H
                       2W
                       3D
                       600 )
    IN  NS  ns1
ns1 IN  A   172.16.1.2
www IN  A   172.16.1.4
test    IN  CNAME   www

linzb.com.zone.1 内容如下:

$TTL 600
@  IN     SOA ns1.linzb.com.     admin.linzb.com. (
                        2 
                        1H
                       2W
                       3D
                       600 )
    IN  NS  ns1
ns1 IN  A   192.168.2.127
www IN  A   192.168.2.38
test    IN  CNAME   www

之所以这么设,是因为bind这台有两个ip,192.168.2.127和172.16.1.2,请根据自己的实际情况来

测试的话也很简单:dig -t A www.linzb.com @192.168.2.127和dig -t A www.linzb.com @192.168.1.2 就能看到dns返回不同结果了。

2.日志

日志的作用自然不必多说,bind的提供非常弹性的日志。它有两个关键参数:

channel:即信道,指定了日志数据发送到哪,它们可以是:文件、syslog、标准错误输出、字节桶等

category:即类别,表明什么样的数据会被记录到日志,例如queries(查询日志)、xfer-in(区域文件传入日志)等

它的语法如下:

logging {
                channel string {
                     file log_file;		//日志写入到log_file
                     syslog optional_facility;	//写入到syslog
                     null;				//不写入
                     stderr;			//标准错误输出
                     severity log_severity;		//日志级别
                     print-time yes_or_no;		//日志是否打印时间戳,yes为是
                     print-severity yes_or_no;	//打印级别
                     print-category  yes_or_no;	//是否打印类别
                };
                category string { string; ... };	//第一个string表示category的类别,有queries等,第二个string表示使用哪个channel,可以同时使用多个channel
           };

channel的日志级别有以下几种:critical、error、warning、notice、info、debug、dynamic

其中debug和dynamic是bind特有的等级,debug自身也有级别,默认为1,serverity的默认级别为info (详见:《OReilly DNS and BIND 5th(2006)》 第133-137页)

category的类别也有很多,它们的相关解释在 《OReilly DNS and BIND 5th(2006)》137-138页

这里我做了简单的配置,最终named.conf如下:

acl local { 127.0.0.1/8 ;};

options {
	directory 	"/var/named";
};
logging {
                channel default_log {
                     file "/var/log/bind.log";
                     severity info;
                     print-time yes;
                     print-severity yes;
                     print-category yes;
                };
                category queries { default_log; };
           };

view insides IN {
	match-clients { local;};
	zone linzb.com IN {
		type  master;
		file  "linzb.com.zone";
	};
};
view besides IN {
	match-clients { any;};
	zone linzb.com IN {
		type  master;
		file  "linzb.com.zone.1";
	};
};

dig -t A www.linzb.com @192.168.2.127 测试,查看日志如下:

28-Feb-2017 16:35:58.188 queries: info: client 192.168.2.127#57851: view besides: query: www.linzb.com IN A + (192.168.2.127)

debug:

1.出现“/etc/named.conf:16: expected quoted string near ‘/‘”

这个表示在第16行,参数后面的值需要加 “” 号。

2.配置了日志但是没有日志生成。

可以tail -f  /var/log/messages 查看相关日志信息,一般是没权限,比如我的是/var/log/bind.log,named用户在这个地方没写权限,所以我

touch /var/log/bind.log

chown -R named:named  /var/log/bind.log  解决

时间: 2024-07-31 05:48:09

bind9.8 视图和日志功能的相关文章

《二》django之url、视图、日志功能logging

django之url 参考文档:https://yiyibooks.cn/xx/Django_1.11.6/topics/http/urls.html 在setting中ROOT_URLCONF = 'devops.urls' 配置 Django如何处理请求 匹配url,都是从第一个往下匹配,若第一个可以匹配,就不用跳到第二个url规则 from django.conf.urls import url,include from . import views app_name = 'dashboa

MongoDB实战指南(四):MongoDB的Journaling日志功能

mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据库在服务器上的启动信息.慢查询记录.数据库异常信息.客户端与数据库服务器连接.断开等信息.Journaling日志功能则是mongoDB里面非常重要的一个功能,它保证了数据库服务器在意外断电.自然灾害等情况发生下数据的完整性.尽管mongoDB还提供了其它的复制集等备份措施(后面会分析),但Journaling的功能在生产环境中是不可缺少的,它依靠了较小的CPU和内存消耗,

01Spring_基本jia包的导入andSpring的整体架构and怎么加入日志功能

1.什么是Spring : v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style De

如何实现企业管理系统的操作日志功能

如何实现企业管理系统的操作日志功能 实现思路解析:在做企业管理系统的同时,操作日志这一功能是必不可少的:所谓的操作日志就是记录一个用户从登陆时开始,到退出登陆时结束,记录这一过程中用户的全部操作:这里用.Net MVC为例 第一步:数据库 表1:用户日志(Sys_UserLoginLog) 列名 数据类型 主键/外键 说明 LoginID int 主键 日志ID StaffID int 外键 员工ID operationLog nchar(50) 操作内容 operationDate datet

log4js实现node的日志功能

nodejs实现日志功能可以使用log4js,但其github只是简单的介绍了一下,我在使用的时候也遇到了一些问题,总结出来,希望能给初学者一些帮助. log4在java和net里都有,相信大家都用过,所以就不介绍基本概念了,直接给出node代码. 首先,安装 npm install log4js 之后,我们建立一个log.js文件,用来配置log4js. var log4js = require('log4js');log4js.configure({appenders: [ { type:

(译)Windsor入门教程---第五部分 添加日志功能

介绍 现在我们已经有了基础的框架了,是时候添加内容了,那么我们首先应该考虑的就是在应用程序中添加日志功能.我们会使用Windsor来配置,在这一部分,你将学习Windsor之外的其他功能. Logging Facility 在上一部分说过,Windsor有很多自带的可选的功能组件,他们扩展了Windsor的即用性.在这一部分,我们将在程序中添加日志功能. Logging Facility提供了一些常用的日志框架比如Log4net.Nlog,以及mvc内置的日志框架Trace.Logging Fa

.NET跨平台之旅:增加文件日志功能遇到的挫折

在将我们的ASP.NET 5示例站点(about.cnblogs.com)升级至ASP.NET 5 RC1的时候,我们增加了控制台日志功能. 在ASP.NET 5添加日志功能很简单,只需在project.json中添加Microsoft.Extensions.Logging.Console的引用: "dependencies":{ "Microsoft.Extensions.Logging.Console": "1.0.0-*" } 并且在 St

【.NET】AOP思想下的日志功能

AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programming,面向对象编程)的补充和完善. 我们说了这么久的OOP,对于OO的理解也越来越深入,OO的伟大让我们一度折服.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.可当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力. 也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日

如何在通用权限管理系统中集成log4net日志功能

开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个组件的介绍 ”Log4net是基于.net开发的一款非常著名的记录日志开源组件.最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源, 于另外的一个非常著名的姐妹组件-log4j.现由Apache组织开发与维护.此日志架构是可灵活扩展,且通过配置文件来设置日志的属性及输出,