Domain-Name-System

當無法在本地找到記錄時,可以將權威 DNS 伺服器配置為遞歸嗎?

  • March 6, 2019

希望這是可能的。

問題

是否可以配置對給定域具有權威性的 DNS 伺服器,當它在本地找不到記錄時通過轉發器/根提示“回退”和遞歸?

場景

舉一個具體的場景,想像一個由域的內部 Active Directory 支持的 DNS 伺服器 (10.10.10.10) 提供服務的私有(內部)網路poorlyplanned.com

查詢記錄的內部客戶端hostgroupA.poorlyplanned.com從本地內部 DNS 伺服器 (10.10.10.10) 獲得答案。來自內部客戶端對其他域的查詢通過內部 DNS 伺服器 (10.10.10.10) 使用轉發器/根提示遞歸解析。

此外,還有一個公共 DNS 伺服器(實際上是大型高可用性負載平衡伺服器),例如 IP 1.2.3.4,並且對同一域名具有權威性poorlyplanned.com

查詢記錄的外部客戶端直接到位於 1.2.3.4 的公共 DNS 伺服器進行解析。例如,公共查詢webserverX.poorlyplanned.com直接從公共 D​​NS 伺服器 1.2.3.4 解析,並返回 50.51.52.53 給客戶端。當我說直接解決時,我的意思是 NS 記錄指向公共 DNS 伺服器,並且查詢不是通過內部伺服器進行的(無論如何它都不能公開訪問)。

內部 DNS 填充了poorlyplanned.com不應公開解析的私有 DNS 記錄,而外部 DNS 填充了應該可公開解析的公共 DNS 記錄(對於同一域)。

到目前為止,非常標準的 DNS 內容,儘管可以說並不理想。

問題

內部客戶端無法解析公共 DNS 記錄,webserverx.poorlyplanned.com因為這些記錄未在內部 DNS 伺服器上定義。由於內部 DNS 伺服器對同一poorlyplanned.com域具有權威性,因此它僅在查看內部記錄後簡單地返回“未找到 DNS 記錄”結果 - 就像權威 DNS 伺服器通常所做的那樣。

我們面臨的一個限制是,公共 DNS 伺服器由第三方管理並且經常流失,這使得在內部 DNS 伺服器上手動維護一組重複的記錄而不丟球是一項非常困難的任務。

作為一種解決方法,我們嘗試添加其他指向外部 DNS 伺服器的客戶端 DNS 查找伺服器條目(以嘗試補充內部 DNS 伺服器)但這不起作用,因為兩者都是權威的,並且客戶端不會嘗試後續一旦有結果返回列表中的伺服器。

腦裂或水平配置也不可行,因為它們的兩台伺服器都包含相同的 DNS 記錄,只是具有不同的 IP,或者可以共享區域文件。

但是,如果當內部 DNS 伺服器無法在本地找到記錄時,它可以通過轉發器/根提示遞歸解析,這將是一個魅力。但是怎麼做?

我意識到如果內部域最初配置了一些子域偏移量,int.poorlyplanned.com那麼我們就沒有問題。不幸的是,已經部署的資源規模和所涉及的站點不允許這種變化。

當然這不是一個獨特的問題?

我希望我已經足夠清楚地表達了自己-如果我可以幫助澄清,請告訴我。

感謝閱讀/幫助!

這確實不是一個獨特的問題。從我的腦海中,有兩種​​常用的“解決方案”:

  • 手動將條目複製到兩個 DNS 基礎設施,以獲取需要公開的記錄。請注意,這僅適用於公開託管的服務,例如 VPS 實例。由於app.example.com內部託管需要外部公共 IP 地址,但內部可能需要私有 IP 地址。既然自動化是大肆宣傳,那麼如果您經常需要在兩個位置更改這些公共 IP 地址,您將希望對其進行自動化。如果您目前的 DNS 託管提供商不好(質量差或沒有自動化 API),那麼您可以簡單地切換到其他提供商。
  • 在內部使用不同的域。如果您擁有example.com並且您的公共伺服器使用此域,例如www.example.com,如果您使用 Windows Active Directory或任何您喜歡的東西,mail.example.com那麼您的內部網路可以使用。內部資源將存在於此名稱空間中,而公共資源(例如)將被轉發到您的公共 DNS 提供商。這樣您就不需要複製 DNS 條目。ad.example.com``comp.example.com``www.example.com

兩種解決方案各有利弊,可能存在其他解決方案。

如果在其數據庫中找不到答案,則無法配置權威 DNS 伺服器來轉發查詢。“權威”意味著它知道該區域的一切。您可以配置特定的轉發器,例如:

zone "example.com" {
  type master;
  file "...";
};
zone "www.example.com" {
  type forward;
  forwarders { 203.0.113.53; };
};
zone "mail.example.com" {
  type forward;
  forwarders { 203.0.113.53; };
};

引用自:https://serverfault.com/questions/957014