我目前正在為我的家庭實驗室設定 DNS 伺服器。我已經製作了一個與實驗室域相對應的區域文件,比方說home.lab
,伺服器現在知道它是該區域的權威伺服器,現在可以回應有關 的查詢device.home.lab
。
現在我想在我的其他裝置上使用此 DNS 伺服器,以便它成為該home.lab
區域的權威,但我還需要它們仍然能夠解析全球互聯網域。似乎沒有辦法將最終主機設定為僅將其用於home.lab
查找,以及其他一些主機。到目前為止我可以看到一些解決方案:
- 設定此伺服器也可以遞歸地解析其他區域(這可以工作,如所述在這個問題中)
- 讓伺服器在請求除自己以外的區域時,以對根伺服器的引用進行回應,並從那裡讓客戶端自行遞歸地詢問層次結構
- 設定另一個 DNS 伺服器,當需要時,
home.lab
它將轉送來自權威 DNS 伺服器的答案,否則將轉送快取的答案
第一個選項似乎很糟糕,因為權威伺服器也承擔著作為其餘網域的遞歸解析器的雙重職責。第二種方法效率低下,因為這樣客戶端將必須手動解析每個新網域的層次結構,這可能會非常慢。
因此,第三種選擇似乎是迄今為止最好的。我將如何在 BIND9 中進行設置,和/或我應該考慮替代方案?
答案1
第一個選項似乎很糟糕,因為權威伺服器也承擔著作為其餘網域的遞歸解析器的雙重職責。
對於小型區域網路/家庭實驗室的使用,這並不是真正的問題。
(這也很常見,例如在 Active Directory 環境中,管理員指示所有用戶端直接使用託管 AD DNS 區域的 AD DC,而不是專用解析器 - 這就是不必要,但嚴格來說也不算壞。
可能存在一些邊緣情況(例如 DNSSEC AD 標誌),但我相信它們會導致不是不是向權威伺服器添加解析器功能,而是相反 - 讓機器使用權威伺服器,就好像它是解析器一樣,而您就是這樣已經正在做。
第二種方法效率低下,因為這樣客戶端將必須手動解析每個新網域的層次結構,這可能會非常慢。
它也行不通,因為大多數客戶只是存根解決者-他們不會遵循推薦。
另一方面,完整的解析器將快取推薦。您一直在使用的公共 DNS 解析器(無論是 ISP 的、Google 的還是其他的)也必須解析每個新網域的層次結構 – 它當然不會保留世界上所有 DNS 記錄的完整副本 – 但它是速度並不慢,因為至少第一層(TLD) 通常會緩存在記憶體中,而且典型域並沒有那麼多層次結構層級。
因此,第三種選擇似乎是迄今為止最好的。我將如何在 BIND9 中進行設置,和/或我應該考慮替代方案?
在 BIND9 中,建立一個type static-stub
指向 homelab 驗證伺服器的區域。 (它類似於type forward
區域,但“static-stub”期望直接指向權威伺服器,而“forward”期望會連結到另一個解析器。我不確定確切的區別。)
對於所有其他網域,您可以像forwarders{}
在全域 BIND 設定中一樣指定上游伺服器。這不是必需的 – BIND9 本身能夠從根 DNS 伺服器一路追蹤引用(只要配置了「根提示」偽區域,預設就會這樣做),這實際上不是慢(儘管肯定可能比將請求轉發到具有自己的大量快取的上游伺服器慢)。
一個常見的替代方案是 Unbound(它更注重用作解析器,僅具有最少的權威伺服器功能)。 Unbound 的配置類似,只是區域類型不是stub
「static-stub」。若要進行未綁定轉送查詢,請設定"."
為「類型:轉送」區域。
請記住,建立自訂 TLD 不會很好地配合 DNSSEC 驗證,因為根區域具有 NSEC 記錄,證明不存在,因此lab.
您可能需要在LAN 解析器中以及有時在主機本身中明確從驗證中排除您的域。只有home.arpa.
網域被保留用於這種用途(具有故意未簽署的 NS 記錄)。
(或者,你可以使能夠DNSSEC,簽署您的內部區域,並在所有驗證解析器上指定自訂「信任錨」。雖然家庭實驗室中並不真正需要 DNSSEC,但這裡的優點是添加信任錨可能比添加排除項更容易,尤其是在 BIND 中。