我想使用 BIND 作为公司域的公共名称服务器。我正在使用全新安装的 ubuntu 服务器 20.04.1 和 BIND 9.16.1。问题是 BIND 从不权威地回答。我可以使用 dig 看到这一点。为了找到问题,我尝试了一个最小的区域“example.com”,但没有成功。区域文件是 db.example.com:
example.com. 86400 IN SOA ns1.example.com. hostmaster.example.com. (
1 ; Serial
900 ; Refresh
300 ; Retry
86400 ; Expire
600 ) ; Negative Cache TTL
example.com. 86400 IN NS ns1.example.com.
example.com. 86400 IN MX 10 mail.example.com.
ns1.example.com. 86400 IN A 123.123.123.123
mail.example.com. 86400 IN A 125.125.125.125
当然,上面的 IP 地址并不是真正的 IP 地址,但是 ns1.example.com 的 IP 地址是 BIND 运行的系统的公共 IP 地址。named-checkzone 对此很满意。在 named.conf.local 中仅添加以下行:
zone "example.com" {
type master;
file "/var/lib/bind/db.example.com";
};
命名.conf.options:
options {
directory "/var/cache/bind";
dnssec-validation auto;
auth-nxdomain no;
listen-on { any; };
listen-on-v6 { any; };
recursion no;
};
将 dig 与 ANY 一起使用,我可以看到区域文件中的所有记录,但 BIND 总是回答AUTHORITY: 0。A 记录也不会出现在答案部分,而是出现在附加部分中。不幸的是,我不允许发布 dig 的原始输出,因为它看起来像垃圾邮件。该区域配置为主,NS 记录指向运行 BIND 的服务器的 IP 地址。另一个想法是 BIND 可能会尝试从 root 查询“example.com”并且知道它不是真正的权威名称服务器。所以我也尝试了同样不应该存在于任何地方的域“example.invalid”。结果与“example.com”相同。我以前从来没有遇到过这个问题。我还能尝试什么来解决这个问题?
这很正常,并不意味着回复不权威。恰恰相反,本节旨在包含告诉客户端权限在其他地方的记录——例如,如果您查询托管父
com
区域甚至根区域的名称服务器,您将得到一个“推荐”响应,其中包含本节中的 NS 记录。据我所知,一个实际的权威回复不应该包含本节中的任何记录。
因此,换句话说,您正在查看 dig 输出的错误部分。要确定响应是否权威,请查看“标志”部分-
aa
标志(权威答案)是指标。这也是正常的。它们不会出现在答案部分,因为您的
example.com
域没有任何 A 记录。但是,它有一些记录类型(NS 和 MX)引用另一个具有 A 记录的域名。通常需要第二次查询才能将它们解析为实际地址,但 DNS 服务器可以选择在附加部分中包含这些 A/AAAA 记录。
因此,当您查询时
dig example.com MX
,Answer 部分将包含 example.com 的 MX 记录(即您查询的确切内容),而 Additional 部分将包含 mail.example.com 的 A/AAAA 记录(您没有查询,但服务器将它们包括在内以加快速度)。