概要
本記事では、Windows Serverドメイン環境における時刻同期の仕組みとNTP構成をPowerShellベースで解説します。
特にPDCエミュレーターを基準とした設計、w32time サービスの構成、GPOによる統一設定、および仮想環境での注意点を含みます。
変数表記について
| 変数名 | 設定例 | 説明 |
|---|---|---|
<<PDC_HOST>> |
DC01.contoso.local |
PDCエミュレーター(ドメイン時刻の基準) |
<<SECONDARY_DC>> |
DC02.contoso.local |
他のドメインコントローラー |
<<NTP_SERVER>> |
ntp.nict.jp |
外部NTPサーバー名またはIP |
<<CLIENT_HOST>> |
SRV01.contoso.local |
メンバーサーバーまたはクライアント |
<<DOMAIN_NAME>> |
contoso.local |
Active Directoryドメイン名 |
Step 1: ドメイン時刻同期の基本構造
Active Directoryドメインでは、時刻は以下の階層構造で同期されます。
| 階層 | 同期先 | 内容 |
|---|---|---|
| PDCエミュレーター | 外部NTPサーバー | ドメイン全体の基準。唯一の「信頼できる時刻ソース」 |
| 他のDC | PDCエミュレーター | ドメイン内の時刻階層を維持 |
| メンバーサーバー / クライアント | 最寄りのDC | Kerberos認証の整合性を保つため自動同期 |
ワークグループ環境では、各サーバーが手動でNTPサーバーを設定する必要があります。
Step 2: PDCエミュレーターの外部NTP構成
PDCエミュレーターは、ドメイン内の唯一の「信頼できる時刻ソース」として設定します。
# 外部NTPサーバー設定(複数指定可)
w32tm /config /manualpeerlist:"ntp.nict.jp time.google.com" /syncfromflags:manual /reliable:yes /update
# 信頼できる時刻ソースとして広告
reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f
# サービス再起動
net stop w32time && net start w32time
確認:
w32tm /query /configuration
w32tm /query /status
Step 3: 他DC・メンバーサーバーの同期設定
他のDCやメンバーサーバーは自動的にPDCから時刻を取得しますが、手動で構成することも可能です。
# ドメイン階層に従う設定
w32tm /config /syncfromflags:domhier /update
net stop w32time && net start w32time
同期強制と状態確認:
w32tm /resync /force
w32tm /query /status
Step 4: GPOによる時刻同期ポリシーの統一(PowerShell運用)
時刻同期設定は、GPO(グループポリシー)を介してドメイン全体に適用可能です。
GUIを使わず、PowerShellのみで確認→設定→反映までを行います。
1. GPOモジュールの読み込みと既存ポリシー確認
Import-Module GroupPolicy
# GPO一覧確認
Get-GPO -All | Select-Object DisplayName, Id, GpoStatus
# Default Domain Policy の存在確認
Get-GPO -Name "Default Domain Policy" | Select-Object DisplayName, ModificationTime
2. 現在の時刻関連設定を確認
GPO内のポリシー領域(Policies\Microsoft\W32Time)から設定を確認します。
# 現在の時刻ポリシー値確認(存在しない場合は未設定)
Get-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName Type
Get-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName NtpServer
エラー「見つかりませんでした」と出た場合は、その値がまだポリシーに存在しないだけであり、正常です。
3. NTPクライアント設定を追加または修正
必要に応じて設定を追加します。
# NTPクライアントを有効化
Set-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName Enabled -Type DWord -Value 1
# 同期モード設定(NT5DS=ドメイン階層 / NTP=外部NTP)
Set-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName Type -Type String -Value "NT5DS"
# 外部NTPサーバー指定(PDCの場合のみ)
Set-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName NtpServer -Type String -Value "<<NTP_SERVER>>,0x8"
# オプション:ポーリング間隔(秒単位)
Set-GPRegistryValue -Name "Default Domain Policy" `
-Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
-ValueName SpecialPollInterval -Type DWord -Value 3600
4. GPOリンクと適用範囲の確認
Default Domain Policy がどの範囲にリンクされ、どのOUやドメインに適用されているかを確認します。
# GPOのリンク状態と適用範囲をレポート出力(HTML形式)
Get-GPOReport -Name "Default Domain Policy" -ReportType Html -Path "$env:TEMP\DefaultDomainPolicy.html"
5. GPOの適用と確認
# GPOを即時適用
gpupdate /force
# 適用済みポリシーの確認
gpresult /r
# HTMLレポート生成(詳細確認)
Get-GPResultantSetOfPolicy -ReportType Html -Path "$env:TEMP\gpresult.html"
6. 実際に反映されたレジストリ値を確認
reg query "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient"
出力例:
Enabled REG_DWORD 0x1
Type REG_SZ NT5DS
NtpServer REG_SZ ntp.nict.jp,0x8
SpecialPollInterval REG_DWORD 0xe10
仮想環境での注意点
仮想化環境(Hyper-V、VMwareなど)では、ホストの時刻同期サービスが競合する場合があります。
発生しやすい条件:
- VM側とホスト側の両方で時刻同期が有効
- PDCが仮想環境上で動作し、異なるNTPソースを参照
- スナップショットやマイグレーションで時刻が巻き戻る
推奨構成:
- PDCエミュレーターではホスト同期を無効化
- 他のVMはホスト同期を許可してもよい
- DC間の時刻同期はすべて
w32timeに統一
テストとトラブルシュート
# NTP同期テスト
w32tm /stripchart /computer:"<<NTP_SERVER>>" /dataonly /samples:5
# サービス状態確認
Get-Service w32time
# W32Time 関連イベントを最新10件取得
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Time-Service"} | Select-Object TimeCreated, Id, LevelDisplayName, Message -First 10
まとめ
- PDCエミュレーターがドメインの唯一の時刻基準。
- 外部NTPはPDCのみ構成、他のDCやクライアントは
domhier同期を使用。 - 仮想環境ではホストとの競合を避ける構成を採用すること。
