Windows Serverの時刻同期とNTP構成

概要

本記事では、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 同期を使用。
  • 仮想環境ではホストとの競合を避ける構成を採用すること。