WindowsXP以降のNTPの設定

最近、NTPの動きを調べたのでまとめ。

NTPの仕様としては、NTPサーバとクライアントの時差がなければ、更新間隔は広がり、時差がある場合は、間隔が短くなります。精度の悪いクライアントは頻繁に同期します。

Windowsの時刻同期に使われているサービスは「w32time」なんですが、これが結構くせもので
時刻同期しなかったり、エラー吐いたりたち悪い。(ノ ゚Д゚)ノ ==== ┻━━┻
お勧めは、桜時計、Tclockが良いかな。

時刻同期を考えてる人は近くのNTP提供サービスを使いましょう。
自分の利用しているプロバイダで用意してあるのであれば、そちらを使ってください。
そんなの無いよーとか、わからない人は下記を利用してみてください。
インターネットマルチフィード時刻情報サービス for Public
Ring Server Project が NTP サーバのサービスを開始
などが良いでしょう。

Windows の w32timeを利用する場合の説明を書きます。

サービスとして使うには、バグフィックスされたパッチをあてるしかないです。
WindowsXPではSP2、Windows Server 2003はSP1で修正されています。
それ以外の場合はKBに書いてある個別パッチをMSからもらわないとだめです。

NTPの設定をする場合、書き換える必要があります。

○regeditにて直接書き換える場合
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters

Type : REG_SZ
NT5DS(default ActiveDirectory による時刻同期)
NTP(NTPサーバと同期する場合)
NoSync(時刻同期しない場合)
Anysync(AD→外部NTP)

NtpServer : REG_SZ
[NTP1stサーバのIPアドレス],0x8

2つのNTPサーバを指定する場合は
[NTP1stサーバのIPアドレス],0x8 [NTP2ndサーバのIPアドレス],0x8

○コマンドで変更する場合
net time /setsntp:[NTPサーバのIPアドレス],0x8
net stop w32time & net start w32time

上記の設定の後なら、
w32tm /resync
で即時に時刻の同期ができる。

デバックの場合
[警告]イベント51を出す設定
同期先のNTPサーバと自分のPCの時間差を表示できる。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
EventLogFlags
0x1→0x2 に変更

イベントID 33を出す設定
時刻が変更されたときに記録できる(ただし*1 slewモードの場合は記録されない)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\
EventLogFlags
0x2→0x1 に変更

*1 slewモード デフォルト
1秒間に0.0005秒、1日で43秒修正
NTP同期の設定をしていたらそんなにずれることはないと思うが。

参考情報
@IT Windowsネットワーク時刻同期の基礎とノウハウ
第1回 Windows OSにおける時刻同期サービスとNTP
第2回 w32timeデバッグ・ログとw32tmコマンド

NTPの設定方法

関連KB
http://support.microsoft.com/default.aspx?scid=kb;ja;875424
http://support.microsoft.com/default.aspx?scid=kb;ja;830092
W32Time サービスのレジストリ エントリ http://support.microsoft.com/default.aspx?scid=kb;ja;223184