我有以下设置:
非常有限的硬件上的 bind9 实例(以下称为 L),用于解析本地网络上的名称。它是 home.mydomain.com 区域的权威大师。对该服务器的查询工作并将 homedns.home.mydomian.com 作为 NS 返回,并将其 IP 192.168.1.77 作为附加记录返回。
用于解析 Internet 和本地名称的 bind9 实例(以下称为 M)。这里没有使用全局转发选项。配置了一个转发区域:
zone "home.mydomain.com" in {
type forward;
forward only;
forwarders { 192.168.1.77; };
};
注意 1:mydomain.com 是一个现有的注册域,但没有 home.mydomain.com 的记录
注2:M的bind9版本很老:9.8.1-P1
只要互联网连接正常,此设置就可以工作,但当连接断开时,本地名称查询不会得到答复。日志是 syslog 是
Aug 30 09:05:42 M named[1611]: error (no valid DS) resolving 'xxx.home.mydomain.com/A/IN': 192.168.1.77#53
当连接建立时捕获网络以成功解析表明 M 在收到 L 的回答后在 Internet 上查询 mydomain.com。在 M 给客户端的回答中,AUTHORITY SECTION 已更改:
挖到L:
;; ANSWER SECTION:
syslog.home.mydomain.com. 3600 IN A 192.168.1.99
;; AUTHORITY SECTION:
home.mydomain.com. 3600 IN NS homedns.home.mydomain.com.
;; ADDITIONAL SECTION:
homedns.home.mydomain.com. 3600 IN A 192.168.1.77
挖到M:
;; ANSWER SECTION:
syslog.home.mydomain.com. 2134 IN A 192.168.1.99
;; AUTHORITY SECTION:
net. 171334 IN NS j.gtld-servers.net.
net. 171334 IN NS m.gtld-servers.net.
net. 171334 IN NS i.gtld-servers.net.
net. 171334 IN NS k.gtld-servers.net.
net. 171334 IN NS g.gtld-servers.net.
net. 171334 IN NS e.gtld-servers.net.
net. 171334 IN NS h.gtld-servers.net.
net. 171334 IN NS a.gtld-servers.net.
net. 171334 IN NS d.gtld-servers.net.
net. 171334 IN NS f.gtld-servers.net.
net. 171334 IN NS b.gtld-servers.net.
net. 171334 IN NS c.gtld-servers.net.
net. 171334 IN NS l.gtld-servers.net.
我不明白为什么 M 不只是将 L 的答案返回给客户端,而且我没有任何想法,我可以尝试避免向 Internet 查询转发区域。
问题中引用的日志条目表明该错误与没有 Internet 连接时 DNSSEC 验证失败有关。
请注意错误消息的“无有效 DS”部分:
推测到达该前向区域的查询的答案通常仅因为公共
example.com
区域作为未签名区域存在(即,DS
作为正确区域委托的一部分存在不证明example.com
)而被接受,但是当无法再获取该证明时因为没有互联网连接,答案不再被接受,因为不再可能验证这些是否/如何必须签名。一种选择是签署区域并专门为此区域
home.example.com
添加静态信任锚。另一个是选择性地禁用验证;当前 BIND 有一个
validate-except
选项,允许您指定不应执行验证的域名列表,如下所示:还有可能使用该
dnssec-validation
选项完全禁用验证,如果此 BIND 实例比此特定转发具有更广泛的用途,我不建议这样做。(请注意,我已将问题中使用的域名替换为,
example.com
因为该问题似乎不太可能与其引用的域名或拥有它的企业有任何关系。)