「ADのドメインコントローラーを入れ替えたら、しばらくしてドメイン全体の時刻が少しずつずれ始めました」
「w32tm /query /sourceを打ったら『Local CMOS Clock』と出ました。これは正常ですか?」
Windowsの時刻同期は、ADドメインの階層に沿って自動で流れます。便利な反面、頂点の1台の設定を忘れると、ドメイン全体がずれていきます。
第4回ではLinuxのchronyを見ました。第5回では、Windows Time サービス(W32Time)と、ADドメインの時刻の階層、w32tmでの確かめ方を扱います。
Windows Time サービス(W32Time)の役割と精度
Windowsの時刻同期は、Windows Time サービス(W32Time)が担います。NTPのクライアントとサーバーの両方の機能を持ち、UDP 123で通信します。

- もともとKerberos認証の許容範囲(既定で5分)(連載「Kerberos入門」第4回)に時刻を収める目的で作られたため、既定の設定は「Kerberosに足りる程度にゆるく合わせる」もの
- 2012 R2以前はそれ以上の精度をサポートしないが、Windows Server 2016とWindows 10(1607)以降は、条件を満たせば1秒、50ms、1msの精度をサポートする
- ドメインのメンバーはドメインコントローラー(DC)からMS-SNTPという認証付きの方式で時刻を受け取り、ドメインに参加していない端末は既定でtime.windows.comと同期する
受け取るのも配るのも同じサービスで、精度は設定で上げるのです。
ADドメインの時刻の階層
ADドメインでは、時刻の流れ(階層)が自動で決まります。

- クライアントとメンバーサーバーは、認証を受けたDC(原則として同じサイトのDC)を時刻源にする
- DCは、そのドメインのPDCエミュレーター(FSMOの役割の1つ。連載「Active Directory入門」第4回)や親ドメインのDCを時刻源にし、子ドメインのPDCエミュレーターは親ドメインのDCを参照する
- たどっていくと、最上位はフォレストルートドメインのPDCエミュレーター。この1台だけは上位のDCが無いため、外部の信頼できる時刻源(社内のNTPサーバーなど)と同期するよう手動で設定する
設定を忘れると、PDCエミュレーターは自分の内蔵時計(Local CMOS Clock)を基準にし、フォレスト全体が少しずつずれていきます。冒頭の「DCを入れ替えたらずれ始めた」は、このパターンです。階層に従うこの方式をNT5DSと呼び、ドメインのメンバーの既定です。
同期の種類(Type)と既定値の違い
| Type | 意味 | 既定になる環境 |
|---|---|---|
| NT5DS | ドメインの階層に従う | ドメインのメンバー(DC を含む) |
| NTP | NtpServer に書いたサーバーと同期する | ワークグループ。ルートの PDC エミュレーターは手動でこれにする |
| AllSync | 階層と NtpServer の両方を使う | — |
| NoSync | 同期しない | — |
| 設定(レジストリ) | DC | ドメインのメンバー | ワークグループ |
|---|---|---|---|
| NtpServer | (なし) | (なし) | time.windows.com,0x1 |
| MaxPos/MaxNegPhaseCorrection | 172,800秒(48時間) | 0xFFFFFFFF(常に直す) | 54,000秒(15時間) |
| MaxAllowedPhaseOffset | 300秒 | 300秒 | 1秒 |
| Min/MaxPollInterval | 6/10(64〜1,024秒) | 10/15(1,024〜32,768秒) | 10/15 |
| UpdateInterval | 100 | 30,000 | 360,000 |
NtpServerのサーバー名の後ろのフラグは、0x1がSpecialPollIntervalの間隔で問い合わせる、0x2が予備(UseAsFallbackOnly)、0x4がsymmetric active、0x8がクライアントモードです。外部のNTPサーバーには0x8を付けるのが一般的です。
ずれの大きさと直し方

MaxAllowedPhaseOffset以下のずれはslewで少しずつ、超えるずれはstepで一気に合わせるMaxPos/MaxNegPhaseCorrectionを超えるずれは直さず、イベントを記録するだけ。スナップショットの復元やRTCの電池切れで大きくずれたDCは、自動では戻らない(手順は第10回)
フォレストルートのPDCエミュレーターを設定する
PS> (Get-ADDomain -Identity (Get-ADForest).RootDomain).PDCEmulator
DC01.corp.example.jp
PS> w32tm /config /manualpeerlist:"ntp1.corp.example.jp,0x8 ntp2.corp.example.jp,0x8 ntp3.corp.example.jp,0x8" /syncfromflags:manual /reliable:yes /update
PS> net stop w32time; net start w32time
PS> w32tm /resync /rediscover
PS> w32tm /query /source
ntp1.corp.example.jp,0x8
- まず、PDCエミュレーターを持つDCを確かめる(
netdom query fsmoでもよい)。設定するのはこの1台だけ /manualpeerlist:外部の時刻源。空白で区切り、全体を引用符で囲む。3台以上を指定する(2台なら片方に0x2を付けて予備にする。第3回)/syncfromflags:manual:TypeをNTPにし、階層ではなくリストのサーバーに従わせる/reliable:yes:「信頼できる時刻源」としてドメインに知らせる(DCでだけ意味がある)/update:設定をサービスに知らせる。確実に反映するため、サービスを再起動して/resync /rediscoverで同期し直す- 外部へUDP 123で出られることを確かめる。
Test-NetConnectionはUDPを試せないため、w32tm /stripchartを使う
状態を確かめる

w32tm /query /status
PS> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 3 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0031250s
ルート分散: 0.0412345s
参照 ID: 0xC0000210 (ソース IP: 192.0.2.16)
最終正常同期時刻: 2026/09/26 16:10:12
ソース: DC01.corp.example.jp
ポーリング間隔: 10 (1024s)
| 項目(英語版の表示) | 読み方 |
|---|---|
| 閏インジケーター(Leap Indicator) | 0 は警告なし。3 (同期未実行) は同期していない |
| 階層(Stratum) | 同期先の1つ下。0 (未指定) は同期していない |
| ルート遅延/ルート分散(Root Delay/Root Dispersion) | 最上位までの往復の遅延と、積み重なった誤差(第3回)。分散が秒単位なら同期が止まっている兆候 |
| 参照 ID(ReferenceId) | 同期先の IPv4 アドレス(16進とドット表記) |
| 最終正常同期時刻(Last Successful Sync Time) | 最後に同期できた時刻。古ければ同期が止まっている。一度も同期していなければ「未指定」 |
| ソース(Source) | 同期先。Local CMOS Clock や Free-running System Clock は外部と同期していない |
| ポーリング間隔(Poll Interval) | 問い合わせ間隔(2のべき乗秒) |
出力例はメンバーサーバーのもので、日本語版の Windows の表示です(Windows Server 2016 と Windows 11 で確かめた形。値は例)。英語版では項目名が英語になります。Linuxのchronyc tracking(第4回)に当たるコマンドです。
冒頭の「Local CMOS Clockと出た」は、外部と同期していないという意味です。フォレストルートのPDCエミュレーターなら設定漏れ、それ以外のDCやメンバーなら階層が途切れています。
/source・/peers・/configuration
PS> w32tm /query /peers
ピア数: 3
ピア: ntp1.corp.example.jp,0x8
状態: アクティブ
残り時間: 41.2345678s
モード: 3 (クライアント)
階層: 2 (二次参照 - (S)NTP で同期)
ピアポーリング間隔: 6 (64s)
ホストポーリング間隔: 6 (64s)
(以下、ntp2・ntp3 が続く。抜粋)
/source:今の同期先だけを1行で表示する。スクリプトでの確認に便利/peers:時刻源の候補と状態の一覧。状態が「保留中」(Pending)のまま、階層が0 (未指定) のままなら応答が届いていない。Linuxのchronyc sourcesに当たる/configuration:実際に効いている設定と、その出どころを表示する。値の後ろの(ローカル)(英語版は(Local))はレジストリ、グループポリシーから来た値は別の表記(英語版は(Policy))になる/sourceと/configurationは、Windows 11では管理者として実行しないと「アクセスが拒否されました。 (0x80070005)」になる(/status・/peersは一般ユーザーでも見られる)/verboseで詳しい情報、/computer:DC02で他のコンピューターの状態を調べられる(管理者の権限が必要)- ドメイン全体は
w32tm /monitor /domain:corp.example.jpで、DCごとのずれを一覧できる
w32tm /stripchartと/resync
PS> w32tm /stripchart /computer:ntp1.corp.example.jp /samples:5 /dataonly
ntp1.corp.example.jp [192.0.2.123:123] を追跡中。
5 サンプルを収集中。
現在の時刻は 2026/09/26 16:20:01 です。
16:20:01, +00.0012345s
16:20:03, +00.0011872s
16:20:05, +00.0012011s
16:20:07, +00.0011930s
16:20:09, +00.0012104s
PS> w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。
/stripchartは、相手との時刻の差を測るだけで、自分の時計は変えない。相手にUDP 123が届くかの確認にも使える(届かなければ応答が無い旨のエラーになる)/resyncは、蓄積した統計を捨ててすぐに同期し直す。/rediscoverは時刻源の検出からやり直し、/nowaitは完了を待たずに戻る- 「The computer did not resync because no time data was available.」と出たら、時刻源に届いていない。設定と通信を確認する
/resyncの後の直し方はMaxAllowedPhaseOffsetで決まり、それを超えるずれは一気に合わせ、それ以下はゆっくり合わせる。Linuxのchronyc makestepのように必ず飛ばすわけではない。出力例は日本語版の表示(英語版は「Sending resync command to local computer」「The command completed successfully.」)
高精度の時刻同期(Windows Server 2016以降)
| 目標の精度 | 時刻源までの遅延 | 時刻源からの距離 | CPU 使用率(1日平均) |
|---|---|---|---|
| 1秒 | 片道の遅延の累積が 100ms 以内 | — | — |
| 50ms | 5ms 未満 | stratum 5 以内、6ホップ以内 | 90% 以下(仮想ならホストも) |
| 1ms | 0.1ms 未満 | stratum 5 以内、4ホップ以内 | 80% 以下(仮想ならホストも) |
- 経路上のすべてのWindows(上位の時刻サーバー、Hyper-Vホストを含む)が、Windows Server 2016/Windows 10以降であること。W32Timeの開始の種類は「自動」
- レジストリ(
W32Time\Config):MinPollInterval=6、MaxPollInterval=6、UpdateInterval=100、FrequencyCorrectRate=2、UtilizeSslTimeData=0。NtpClientのSpecialPollInterval=64 - 反映は
w32tm /config /updateとサービスの再起動(UtilizeSslTimeDataはOSの再起動が必要) - 最上位に正確で安定したstratum 1(GPS受信機付きのNTPサーバーなど)を置く。遠くの公開NTPサーバーでは1msは狙えない
Microsoft Learnは、米国FINRAの50ms、EUのMiFID IIの1msを要件の例に挙げています(第1回)。遅延はw32tm /stripchart /computer:… /rdtsc /samples:450のRoundtripDelayから求めます。Kerberosのためだけなら、既定のままで十分です。NTPとPTPの比較は第9回、設計は第11回の問4で扱います。
グループポリシーでの設定とワークグループの端末

- 場所は、コンピューターの構成 > 管理用テンプレート > システム > Windows タイム サービス(> タイム プロバイダー)。「Windows NTP クライアントを構成する」でTypeとNtpServerを指定する
- PDCエミュレーター用のGPOをフォレストルートドメインのDomain Controllers OUにリンクし、WMIフィルター
SELECT * FROM Win32_ComputerSystem WHERE DomainRole = 5でPDCエミュレーターだけに当てると、役割を移しても設定が付いていく - 「グローバル構成設定」を有効にすると、画面で変えていない値もGPOの既定値で上書きされる(例:
MaxPos/MaxNegPhaseCorrectionが172,800秒になる)。必要なポリシーだけを有効にする - GPOで配った値は
w32tm /query /configurationで(Policy)と表示される。レジストリを直接直しても、GPOの値が優先される
ワークグループの端末は既定でtime.windows.comと同期し、間隔も長めです。社内にNTPサーバーがあれば、w32tm /config /manualpeerlist:"ntp1.corp.example.jp,0x8" /syncfromflags:manual /updateで向け直します。15時間を超えるずれは、自動では直りません。
仮想マシンのDCと、PDCエミュレーターを移したとき
- Hyper-V:DCのVMは、統合サービスの「時刻の同期」を外し、ドメインの階層に従わせる(Microsoftの推奨)。ゲストのレジストリ
VMICTimeProviderのEnabled=0で、ホストからの時刻だけを使わない方法もある - VMware:VMware Toolsの周期的な同期は既定で無効。ただし起動・再開・vMotion・スナップショット時の一回限りの同期は有効なので、ESXiホストの時刻を正しく保つ(第6回)
- DCのVMがホストの時刻に従い、ホストがドメインから時刻を受け取る構成は循環する。どちらか一方を断つ
PDCエミュレーターを移したら
PS> netdom query fsmo
PS> w32tm /config /syncfromflags:domhier /reliable:no /update
PS> net stop w32time; net start w32time
PS> w32tm /query /source

新しいPDCエミュレーターには、前の節の「外部の時刻源」の設定を行い、古い方は上のコマンドで階層に戻します(WMIフィルターのGPOなら自動)。時刻の設定は役割に付いてきません。新旧の2台とも直すのを忘れないでください。
考えてみよう
- 自分のPCで
w32tm /query /sourceを実行してください。どのDC(またはtime.windows.com)から時刻を受け取っていますか。そのDCは、さらにどこから受け取っていますか。 - フォレストルートのPDCエミュレーターを別のDCに移す作業の手順書に、時刻の設定として何を書き加えますか。
- 「ときどきKerberos認証に失敗する」と言われたとき、どのコマンドで何を確かめますか。仮想マシンのDCであれば、ほかに何を確かめますか。
ヒント:この記事の階層の図、PDCエミュレーターの設定と移したときの手順、/query /statusのSource・Stratum・Last Successful Sync Timeが手がかりです。
まとめ
- W32TimeはNTPのクライアント兼サーバー。既定はKerberosの5分に足りる精度
- ADでは時刻が階層(NT5DS)で流れ、頂点はフォレストルートのPDCエミュレーター
- 頂点の1台だけ
/manualpeerlist … /syncfromflags:manual /reliable:yesで外部の時刻源を3台以上 Local CMOS Clockは外部と同期していない合図MaxPos/MaxNegPhaseCorrectionを超えるずれは直さない- 高精度(1ms)は2016以降+条件つき。Kerberosだけなら既定で十分
- PDCエミュレーターを移したら新旧2台とも時刻の設定を直す(WMIフィルターのGPOなら自動)
次回は、ネットワーク機器やESXi・vCenterなど、サーバー以外の機器の時刻同期を扱います。
連載「NTP入門」全11回
全回の目次と、読む順番・目的別の読み方は、NTP入門の入口のページにまとめています。
- なぜ時刻同期が必要か
- 時刻の基礎知識
- NTPの仕組み
- Linuxの時刻同期(chrony)
- Windowsの時刻同期(この記事)
- ネットワーク機器・仮想基盤
- 設計と推奨構成
- NTPのセキュリティ
- PTPと高精度同期
- 時刻同期のトラブルシュート
- 時刻同期の設計演習


コメント