Domain-Name-System

我可以使用 server 2016 DNS 策略返回備用 IP,但僅用於域中的某些記錄嗎?

  • February 11, 2020

我需要提供一種具有兩個關鍵目標的 DNS 腦裂場景:

  1. “特殊”DNS 客戶端(基於其子網)必須將一個域中的某些 A 記錄解析為與其餘客戶端不同的 IP 地址
  2. 無論哪個客戶要求,同一域中的所有其他記錄都必須平等解析。

換句話說,我想創建一種“DNS 重寫”或覆蓋,其中很少有記錄對於某些客戶端會有所不同。我希望通過 Server 2016 中的 DNS 策略來實現這一點,該策略將“裂腦/水平”描述為預期場景之一,例如https://blogs.technet.microsoft.com/networking/2015/05/12/split-brain -dns-deployment-using-windows-dns-server-policies/ - 但似乎我無法實現目標 2。

在我的測試中,我創建了一個帶有備用 IP 地址的 ZoneScope,該地址將返回給匹配的客戶端,並根據客戶端子網查詢解析策略,從而實現目標 1)。但是,如果客戶端被匹配為來自“特殊”子網,它只能解析來自特殊 ZoneScope 的記錄,但不能解析來自“預設”範圍的記錄——因此目標 2 失敗。

如果我的特殊區域範圍不包含匹配記錄,是否有可能我錯過了允許回退到預設區域範圍的配置步驟?有人告訴我,這可以通過帶有響應區策略的 BIND DNS 輕鬆完成,但如果可能的話,我想堅持使用 MS。也不可能使用主機文件,因為這些“特殊”伺服器並未完全在我們的控制之下。

重現步驟

#define subnet of restricted servers
Add-DnsServerClientSubnet -name SpecialServers -IPv4Subnet 192.168.0.0/24    
#define ZoneScope for the special records 
Add-DnsServerZoneScope -ZoneName "test.local" -Name "SpecialZoneScope" 

#Prepare some testing records in the default scope
Add-DnsServerResourceRecord -ZoneName "test.local" -A -Name HostA -IPv4Address 1.1.1.1
Add-DnsServerResourceRecord -ZoneName "test.local" -A -Name HostB -IPv4Address 1.1.1.2
#Prepare alternative record in SpecialZoneScope
Add-DnsServerResourceRecord -ZoneName "test.local" -ZoneScope "SpecialZoneScope" -A -Name HostA -IPv4Address 20.20.20.1

#Define query resolution policy 
Add-DnsServerQueryResolutionPolicy -Name "SplitBrainZonePolicy" -Action ALLOW -ClientSubnet "eq,SpecialServers" -ZoneScope "SpecialZoneScope,1" -ZoneName "test.local"

結果:

來自“正常”客戶端的 nslookup:

> HostA.test.local
Server:  dns.test.local
Address:  ****

Name:    HostA.test.local
Address:  1.1.1.1

> HostB.test.local
Server:  dns.test.local
Address:  ****

Name:    HostB.test.local
Address:  1.1.1.1.2

來自“預設”區域範圍的兩條記錄都正確返回。

來自“特殊”子網中客戶端的 nslookup:

> HostA.test.local
Server:  dns.test.local
Address:  ****

Name:    HostA.test.local
Address:  20.20.20.1

> HostB.test.local
Server:  dns.test.local
Address:  ****

*** dns.test.local can't find HostB.test.local: Non-existent domain

HostA 按預期使用 SpecialZoneScope 的備用 IP 解析,HostB 根本沒有解析。

是的,你絕對可以做到這一點。除了忘記將查詢解決策略限制在區域範圍內的特定記錄之外,您做的一切都是正確的。您可以通過-FQDN如下所示的參數來執行此操作。

Add-DnsServerQueryResolutionPolicy -Name "SplitBrainZonePolicy" -Action ALLOW -FQDN "eq,HostA.test.local" -ClientSubnet "eq,SpecialServers" -ZoneScope "SpecialZoneScope,1" -ZoneName "test.local"

解釋

您試圖將區域範圍視為覆蓋在原始區域上的一種“透明度”,但實際上並非如此。

這是一個不透明的替代區域(有點像文件上的替代數據流)。針對該區域範圍的查詢永遠不會“回退”到預設區域。

因此,當您創建查詢解析策略時,您正在定義特定查詢選擇區域範圍所依據的規則。

通過定義一個只有 1 條記錄的區域範圍HostA,然後定義一個 QRP 將來自某些 IP 的所有查詢發送到該區域,您實際上是在說他們只能看到該記錄。

將 FQDN 添加到 QRP 意味著只有來自指定子網的也在查詢 HostA.test.local的客戶端才會被發送到備用區域範圍。

當然,如果區域中有更多記錄,則需要指定多條記錄或製作多個 QRP。您也可以使用萬用字元。

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