UNIXベースのNTPサーバとWindows Timeサービス

http://www.atmarkit.co.jp/fwin2k/operation/winntp03/winntp03_01.html

 インターネット環境から切り離されたシステムの場合、システム内に外部NTPサーバと同様に権威のあるNTPサーバを設定することで、標準時刻を保持するNTPサーバとして利用することができる。各NTPクライアントは、このサーバを参照先として、時刻同期を行うように設定すればよいだろう。

 以下の方法で、コンピュータのローカル・クロック(Windows OS が、マザーボード上のリアルタイム・クロックなど、ハードウェアベースの時計機能から取得している時刻)を標準時刻とするNTPサーバを設定することが可能となっている。

 Windows Timeサービスでは、いくつかの設定を行う必要がある。まず、下記AnnounceFlags値を設定することで、Windows Timeサービスが権威あるNTPサーバとして設定される。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Config
値の名前 AnnounceFlags
型 DWORD
値の内容 0x5 (初期値は0xa)

  • > Windows Timeサービスを権威あるNTPサーバにするための設定

 またほかの参照先NTPサーバに時刻同期は行わないため、これに関する項目は空欄とする必要がある。なお、自分自身のIPアドレスは指定する必要はない。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Parameters

値の名前 NTPServer
型 REG_SZ
値の内容 (空欄)

  • > ほかのNTPサーバとの同期をしないようにするための設定

 また、自身のローカル・クロックについての分散の値(ゆらぎ値)を変更する必要がある。筆者が確認した限り(RedHat Fedra Core 4およびRedHat Linux 8.0を利用)では、下記の例以外の値では、ntpdは権威あるNTPサーバとして設定されたWindows Timeサービスから、時刻同期を行うことはなかった(ntpqコマンドで明示的に同期が行われているかどうか確認した)。これはntpdがStratum 1のNTPサーバに直接時刻同期を行うような場合、ローカル・クロックの分散の値がごく小さい場合以外、十分に精度のある時刻と見なさず、ポーリングを行っても実質同期しないためと考えられる。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Config

値の名前 LocalClockDispersion
型 DWORD
値の内容 0x0 (初期値は0xa)

  • >ローカル・クロックの分散値の設定

 この設定を行い、Windows Timeサービスを再起動させれば設定が反映する。また再起動直後にほかのコンピュータから時刻同期を行うと同期できないことがあるが、これはNTPプロトコルの実装上、ローカル・クロックを権威ある時刻と認めるまでに若干時間を要するためなので、特に心配する必要はないだろう。

(20120710補足)
Windows Server 2008 R2では、サービスの起動を「自動(遅延開始)」にする必要があるとのことです。