Domain-Name-System

拆分 DNS - 易於維護的最乾淨的解決方案?

  • October 27, 2011

我們為我們的域設置了拆分 DNS,這會導致內部客戶端解析來自外部客戶端的不同 DNS 記錄。

就像現在一樣,這兩個區域完全分開管理。對於內部和外部不同的記錄,這沒有問題,但對於其他一切,所有記錄都必須在兩個地方重複。大多數 CNAME 記錄、MX 記錄、SPF 記錄和一些 A 記錄都需要在這兩個地方輸入和維護。

雖然這並不是天生不可接受的,但從設計的角度來看,這樣的數據複製並不理想。我覺得理想情況下,內部名稱伺服器會簡單地轉發來自外部名稱伺服器的結果,但允許我們覆蓋或添加額外的記錄。雖然看起來我可以使用指定的轉發器(如dnsmasq)來做這樣的事情,但平面文件配置很難將這個想法推銷給團隊的其他成員。

除此之外,我能想出的最佳解決方案是PowerDNS和 MySQL 後端和Web 界面。 這使得為我們想要覆蓋的每個子域(例如 www.example.com)添加區域和根 A 記錄變得相當容易,這意味著根域(例如 example.com)上的其他記錄仍將是從外部名稱伺服器轉發。

對於那些本應很常見的事情,我似乎仍然偏離了常態,對吧?有沒有更簡潔的方法來管理拆分 DNS 而不維護重複記錄?還是我缺少什麼?

在一個權威名稱伺服器位於內部網路邊界的網路中,我使用bind視圖和$INCLUDE指令:

mydomain-global.zone:

@ IN SOA ns1 hostmaster ( 12345; 1D; 2M; 1M; 3H )
 IN NS ns1
 IN NS ns2

 IN MX 10 mail

 www               IN A 1.2.3.4
 other-public-host IN A 1.2.3.5

mydomain-internal.zone:

$INCLUDE mydomain-global.zone

an-internal-record IN A   10.20.30.40
_kerberos          IN SRV 0 0 88 dir

區域是根據視圖定義選擇的:

view "internal" {
 match-clients { 10.0.0.0/8; };
 zone "mydomain" {
   type master;
   file "mydomain-internal.zone";
 };
 include "named.conf.internalzones";
}

view "global" {
 match-clients { any; };
   zone "mydomain" {
   type master;
   file "mydomain-global.zone";
 };

為了能夠為內部/外部查詢分配不同的記錄目標,$INCLUDE請在mydomain-(internal|global).zone.

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