【図解】DNSとDC Locatorとは?PCがドメインコントローラを見つけるしくみを初心者向けに解説

ドメインに参加した PC は、サインインやグループポリシーの取得のたびに、ドメインコントローラ(DC)と話す必要があります。ところが、ドメインに DC が何台もあるとき、PC はどの DC と話せばよいかを最初は知りません。そこで PC は、DNS に「このドメインの DC はどれ?」と問い合わせて DC を探します。このしくみを DC Locator(DC ロケーター)と呼びます。この記事では、DNS の SRV レコード、DC Locator の流れ、近くの DC を選ぶための「サイト」、DC が見つからないときの確認方法を説明します。

この記事でわかること
  1. PC が DNS の SRV レコードで DC を探すしくみ
  2. サイトとサブネットで、近くの DC が選ばれる流れ
  3. 「DC が見つからない」ときに、どこから確かめればよいか

なぜ PC は DC を探すのか

この記事では、次の構成で考えます。ドメインは corp.example.com で、東京本社に DC01 と DC02、大阪営業所に DC11 があります。PC01 は大阪営業所にある PC です。

PC01大阪営業所どの DC と話せばいい?DC01東京本社DC02東京本社DC11大阪営業所PC が DC を使う場面・ドメインのサインイン(Kerberos のチケット)・グループポリシーの取得・セキュアチャネル(コンピュータの認証)・パスワードの変更
図1 PC は DC を探す必要がある

PC は、ユーザーのサインイン(Kerberos のチケットをもらう)、グループポリシーの取得、コンピュータアカウントでの認証(セキュアチャネル)など、さまざまな場面で DC を使います。DC はどれも同じ AD のデータを持っているので、どの DC と話しても仕事はできます。ただし、大阪の PC が東京の DC とばかり話すと、拠点間の回線を余計に使い、応答も遅くなります。そのため、「動いている DC」の中から「近い DC」を選ぶことが大切です。

DC を探すのは、PC の Netlogon サービスです。Netlogon は、DC とのセキュアチャネルを作るサービスでもあります。セキュアチャネルについては「Netlogonとセキュアチャネルとは?」の記事で説明しています。

DNS の SRV レコード

DNS というと、「dc01.corp.example.com の IP アドレスは?」のように、名前から IP アドレスを調べるしくみを思い浮かべると思います。これは A レコードの役目です。PC が DC を探すときは、これとは別の SRV レコードを使います。SRV レコードは「このサービスを提供しているのは、どのサーバの何番ポートか」を答えるレコードです。

A レコード:名前 → IP アドレスdc01.corp.example.com10.1.0.11「この名前の住所は?」SRV レコード:サービス → それを提供するサーバ_ldap._tcp.dc._msdcs.corp.example.com0 100 389 dc01.corp.example.comサービスLDAPプロトコルTCP種類DCドメイン優先度重みポートサーバの名前SRV レコードは「LDAP のサービスを、このドメインの DC として提供しているのはどのサーバか」を答えるサーバの名前が分かったら、その名前の A レコードで IP アドレスを調べる
図2 A レコードと SRV レコード

PC は DC の名前を知らなくても、「_ldap._tcp.dc._msdcs.corp.example.com」という決まった名前で問い合わせれば、corp.example.com の DC の一覧を受け取れます。名前の頭にある「_ldap」「_tcp」はサービスとプロトコル、「dc._msdcs」は「Microsoft の DC としてのレコード」という意味です。

SRV レコードを登録するのは DC 自身

SRV レコードは、管理者が手で作るものではありません。DC の Netlogon サービスが、自分の役割とサイトに合わせて DNS に登録します。DNS サーバ側で動的更新を受け付けていることが前提です。

DC01東京本社サイトNetlogonサービス登録DNSDNS サーバ登録されるレコードの例_ldap._tcp.dc._msdcs.〜_ldap._tcp.Tokyo._sites.dc._msdcs.〜_kerberos._tcp.dc._msdcs.〜_ldap._tcp.gc._msdcs.〜(GC のとき)_ldap._tcp.pdc._msdcs.〜(PDC のとき)DC の Netlogon サービスが、自分の役割(DC・KDC・GC・PDC)とサイトに合わせて、SRV レコードを DNS に登録する登録する内容は DC の %SystemRoot%\System32\Config\netlogon.dns にも書き出されるNetlogon サービスを再起動すると、登録し直す
図3 SRV レコードは DC の Netlogon が登録する

主な SRV レコードは次のとおりです。〈ドメイン〉は corp.example.com、〈フォレスト〉はフォレストのルートドメインの名前、〈サイト〉はサイト名です。

レコード何を探すときに使うか
_ldap._tcp.dc._msdcs.〈ドメイン〉そのドメインの DC
_ldap._tcp.〈サイト〉._sites.dc._msdcs.〈ドメイン〉そのサイトにいる DC
_kerberos._tcp.dc._msdcs.〈ドメイン〉Kerberos の KDC として動く DC
_ldap._tcp.gc._msdcs.〈フォレスト〉グローバルカタログ(GC)
_ldap._tcp.pdc._msdcs.〈ドメイン〉PDC エミュレータの DC

このほか、DC ごとの GUID を使った CNAME レコード(〈DC の GUID〉._msdcs.〈フォレスト〉)もあり、DC どうしの複製で相手を探すときに使います。

DC Locator の流れ

PC が DC を探す流れは、大きく3つの段階に分かれます。

① DNS で DC の候補を探す② LDAP ping で、動いている DC を確かめる③ いちばん早く答えた DC を使い、覚えておくPC01NetlogonDNS サーバDC01・DC02DC の候補SRV:_ldap._tcp.dc._msdcs.〜DNS(ポート 53)DC01・DC02 の名前と IP アドレスLDAP ping(UDP 389)候補の DC に送る動いています+ドメインやサイトの情報DC の情報をキャッシュする
図4 DC Locator の流れ
段階何が起きるか
① DNS で探すNetlogon が DNS に SRV レコードを問い合わせ、DC の候補の名前と IP アドレスを受け取る
② LDAP ping候補の DC に、UDP 389 番で小さな LDAP の問い合わせ(LDAP ping)を送る。動いている DC は、ドメインの情報や PC のサイトの情報を返す
③ 選んで覚えるいちばん早く答えた DC を使う。DC の情報はキャッシュしておき、次からは同じ DC を使う

DNS にレコードがあっても、その DC が止まっていたら使えません。LDAP ping は「本当に答えられる DC か」を確かめるための手順です。また、同じ DC を使い続けることで、PC から見た AD の内容がぶれにくくなります。

サイト:近くの DC を選ぶしくみ

近い DC を選ぶために使うのが、AD の「サイト」です。サイトは、速い回線でつながったネットワークの範囲をまとめたもので、「AD サイトとサービス」で作ります。サイトにはサブネット(IP アドレスの範囲)を結び付けておきます。

東京本社サイト(サイト名:Tokyo)サブネット 10.1.0.0/16DC01DC02PC10.1.x.x大阪営業所サイト(サイト名:Osaka)サブネット 10.2.0.0/16DC11PC0110.2.0.25WAN(拠点間の回線)サイト:回線の速さでまとめた「場所」のまとまり。AD サイトとサービスで作り、サブネットを結び付けるPC01 の IP アドレス 10.2.0.25 は 10.2.0.0/16 に入るので、PC01 は大阪営業所サイトにいると判断されるPC は、同じサイトの DC(大阪なら DC11)を優先して使う
図5 サイトとサブネット

DC は自分がどのサイトにいるかを知っていて、サイト用の SRV レコード(_ldap._tcp.Osaka._sites.dc._msdcs.corp.example.com など)も登録します。PC は、自分のサイトが分かっていれば、まずサイト用のレコードで同じサイトの DC を探します。

自分のサイトを DC に教わる

PC は、自分がどのサイトにいるかを自分では判断しません。LDAP ping を受けた DC が、PC の IP アドレスをサブネットと照らし合わせてサイトを調べ、答えといっしょに教えます。

① まだ自分のサイトを知らないので、サイトを指定せずに探す② 教わったサイトを指定して、もう一度探すPC01大阪・初めてDNS サーバDC01東京本社DC11大阪営業所SRV(サイト指定なし)LDAP pingあなたは Osaka サイト。私は近くないDC が PC の IP アドレスからサイトを調べて教えるSRV(Osaka サイト)LDAP ping近い DC です以後は DC11 を使う
図6 サイトを教わって DC を選び直す

近くない DC を使っている間は、PC は 15 分たつとキャッシュを捨て、もう一度近い DC を探します。大阪の DC11 が一時的に止まっていて東京の DC01 を使った場合でも、DC11 が戻れば、また DC11 を使うようになります。

DC がないサイトもあります。その場合は、いちばん近いサイトの DC が、そのサイトのためのサイト用レコードも登録します(自動サイトカバレッジ)。なお RODC(読み取り専用 DC)は、既定では自分のサイトのレコードだけを登録します。RODC については「ドメインコントローラの種類とは?」の記事で説明しています。

サブネットを登録し忘れると

新しい拠点を作ったときに、サブネットの登録を忘れることがあります。すると、その拠点の PC はどのサイトにも属さず、遠い DC を使うことがあります。

サブネットを登録していない拠点PC2110.3.0.4010.3.0.0/16 はどのサイトにも結び付いていない→ サイトなし。遠い DC を使うことがあるDC 側に残る記録DCシステムログNETLOGON イベント 5807%SystemRoot%\debug\netlogon.logNO_CLIENT_SITE: の行にPC の名前と IP アドレス対処:AD サイトとサービスで、10.3.0.0/16 のサブネットを作り、近いサイトに結び付ける
図7 サブネットを登録していない拠点

この状態は DC のシステムログに NETLOGON のイベント ID 5807 として記録されます。DC の netlogon.log の「NO_CLIENT_SITE:」の行を見ると、どの PC(名前と IP アドレス)がサイトなしでつないできたかが分かります。

DC が見つからないときの原因

ドメインへの参加で「AD DC に接続できない」というエラー(エラーコード 0x54b など)が出たり、PC のシステムログに NETLOGON のイベント ID 5719 が出たりするときは、DC Locator のどこかで止まっています。多いのは、PC の DNS サーバの設定です。

PC の DNS サーバの設定SRV を問い合わせDNS社内の DNS(DC の DNS)10.1.0.11_msdcs などのゾーンを持っているSRV を問い合わせDNSインターネットの DNS8.8.8.8 などcorp.example.com の SRV を知らないドメインに参加する PC は、DNS サーバを社内の DNS だけにする(インターネットの DNS を並べない)
図8 PC の DNS サーバの設定

インターネットの DNS は corp.example.com の SRV レコードを知りません。社内の DNS とインターネットの DNS を並べて設定していると、問い合わせ先によって DC が見つかったり見つからなかったりして、原因が分かりにくくなります。ドメインに参加する PC の DNS サーバは、社内の DNS だけにします。社内の DNS がインターネットの名前も解決できるように、DNS サーバ側でフォワーダーを設定するのが一般的です。

確かめる順番は次のとおりです。

① DNS の設定ipconfig /allPC の DNS サーバが社内の DNS になっているか② SRV レコードnslookup -type=SRVDC の SRV レコードが引けるか③ 通信UDP 53・UDP 389DNS と LDAP ping が FW で止まっていないか④ DC の発見nltest /dsgetdcDC が見つかるか、どのサイトの DC か⑤ サイトnltest /dsgetsitePC のサイトが正しいか(サブネットの登録)
図9 DC が見つからないときの確認の順番
原因直し方
DNS の設定PC の DNS サーバを、AD のゾーンを持つ社内の DNS にする
SRV レコードがないDNS の動的更新が許可されているかを確かめ、DC の Netlogon サービスを再起動して登録し直す。DC の A レコードは ipconfig /registerdns で登録し直す
通信が止まっているPC と DC の間のファイアウォールで、DNS(53番)と LDAP ping(UDP 389番)を許可する
サイトが違うAD サイトとサービスで、PC のサブネットを正しいサイトに結び付ける
Windows Server 2025 での変化

DC を探すしくみには、DNS を使う方法のほかに、WINS やブロードキャスト(メールスロット)で NetBIOS 名のドメインを探す古い方法があります。Windows Server 2025 からは、この NetBIOS を使った探し方が既定で使えなくなりました(グループポリシーの「Block NetBIOS-based discovery for domain controller location」が既定で有効)。「CORP」のような短いドメイン名を指定された場合も、DNS のドメイン名に置き換えられれば DNS で探します。DNS の設定が正しくなっていることが、これまで以上に大切です。

確認に使うコマンド

PC(コマンドプロンプト):DNS サーバの設定を表示する

ipconfig /all

PC(コマンドプロンプト):ドメインの DC の SRV レコードを問い合わせる

nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.example.com

PC(PowerShell):大阪サイトの DC の SRV レコードを問い合わせる

Resolve-DnsName -Name _ldap._tcp.Osaka._sites.dc._msdcs.corp.example.com -Type SRV

PC(コマンドプロンプト):DC Locator で DC を探す(キャッシュを使わずに探し直す)

nltest /dsgetdc:corp.example.com /force

PC(コマンドプロンプト):PC のサイトを表示する

nltest /dsgetsite

DC(コマンドプロンプト・管理者):DC の DNS の状態を詳しく調べる

dcdiag /test:dns /v

DC(PowerShell・管理者):Netlogon を再起動して SRV レコードを登録し直す

Restart-Service -Name Netlogon

nltest /dsgetdc の結果では、「DC:」の行が見つかった DC、「Dc Site Name」が DC のサイト、「Our Site Name」が PC のサイトです。2つのサイトが同じなら、近い DC を使えています。「Flags」の行には、その DC の役割(GC、KDC、PDC など)が並びます。

まとめ

項目ひとことで
DC LocatorPC の Netlogon が、DNS と LDAP ping で使う DC を決めるしくみ
SRV レコード「このサービスはどのサーバか」を答えるレコード。DC の Netlogon が登録する
LDAP pingUDP 389 番で DC が動いているかを確かめ、PC のサイトも教わる
サイトサブネットで決まる「場所」。同じサイトの DC が優先される
見つからないときまず PC の DNS サーバの設定。次に SRV レコード、通信、サイトの順に確かめる

サインインが遅い、グループポリシーが適用されない、ドメインに参加できない。こうしたトラブルの多くは、認証より手前の「DC を見つける」段階で起きています。DC Locator の流れを知っておくと、どこで止まっているかを順番に確かめられます。

コメント