Windows Server で DNS を操作する – 実際の例
Windows ServerでDNSを思い通りに動作させようとすると、少々複雑な作業になることがあります。クライアントの所在地に基づいてDNS応答を分割したり、特定のクエリをブロックしたり、あるいは内部の名前解決を効率化したりする場合でも、必ずしも簡単ではありません。私が試したほとんどの設定では、条件付きフォワーダーとDNSポリシーの組み合わせが必要でした。これらのツールは、クエリをよりインテリジェントにルーティングし、内部アプリケーションは内部に留まり、外部からのリクエストは外部に留まるようにすることで、インターネット全体を経由することなく、クエリを効率化するのに役立ちます。特に「動的な」環境でこれらの設定を適切に行う方法がわからない場合は、このガイドがまさにうってつけです。最後まで読めば、デフォルト設定をいじるだけでなく、実際に役立つルールを作成する方法がわかるでしょう。
Windows Server で DNS 条件付き転送を修正する方法
条件付きフォワーダーを手動で設定する
例えば、特定のドメインへのDNSリクエストをcorp.woshub.com特別な場所に転送する必要がある場合、条件付きフォワーダーを設定するのが最適です。これは、内部ドメイン解決を厳密に制御したい場合に便利です。リクエストをインターネット経由で送信する必要がないためです。さらに、通常は処理速度が向上し、DNSリークを回避できます。そこで、Windows Server 2019での設定方法を説明します(ただし、2016/2022でもほぼ同じです)。
- まず、[実行] ボックス ( ) または [サーバー マネージャー]に入力して、DNS マネージャーコンソールを開きます。
dnsmgmt.mscWin + R - 「条件付きフォワーダー」を右クリックし、「新しい条件付きフォワーダー」を選択します。
- DNSドメインボックスに「」と入力します
corp.woshub.com。これにより、DNSサーバーに転送するドメインが伝えられます。 - マスターサーバーのIPアドレスボックスにを追加します
10.1.10.11。これがDNSクエリの送信先となります。 - ドメイン全体で使用できるようにするには、 [この条件付きフォワーダーを Active Directory に保存する]チェックボックスをオンにします (ただし、一部の設定では、すぐにレプリケートされない場合や、GP の更新が必要になる場合があることに注意してください)。
- レプリケーション スコープを設定します。必要に応じて、このフォレストまたはドメイン内のすべての DNS サーバーを選択します。
完了すると、DNSサーバーはcorp.woshub.com再帰的なルックアップではなく、すべてのクエリをそのIPに直接転送します。古い手法ですが、驚くほど効果的です。ただし、もちろんDNSサーバーを常に良好な状態にしておく必要があります。そうでないと、この方法は機能しません。
PowerShell で実行する方法
スクリプトを好む方や、GUIをクリックするのが苦手な方には、PowerShellが便利です。以下のコマンドは、dmz.woshub.com特定のDNSサーバーを指定する条件付きフォワーダーを作成します。設定したいDNSサーバーで実行してください。
Add-DnsServerConditionalForwarderZone -Name dmz.woshub.com -MasterServers 192.168.1.11, 192.168.101.11 -ReplicationScope Forest
DNSインフラストラクチャが複数サーバーの場合、複数のIPアドレスを散りばめることができ、スコープをフォレストまたはドメインに設定できるので便利です。設定によっては、このコマンドの実行が最初は失敗する場合があります。そのため、PowerShellを管理者として実行したり、DNSを再起動したりする必要がある場合でも、驚かないでください。
条件付きのものも含め、構成されたすべての DNS フォワーダーを一覧表示するには、次のコマンドを実行します。
$DNSServer = "DC01" Get-WMIObject -ComputerName $DNSServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone" | Select-Object Name, MasterServers, DsIntegrated, ZoneType | where {$_. ZoneType -eq 4} | Format-Table -AutoSize
DNSポリシーを使用してよりスマートなルーティングを実現する
ここからがさらに面白くなります。Windows Server 2016以降のDNSポリシーでは、リクエストの送信元や送信元に応じて異なる応答方法を選択できます。クライアントIP、時間帯、さらにはクエリの種類に基づいて、ルールを適用しDNS応答をカスタマイズするようなものです。もちろん、すべての設定がPowerShellで行われるため、正しく設定するのは簡単ではありません。しかし、一度設定してしまえば、ローカルプロキシ、負荷分散、DNSフィルタリングといったシナリオで非常に強力なツールとなります。
各ブランチのクライアントがそれぞれ異なる名前解決を行い、ローカルプロキシIPを指すようにしたいとします。まず、各サブネットを「クライアントサブネットproxy.woshub.com」として登録し、次に各拠点のゾーンスコープを作成する必要があります。手順は以下のとおりです。
- サブネットを登録するには、次のようなコマンドを実行します。DNS サーバーでこれを実行してください。
Add-DnsServerClientSubnet -Name "BER_DNS_Subnet" -IPv4Subnet "192.168.1.0/24" Add-DnsServerClientSubnet -Name "HH_DNS_Subnet" -IPv4Subnet "192.168.11.0/24" Add-DnsServerClientSubnet -Name "MCH_DNS_Subnet" -IPv4Subnet "192.168.21.0/24"
Add-DnsServerZoneScope -ZoneName "woshub.com" -Name "BERZoneScope" Add-DnsServerZoneScope -ZoneName "woshub.com" -Name "HHZoneScope" Add-DnsServerZoneScope -ZoneName "woshub.com" -Name "MCHZoneScope"
Add-DnsServerResourceRecord -ZoneName "woshub.com" -A -Name proxy -IPv4Address "192.168.1.10" -ZoneScope "BERZoneScope" Add-DnsServerResourceRecord -ZoneName "woshub.com" -A -Name proxy -IPv4Address "192.168.11.10" -ZoneScope "HHZoneScope" Add-DnsServerResourceRecord -ZoneName "woshub.com" -A -Name proxy -IPv4Address "192.168.21.10" -ZoneScope "MCHZoneScope"
ここで、DNS がクライアントのサブネットに基づいて応答するようにするには、次のようなポリシーを作成します。
Add-DnsServerQueryResolutionPolicy -Name "BERResolutionPolicy" -Action ALLOW -ClientSubnet "eq, BER_DNS_Subnet" -ZoneScope "BERZoneScope, 1" -ZoneName woshub.com Add-DnsServerQueryResolutionPolicy -Name "HHResolutionPolicy" -Action ALLOW -ClientSubnet "eq, HH_DNS_Subnet" -ZoneScope "HHZoneScope, 1" -ZoneName woshub.com Add-DnsServerQueryResolutionPolicy -Name "MCHResolutionPolicy" -Action ALLOW -ClientSubnet "eq, MCH_DNS_Subnet" -ZoneScope "MCHZoneScope, 1" -ZoneName woshub.com
これらのポリシーは、DNSサーバーに対し、クエリの発信元に基づいてローカルIPアドレスで応答するよう指示します。一度動作し始めると、まるで魔法のように機能します。これらのコマンドは、ポリシーを適用する各DNSサーバーで実行する必要があることに注意してください。シームレスなレプリケーションではありません。また、WindowsはこれらのポリシーをAD経由でプッシュしないため、通常は各マシンで手動設定またはスクリプトを実行する必要があります。
まとめ
正直なところ、このようにDNSをいじるのはあまりスマートな作業ではありませんが、一度コツをつかめば、ネットワークははるかにインテリジェントに動作します。条件付きフォワーダーはシンプルですが不可欠です。DNSポリシーはより柔軟ですが、より複雑でもあります。社内トラフィックを社内に留めたい場合や、支社がローカルで解決したい場合、これらの方法が基盤となります。覚えておいてください。忍耐が鍵です。再起動やDNSサービスの再起動で、すべてが再び同期されるようになることもあります。
まとめ
- 条件付きフォワーダーを使用して、特定の DNS サーバーにドメインをすばやく転送します。
- 転送ルールを自動化または変更するためのPowerShell コマンドを設定します。
- 場所ベースの DNS 応答、負荷分散、またはフィルタリングのためのDNS ポリシーを実装します。
- 試行錯誤を覚悟してください。Windows Server での DNS 設定は奇妙な場合があります。
まとめ
一見大げさに思えるかもしれませんが、内部DNSを効率化できます。ドメイン転送だけでも、クライアントの所在地に基づいた複雑なルールを作成するだけでも、これらの手順で制御できます。これで、延々と続く設定作業から解放され、1つか2つの設定がスムーズに進むことを願っています。誰かの時間を節約できれば幸いです。私の場合は効果がありましたので、あなたにも効果があるかもしれません。