我在 FreeBSD 12.1 服务器上使用 Bind 作为 samba DC 的 DNS 后端。
在我的配置中,本地子网数据库存储在 samba ldap 中,并使用转发器 dns 选项来解析全局域名。
我使用相同的编译选项将 Bind 从 9.11 更新到 9.16,并且在此全局名称解析之后停止并显示下一条消息:
root@Desk1:~ # nslookup google.com 192.168.0.19
Server: 192.168.0.19
Address: 192.168.0.19#53
** server can't find google.com: SERVFAIL
我的named.conf:
options {
directory "/usr/local/etc/namedb/working";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
auth-nxdomain yes;
notify no;
empty-zones-enable no;
tkey-gssapi-keytab "/var/db/samba4/bind-dns/dns.keytab";
minimal-responses yes;
allow-query { 127.0.4.1; 192.168.0.0/24; };
allow-recursion { 127.0.4.1; 192.168.0.0/24; };
forwarders { 192.168.0.1; 192.168.0.2; };
allow-transfer { 192.168.0.0/24; key dns.example.local; };
listen-on { 127.0.4.1; 192.168.0.19; };
query-source address * port 53;
rate-limit { responses-per-second 15; window 5; };
tcp-clients 1000000;
## bind916 options
dnssec-validation no;
# auto-dnssec off;
recursion yes;
# forward only;
};
zone "." {
type hint;
file "/usr/local/etc/namedb/named.root";
};
zone "localhost" {
type master;
file "/usr/local/etc/namedb/master/localhost-forward.db";
};
zone "127.in-addr.arpa" {
type master;
file "/usr/local/etc/namedb/master/localhost-reverse.db";
};
logging {
channel update_debug {
file "/var/log/named-update.log";
severity debug 3;
print-category yes;
print-severity yes;
print-time yes;
};
channel security_info {
file "/var/log/named-auth.log";
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
channel querylog {
file "/var/log/named-debug.log";
severity debug 10;
print-category yes;
print-severity yes;
print-time yes;
};
category update { update_debug; };
category security { security_info; };
category queries { querylog; };
};
include "/var/db/samba4/bind-dns/named.conf";
我尝试从 Bind 9.16 的发行说明中设置一些选项并搜索任何解决方案,但没有结果。
前段时间,当 Bind 9.14 尚未弃用时,一切都运行正常,没有任何问题。在升级到 9.16 后,我经历了一些不愉快的尝试,因此需要降级到 9.11。
有想法吗?
答案1
从问题中看不出实际问题是什么,但可以确定的是,您的日志配置存在问题,总体而言存在故障排除问题。
我将重点介绍这些方面,因为一旦您看到日志,实际问题就可能微不足道了。
日志记录
您的配置被覆盖的方式logging
很可能是无法找到问题的原因。
即使只是回到默认的日志记录行为(即,如果您logging
从配置中删除整个部分),您也应该在至少基本故障排除方面有一个可接受的基线。
为了使您当前的配置更好,我强烈建议还将类别default
(捕获您未为其创建特定配置的所有类别)发送到某个地方。
您目前正在丢弃大多数类型的日志消息(除update
、security
和 之外的所有内容queries
)。
我预计例如resolver
或network
类别可能与问题相关,但正如我所指出的,default
将捕获“其他所有内容”,因此这可能比从相当长的类别列表中开始猜测更好。
为了进行故障排除,启动 BIND 有时也很有用named -g
(在前台启动命名,在终端中输出日志),但我建议无论如何都要修复日志配置。
配置/数据有效性
如果这方面存在问题,它应该显示在日志中(在上述修复之后!),但也有专门用于此目的的工具。
就像是
named-checkconf -zj
将有助于进行基线检查以确保配置+数据“正常”(检查配置+区域是否可以加载,但不一定是好的)。
其他配置问题,不太可能与当前问题相关
问题中的配置中还有一些条目看起来确实很糟糕。除非确实有充分的理由,否则我强烈建议删除它们:
auth-nxdomain yes;
强制 BIND 针对非权威 NXDOMAIN 响应发送不正确的 NXDOMAIN 响应。为什么要这样做?
query-source address * port 53;
强制将出站查询的源端口设置为 53,而唯一真正可接受的做法(也是默认做法)是从大量端口中随机选择。您的配置容易受到欺骗性响应的滥用。
dnssec-validation no;
禁用 DNSSEC 验证,进一步导致滥用。
答案2
问题可能是他们目前仅支持最高版本 9.12 左右:
请注意,这是在 ARM 处理器上,但您需要包含到 bind named.conf 中的“/var/lib/samba/bind-dns/named.conf”文件夹仅包含最高 9.12 版本的链接。
dlz "AD DNS Zone" {
# For BIND 9.8.x
# database "dlopen /usr/lib/aarch64-linux-gnu/samba/bind9/dlz_bind9.so";
# For BIND 9.9.x
# database "dlopen /usr/lib/aarch64-linux-gnu/samba/bind9/dlz_bind9_9.so";
# For BIND 9.10.x
# database "dlopen /usr/lib/aarch64-linux-gnu/samba/bind9/dlz_bind9_10.so";
# For BIND 9.11.x
# database "dlopen /usr/lib/aarch64-linux-gnu/samba/bind9/dlz_bind9_11.so";
# For BIND 9.12.x
# database "dlopen /usr/lib/aarch64-linux-gnu/samba/bind9/dlz_bind9_12.so";
};
也许可以尝试使用最新版本。可能会有用。