2つの重要な目標を持つ一種のDNSスプリットブレインシナリオを提供する必要があります。
つまり、クライアントによってはレコードがほとんど異なる、一種の「DNSリライト」またはオーバーレイを作成したいと思います。私は、サーバー2016のDNSポリシーによってこれを達成したいと考えていました。このポリシーでは、「スプリットブレイン/ホライズン」を意図されたシナリオの1つとして説明しています。 https://blogs.technet.Microsoft.com/networking/2015/05/12/split-brain-dns-deployment-using-windows-dns-server-policies/ -しかし、私はそうです目標2を達成できません。
私のテストでは、一致したクライアントに返される代替IPアドレスとクライアントサブネットに基づくクエリ解決ポリシーを使用してZoneScopeを作成し、目標1)を達成しました。ただし、クライアントが「特別な」サブネットからのものであると一致した場合、特別なZoneScopeからのレコードのみを解決できますが、「デフォルト」のスコープからは解決できません。そのため、目標2は失敗します。
特別なzonescopeに一致するレコードが含まれていない場合に、デフォルトのZoneScopeにフォールバックできる構成手順を見逃した可能性がありますか?これは、応答ゾーンポリシーを使用したBIND DNSで簡単に実行できると言われていますが、可能な限りMSを使用したいと思います。また、これらの「特別な」サーバーは完全に制御されていないため、hostsファイルを使用することはできません。
#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
のみでゾーンスコープを定義し、特定のIPからそのゾーンにすべてのクエリを送信するQRPを定義することで、事実上、そのレコードしか表示できないと言っています。
QRPにFQDNを追加すると、指定されたサブネットのクライアントのみがクエリも実行HostA.test.local
であり、代替ゾーンスコープに送信されます。
もちろん、ゾーンにさらにレコードがある場合は、複数のレコードを指定するか、複数のQRPを作成する必要があります。ワイルドカードを使用することもできます。