![Bind9:當網路連線中斷時,轉送至本機名稱伺服器不起作用](https://rvso.com/image/770105/Bind9%EF%BC%9A%E7%95%B6%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E4%B8%AD%E6%96%B7%E6%99%82%EF%BC%8C%E8%BD%89%E9%80%81%E8%87%B3%E6%9C%AC%E6%A9%9F%E5%90%8D%E7%A8%B1%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我有以下設定:
在非常有限的硬體上的bind9實例(下面稱為L)用於解析我的本地網路上的名稱。它是 home.mydomain.com 區域的權威大師。對此伺服器的查詢有效,並傳回 homedns.home.mydomian.com 作為 NS 及其 IP 192.168.1.77 作為附加記錄。
用於解析網際網路和本機名稱的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 的答覆後在互聯網上查詢 mydomain.com。
挖到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 的答案傳回給客戶端,而且我沒有任何想法,我可以嘗試避免向互聯網查詢轉發區域。
答案1
問題中引用的日誌項目表示該錯誤與沒有 Internet 連線時 DNSSEC 驗證失敗有關。
請注意錯誤訊息的“no valid 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
因為該問題似乎不太可能與其引用的網域名稱或擁有該網域的企業有任何關係。)