Ste*_*pCZ 3 domain-name-system split-dns windows-server-2016 dns-policies
我需要提供一种 DNS 裂脑场景,有两个关键目标:
换句话说,我想创建一种“DNS 重写”或覆盖,其中对于某些客户端来说几乎没有记录会有所不同。我希望通过 Server 2016 中的 DNS 策略来实现这一目标,该策略将“split Brain/horizon”描述为预期场景之一,例如https://blogs.technet.microsoft.com/networking/2015/05/12/split-brain -dns-deployment-using-windows-dns-server-policies/ - 但看来我无法实现目标2。
在我的测试中,我创建了一个 ZoneScope,其中包含要返回到匹配客户端的备用 IP 地址和基于客户端子网的查询解析策略,从而实现了目标 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"
Run Code Online (Sandbox Code Playgroud)
来自“常规”客户端的 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
Run Code Online (Sandbox Code Playgroud)
来自“默认”区域范围的两条记录均正确返回。
从“特殊”子网中的客户端进行 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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
您试图将区域范围视为覆盖在原始区域上的一种“透明度”,但事实上并非如此。
它是一个不透明的替代区域(有点像文件上的替代数据流)。针对该区域范围的查询永远不会“回退”到默认区域。
因此,当您创建查询解析策略时,您正在定义特定查询选择区域范围的规则。
通过定义仅包含 1 条记录的区域范围HostA,然后定义将所有查询从某些 IP 发送到该区域的 QRP,您实际上是在说他们只能看到该记录。
将 FQDN 添加到 QRP 意味着只有来自指定子网且同时进行查询的 HostA.test.local客户端才会被发送到备用区域范围。
当然,如果您的区域中有更多记录,您需要指定多个记录或制作多个 QRP。您还可以使用通配符。