bind日志功能:
在默认情况下,BIND9 把日志消息写到 /var/log/messages文件中,主要就是启动,关闭的日志记录和一些严重错误的消息;而将调试日志信息写入 BIND 服务器工作目录中的 named.run 文件。
通过在options字段中添加“querylog yes”,messages日志会记录查询的请求查询的记录,但是该方法繁杂,系统提供了logging的方法。
BIND 9 的日志是可以灵活配置的,要详细记录服务器的运行状况,要在配置文件 named.conf 中使用 logging 语句来定制自己所需要的日志记录。
BIND 日志的常用术语:在讲述 logging 语句的语法之前,先要熟悉一些常用术语
channel(通道) 日志输出方式,如:syslog(记录到/var/log/messages中)、文本文件、标准错误输出或 /dev/nullcategory(类别) 日志的消息类别,如:查询消息或动态更新消息等module(模块) 产生消息的来源模块名称facility(设备) syslog 设备名severity(严重性) 消息的严重性等级
logging 语句的语法为:
logging {
channel channel_name { // 定义通道
file log_file [versions number | unlimited] [size sizespec]; | syslog optional_facility; | null; | stderr; // 定义输出方式
severity log_severity; // 定义消息严重性
[print-time boolean;] // 是否在消息中添加时间前缀,仅用于 file 日志
[print-severity boolean;] // 是否在消息中添加消息严重性前缀
[print-category boolean;] // 是否在消息中添加消息类别名前缀
};
category category_name { // 定义类别
channel_name;
……
};
};
配置日志时,首先要定义通道,然后将不同的日志类别的数据指派到指定的通道上输出。
BIND 9 的默认配置是:
logging {
// 由于使用了默认通道,所以没有通道定义部分
category “default” { “default_syslog”; “default_debug”; };
};
BIND 9 中可用的类别名(category_name)有:
category 语句是指定哪一种类别的信息使用哪个或者哪几个已经定义了的通道输出。
client 处理客户端请求。
config 配置文件分析和处理。
database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录。
default 匹配所有未明确指定通道的类别。
dnssec 处理 DNSSEC 签名的响应。
general 包括所有未明确分类的 BIND 消息。
lame-servers 发现错误授权,即残缺服务器。
network 网络操作。
notify 区域更新通知消息。
queries 查询日志
resolver 名字解析,包括对来自解析器的递归查询信息。
security 批准/非批准的请求。
update 动态更新事件。
xfer-in 从远程名字服务器到本地名字服务器的区传送。
xfer-out 从本地名字服务器到远程名字服务器的区传送。
severity 语句用于指定消息的严重性等级,log_severity 的取值为(照严重性递减的顺序);
criticalerrorwarningnoticeinfodebug [ level ]dynamic 是一个特殊的值,它匹配服务器当前的调试级别定义了某个严重性级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为 error,则会记录 critical 和error 两个级别的信息。对于系统管理员来说,一般记录到 info 级别就可以了。
例如
要记录查询消息和区域传输,可以在 named.conf 中添加如下配置:
logging {
channel query_log {
file “/var/log/bind/query.log”size 20M;
severity info;
print-time yes;
print-category yes;
};
channel xfer_in_log {
file “/var/log/bind/xfer_in_log”size 20M;
severity debug 3;
print-time yes;
print-severity yes;
print-category yes;
};
channel xfer_out_log {
file "/var/log/bind/xfer_out_log" size 10M;
severity debug 3;
print-time yes;
print-severity yes;
print-category yes;
};
category queries { query_log; };
category xfer-out { xfer_out_log; };
category xfer-in { xfer_in_log; }
};
};
这样服务器会在工作目录(directory 语句所指定的目录,Ubuntu 为:/var/cache/bind)下创建 query.log 文件,并把运行过程产生的 queries 消息写如到此文件中。
BIND 9 预制了如下四个默认通道;
channel “default_syslog” {
syslog daemon; // 发送给 syslog 的 daemon 设备
severity info; // 只发送此 info 及其更高优先级的信息
};
channel “default_debug” { // 只有当服务器的 debug 级别非 0 时,才产生输出。
file “named.run”; // 写入工作目录下的 named.run 文件
severity dynamic; // 按照服务器当前的debug 级别记录日志
};
channel “default_stderr” {
stderr; // 写到stderr
severity info; // 只发送此 info 及其更高优先级的信息
};
channel “null” {
null; // 丢弃所有发到此通道的信息
};
rndc:remote name domain controller:远程域名服务器控制器
/etc/rndc.conf:rndc配置文件
/etc/rndc.key:rndc秘钥文件
例:
192.168.10.20远程控制192.168.10.10
192.168.10.10配置
# rndc-confgen -a //执行命令生成秘钥文件
# rndc-confgen > /etc/rndc.conf //执行命令生成rndc配置文件
客户端只需rndc.conf配置文件即可
rndc.conf解析:文件中有一部分需要拷贝到named.conf中
# Start of rndc.conf //配置文件开始
key "rndc-key" { //定义key名称,如“rndc-key”
algorithm hmac-md5; //加密算法
secret "8pycNW/k9tI+4EfR7JHs2g=="; //生成密文
};
options {
default-key "rndc-key"; //使用的秘钥,秘钥名称要和key定义的名字相同
default-server 127.0.0.1; //监听哪个IP地址,如:服务器填“127.0.0.1”,客户端填“192.168.1.10”(服务器IP地址)
default-port 953; //rndc默认端口号,为tcp的953端口
};
# End of rndc.conf //配置文件结束
添加到named.conf文件中的内容解析:
key "rndc-key" {
algorithm hmac-md5;
secret "8pycNW/k9tI+4EfR7JHs2g==";
};
controls {
inet 127.0.0.1 port 953 //定义监听的IP地址和远程控制的端口
allow { 127.0.0.1; } keys { "rndc-key"; }; //定义允许远程控制的主机和key文件
};
DNS服务器压力测试:
queryperf:DNS性能测试工具
建立测试文件格式: www.gooann.net A
命令:queryperf -d /root/file -s DNS服务器IP
-d:指定测试文件
-s:指定测试DNS服务器地址
dnstop:监控dns
-4:使用IPv4
-R:请求的数据包
-Q:回复的数据包
# dnstop -4 网卡名称 -R -Q