Windows

Windowsの時刻同期がずれるときの切り分け手順【w32tmの読み方】

スポンサーラベル
時刻同期が止まる場所は3つしかない Windows

当サイトはアフィリエイト広告を利用しています。

Windows の時刻がずれると、Kerberos 認証が通らない、ログの突き合わせができない、といった形で後から効いてきます。以前 Windowsの時刻同期(w32tm)でエラー で個別のエラーへの対応を書きましたが、実際に困るのは「どこで止まっているのか分からない」状態です。

この記事では、w32tm の出力から切り分ける手順をまとめます。詰まる場所は端末・経路・参照先の3つしかないので、順番に潰していけば必ず原因にたどり着きます。手元の Windows 11 で実際に出力を取りながら書いています。

時刻同期が止まる場所は3つしかない

1. まず現在の状態を見る

最初に実行するのはこれだけです。

# 現在の同期状態を表示する(管理者権限は不要)
w32tm /query /status

手元の環境では次のように返りました。

閏インジケーター: 0 (警告なし)
階層: 5 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0157314s
ルート分散: 8.3145604s
参照 ID: 0x142B5EC7 (ソース IP: 203.0.113.199)
最終正常同期時刻: 2026/08/29 14:35:08
ソース: time.windows.com,0x9
ポーリング間隔: 10 (1024s)

見るべきは2行です。

「階層(Stratum)」が同期できているかどうかの答えです。 1〜15 なら上位のサーバーから同期できています。0 になっている場合は、どこからも同期できていません。上の例は 5 なので正常です。

もう1つが「最終正常同期時刻」です。ここが何日も前の日付なら、設定は入っているのに実際には同期できていない状態です。ポーリング間隔(上の例では1024秒)を大きく超えて古いなら異常と判断できます。

2. 管理者権限が要るコマンドがある

w32tm はサブコマンドによって必要な権限が違います。手元で確認したところ、次のものは一般ユーザーで実行するとエラーになりました。

w32tm /query /source
w32tm /query /configuration
→ 次のエラーが発生しました。 アクセスが拒否されました。 (0x80070005)

0x80070005 はアクセス拒否です。時刻同期の問題ではなく、単に管理者として実行していないだけなので、PowerShell を管理者権限で開き直してください。/query /status は一般ユーザーでも通るので、まずそちらで当たりを付けるのが早いです。

3. ①端末側:サービスが動いているか

Windows Time サービスが止まっていれば、当然同期しません。

# サービスの状態と開始の種類を確認する
Get-Service w32time | Select-Object Name, Status, StartType
Name    Status  StartType
----    ------  ---------
w32time Running Automatic

StatusStopped なら起動します。StartTypeManual になっている端末は要注意です。一度起動しても再起動後に止まるため、「直したのにまたずれる」を繰り返します。

# 起動して自動起動に変更する(管理者権限が必要)
Start-Service w32time
Set-Service w32time -StartupType Automatic

4. ②経路:NTPが届いているか

設定は正しいのに同期しない場合、次に疑うのは経路です。NTP は UDP の 123 番ポートを使います。

w32tm /stripchart を使うと、指定したサーバーとの時刻差を実際に測りにいきます。同期の設定を変えずに疎通だけ確認できるので、切り分けに向いています。

# 指定したNTPサーバーとの時刻差を3回だけ測る
w32tm /stripchart /computer:ntp.nict.jp /samples:3 /dataonly

手元の環境では次のようになりました。

ntp.nict.jp [[2001:db8::fff4]:123] を追跡中。
3 サンプルを収集中。
現在の時刻は 2026/08/29 21:59:13 です。
21:59:13, エラー: 0x800705B4
21:59:16, エラー: 0x800705B4
21:59:19, エラー: 0x800705B4

0x800705B4 はタイムアウトです。この端末は time.windows.com とは同期できているのに、NICT へは届いていません。つまり参照先を NICT に変更しても同期できない、ということが設定変更前に分かります。

社内環境では、ファイアウォールで UDP 123 が外向きに閉じられているケースがほとんどです。この場合、外部の NTP サーバーを指定しても永久に同期しません。プロキシは TCP の仕組みなので、NTP はプロキシを経由できません。社内に NTP サーバーを立てるか、ドメインコントローラー経由で同期する設計にする必要があります。

なお、上の出力では接続先が IPv6 アドレスに解決されています。IPv4 でのみ許可している環境では、名前解決の結果が IPv6 になったせいで届かない、というパターンもあります。IP を直接指定して切り分けられます。

5. ③参照先:どこを見に行っているか

参照先の設定は次で確認します。

# 現在の設定を表示する(管理者権限が必要)
w32tm /query /configuration

出力の Type が同期方式です。

Type意味
NT5DSドメイン階層から同期する(ドメイン参加端末の既定)
NTP指定した NTP サーバーから同期する
AllSync利用できるすべての方式を使う
NoSync同期しない

ドメイン参加端末を NTP に変えてしまうのは、よくある事故です。 ドメイン環境では、クライアントはドメインコントローラーから、DC は PDC エミュレーターから、というように階層で同期します。この流れを崩すと、Kerberos の時刻差の許容範囲(既定で5分)を超えて認証が通らなくなります。

外部の NTP を見るように設定するのは、PDC エミュレーターの役割を持つ DC の1台だけです。ほかは NT5DS のままにします。

役割を持つ DC は次で確認できます。

# PDCエミュレーターがどのDCかを調べる
(Get-ADDomain).PDCEmulator

6. 設定を直す

原因が特定できたら設定を入れます。以下は管理者権限で実行するコマンドです。時刻設定は端末全体に影響するため、検証端末で試してから展開してください。

# PDCエミュレーター側:外部NTPを参照するようにする
w32tm /config /manualpeerlist:"ntp.nict.jp,0x8" /syncfromflags:manual /reliable:yes /update

# クライアント側:ドメイン階層からの同期に戻す
w32tm /config /syncfromflags:domhier /update

# 設定を反映して即時に同期する
Restart-Service w32time
w32tm /resync

/resync の直後にもう一度 /query /status を実行し、「最終正常同期時刻」が現在時刻に更新されているかを確認します。ここが更新されなければ、まだ経路か参照先の問題が残っています。

本記事の確認は参照系のコマンド(/query /status/stripchartGet-Service)で行っており、上記の設定変更コマンドは実行していません。動作している端末の設定を書き換えないためです。

7. まとめ

Windows の時刻同期を切り分ける手順をまとめました。

  • まず w32tm /query /status の「階層」と「最終正常同期時刻」を見る。階層が 0 なら同期できていない
  • 0x80070005 は時刻の問題ではなく管理者権限の不足
  • /stripchart なら設定を変えずに疎通だけ試せる。社内では UDP 123 が閉じていることが多く、NTP はプロキシを経由できない
  • ドメイン参加端末は NT5DS のまま。外部 NTP を見るのは PDC エミュレーターだけ

時刻のずれは、認証やログ突き合わせの不具合として遠回りに現れます。切り分けの順番を決めておくと、原因の特定がかなり早くなります。

Windowsの時刻同期(w32tm)でエラー【対応方法メモ】

CentOS7での日時/タイムゾーン設定とchronyによる時刻同期の設定

コメント

タイトルとURLをコピーしました