我成功地在服务器上使用了一个小型(20,000 个条目)区域文件bind9
,但今天我的数据提供商发送了一个更新,导致区域文件成为 300,000+ 条目大 (30Mb+)。
问题是服务器无法使用该区域文件启动。不会named-checkconf
报告任何错误。没有可用的日志消息(或者我无法正确记录它们)。
我想知道是否bind9
能够处理大型配置文件,如果是,我该如何修复它。如果没有,我想知道是否有解决此问题的方法。也许可以将条目存储在数据库中?
我尝试使用的区域文件可以从以下位置下载这里。
更新:
service bind9 status
显示了一些可能相关的信息:
adjusted limit on open files from 4096 to 1048576
found 1 CPU, using 1 worker thread
using 1 UDP listener per interface
using up to 4096 sockets
loading configuration from '/etc/bind/named.conf'
我不太确定如何解释或使用这些信息......有什么想法吗?另外,我无法找到bind9
日志所在的位置:/var/log/
没有bind9
条目。谁能告诉我它们在 Debian Jessie 上的位置吗?
答案1
我看过你的区域文件:它似乎是一个包含超过 350k 域的列表,目前它被定义为本地 BIND 服务器作为主服务器。域的格式如下:
zone "xxxx.com" { type master; notify no; file "null.zone.file"; };
根据内存要求,我想说,作为一个大概数字,您可能需要大约 40MB-80MB 的可用 RAM,因为域表已加载到内存中。 (不过至少 200MB 我会觉得更舒服)
除非服务器的 RAM 受到严重限制,否则这似乎不太可能,但它可能会发生。
我还注意到几个域名的名称中有下划线(“_”)。 DNS RR 中的下划线会破坏一些 RFC(RFC 952 和 RFC 1123),您需要将指令添加到 BIND 选项部分:
check-names master ignore;
至于列入黑名单的域名的格式和方法。从版本 9.8 开始,BIND 支持所谓的响应策略区域 (RPZ),它是专门为将域列入黑名单而创建的。
如今,一些(商业)黑名单提供商都遵循这种格式。 (我自己在工作和家里都使用 RPZ)。
使用 RPZ 应该更有意义,也意味着更轻的负载,因此,如果您支付服务费用,我建议您联系您的供应商以了解如何使用它。 RPZ 格式在某种程度上还支持通配符,这意味着黑名单文件要小得多。
另一种方法是使用脚本处理文件,将其更改为 RPZ 格式。
我会在这里留下有关RPZ和官方RPZ提供商的相关链接:
以及如何配置 RPZ 的教程:
http://www.zytrax.com/books/dns/ch9/rpz.html
正如您可能已经注意到的,在当前配置下,您还将有很多打开的文件;因此我再次推荐使用 RPZ。
为了在大型电子邮件、DNS 或 HTTP 服务器中处理更多打开的文件,通常必须提高限制。
情况并不像以前的旧内核那么糟糕,但尽管如此,我还是建议提高限制。
编辑并修改/添加全局打开文件限制/etc/sysctl.conf
指令:fs.file-max
fs.file-max=500000
要应用新的文件限制而不重新启动,您需要运行:
sudo sysctl -p
对于每个进程的文件限制,编辑/etc/security/limits.conf
:
* - nofile 400000
要应用每个进程的文件限制,请注销并登录,或运行:
sudo ulimit -n 400000
提高这两个限制后,需要重新启动BIND:
sudo service bind9 restart
要将文件转换为 RPZ 格式,请运行:
cat bind | tr -d \" | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db
该脚本会将条目转换为以下格式:
zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .
在命名的选项部分添加:
response-policy { zone "rpz"; };
创建 RPZ 区域的声明:
zone "rpz" {
type master;
file "/etc/bind/rpz.db";
};
添加到文件顶部/etc/bind/rpz.db
:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS your_dns_fqdn.
取消配置您的 DNS 文件并重新启动 BIND 服务器。显然,RPZ 文件可以使用通配符进行优化并变得更短,但是即使没有这种优化,现在您也不需要那么多打开的文件。
至于查询BIND/DNS日志,它们与/var/log/syslog
带标签的系统登录在一起named
。您可以使用命令:
sudo grep named /var/log/syslog