葛藤プログラマの一日

2006-11-24

WindowsでのNTPは、マイクロソフトのKBなどに書かれていることと実際には動きがことなるようで、本当の動きを知るには試してみるしかなかった。以下の内容は、その検証結果の備忘録でもある。

NTPサーバー環境を作成するときに気をつけなければいけないのは、ドメイン環境とワークグループ環境でまったく動作が異なる点である。
そもそも、ドメイン環境ではKerberos認証のためにDCとクライアントの時刻が自動的に同期されるので、そのDCとNTPサーバーだけで時刻の同期を行えばよいということになる。
NTPサーバーの動作などについては以下のURLが参考になります。
http://www.atmarkit.co.jp/fwin2k/operation/winntp01/winntp01_01.html



WindowsにおいてNTP環境を構築する時の注意点


1.権威ある時刻サーバーの設定

 NTPサーバーは、「権威ある時刻サーバー」(「信頼できるタイムサービス)というときもある)である必要がある。Windows では、レジストリの値により「権威ある時刻サーバ」になる。
マイクロソフトのKBでは以下のように説明されている。
  • Windows2000  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\ReliableTimeSource
     を 1 に設定したサーバー。
  • WindowsXP, WindowsServer2003  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags
     を 5に設定したサーバー。ドメインコントローラでの設定変更のみ有効。

 参考:
    http://support.microsoft.com/kb/216734/
    http://support.microsoft.com/kb/314054/
    http://support.microsoft.com/kb/816042/

しかし...実際はメンバサーバーも、上記レジストリの値は有効。逆にWindowsServer2003の場合は、メンバサーバーも上記値でなければNTPサーバーとして使うことができない。























2.NTPサーバーのポートを開くこと

 NTP サーバーとして動作させるには、UDP:123 を開く必要がある







































3.テストする際の注意点

 時刻の同期をテストするときには、WindowsTimeサービスを停止&開始する必要がある。その際、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient\SpecialPollInterval のデータ値を削除しておかなければ、起動した時にすぐには同期されない。なぜなら、SpecialPollInterval(前回の同期時刻)に保存されている時刻から、SpecialPollInterval(同期間隔)の時間が経過しなければ時刻が同期されないためである。さらに、注意する必要があるのが、SpecialPollInterval の値は停止したときに書き込まれるということである。
よって、
 NG: 値削除 → サービス停止 → サービス開始
 OK: サービス停止 → 値削除 → サービス開始
となる。陥りやすいミスなので気をつける必要がある。


4.NTPサーバーを複数指定した場合

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\ntpserver に複数のサーバーを指定した場合は、先頭から順に同期が試されるわけではない。複数指定されている場合には、通信の距離の近い方から同期する。(なので、必ずしも物理的にネットワークが近い方が先と言うことではない)


5.同期間隔について

  1. MinPollInterval値およびMaxPollInterval値による同期間隔

    MinPollInterval値の同期間隔から同期の状態を確認しながら徐々に間隔が空く形で最終的にはMaxPollInterval値の同期間隔で同期される
  2. SpecialPoolInterval値による同期間隔

    SpecialPoolInterval値に指定された間隔で定期的に同期される

6.環境による同期間隔の違い

  1. ドメイン環境
    ①「MinPollInterval値およびMaxPollInterval値による同期間隔」が使われる
  2. ワークグループ環境
    ①W32Time\Parameters\NTPServerに「0x1」付きでNTPサーバーが指定された場合は「SpecialPoolInterval値による同期間隔」が使われる
    ②それ以外は、「MinPollInterval値およびMaxPollInterval値による同期間隔」が使われる

7.NTPサーバー指定のオプション

 クライアントで、NTPサーバーを指定する際のでオプションには以下のようなものがある
 書式:サーバー名(or IPAddress),オプション
 オプション
  0x0(または、指定無し) --- 指定されたサーバーをすべてチェック、エラーログが出力される
  0x1 --- MinPoolInterval の間隔で同期し続ける
  0x8 --- MinPoolInterval の間隔で4回同期する
例:ServerName1,0x1 ServerName2,0x1

ラベル: