當無法在本地找到記錄時,可以將權威 DNS 伺服器配置為遞歸嗎?
希望這是可能的。
問題
是否可以配置對給定域具有權威性的 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
直接從公共 DNS 伺服器 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; }; };