我可以使用 server 2016 DNS 策略返回備用 IP,但僅用於域中的某些記錄嗎?
我需要提供一種具有兩個關鍵目標的 DNS 腦裂場景:
- “特殊”DNS 客戶端(基於其子網)必須將一個域中的某些 A 記錄解析為與其餘客戶端不同的 IP 地址
- 無論哪個客戶要求,同一域中的所有其他記錄都必須平等解析。
換句話說,我想創建一種“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。您也可以使用萬用字元。