bind9:當網際網路連接斷開時,轉發到本地名稱伺服器不起作用
我有以下設置:
非常有限的硬體上的 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”部分:
Aug 30 09:05:42 M named[1611]: error (no valid DS) resolving 'xxx.home.example.com/A/IN': 192.168.1.77#53
推測到達該前向區域的查詢的答案通常僅因為公共
example.com
區域作為未簽名區域存在(即,DS
作為正確區域委託的一部分存在不證明example.com
)而被接受,但是當無法再獲取該證明時因為沒有網際網路連接,答案不再被接受,因為不再可能驗證這些是否/如何必須簽名。一種選擇是簽署區域並專門為此區域
home.example.com
添加靜態信任錨。另一個是選擇性地禁用驗證;目前 BIND 有一個
validate-except
選項,允許您指定不應執行驗證的域名列表,如下所示:
validate-except
這指定了不應執行 DNSSEC 驗證的域名列表,無論這些名稱處或上方是否存在信任錨。例如,當配置僅用於本地使用的頂級域時,可以使用此方法,這樣根區域中該域的安全委派不會導致驗證失敗。(這類似於設置負信任錨,只是它是永久配置,而負信任錨會在設定的時間段後過期並被刪除。)
還有可能使用該
dnssec-validation
選項完全禁用驗證,如果此 BIND 實例比此特定轉發具有更廣泛的用途,我不建議這樣做。(注意,我已將問題中使用的域名替換為,
example.com
因為該問題似乎不太可能與它引用的域名或擁有它的企業有任何關係。)