NTP設定メモ

はじめに

Windowsの機能を使用したNTP(サーバー・クライアント)の設定方法をメモる。
サードパーティのソフトを使用していた時もあるが,なるべく標準のWindowsの機能を使用して他のソフトはインストールしないでおこうと思う。特にserver機は安定性が求められるのでインストールするソフトはなるべく少なくしたい。

NTP (Network Time Protocol)とは、 ネットワークに接続されたコンピュータや各種機器の時刻同期に用いられるプロトコル

方策

WindowsのNTP時刻同期間隔は標準で1週間なのだが,1時間毎に変更する。
W32TIMEサービスは外部トリガー起動で時刻同期の都度起動停止を繰り返すようで,時刻問い合わせ時に失敗することが多い。時刻同期を手動で何度か実行させれば最初の1発目は失敗するが2発目や3発目は成功する。たぶん起動が間に合わないのかと思う。

設定変更

サービス(w32time)

W32TIMEサービースは手動設定として,Windows起動時にスタートアップでバッチファイルから起動コマンドを投入させるようにして常時起動とする

@rem Windows タイムサービスを起動  W32Time (Windows Time)は手動
net start w32time

上記の別方法としてIPアドレスが付与されている間は起動させるようにするコマンド入力でも良いみたい。サービス トリガーイベント
sc triggerinfo w32time start/networkon stop/networkoff

タスクスケジューラ(Synchronize Time)

タスクスケジューラの設定(標準の時刻調整スケジュールの無効化)
 「自動 (遅延開始)」の時にデフォルトで毎週日曜日の1:00に実行される。
 「Time Synchronization」の「Synchronize Time」を無効にする。
 今回「w32time」は手動起動としたのであまり関係ないかも

レジストリー(W32Time)

関連レジストリーのパス
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\

 Parameters「Type」

  Nt5DS:ドメインの階層と同期する方法
  NTP:手動で構成されたソースと同期する方法
  NoSync:時刻同期しない
  AllSync:ドメインと手動で構成されたタイムソースと時刻同期する方法

 Parameters「NTPServer」 

    末尾のモードコード 例:time.windows.com,0x9
  ・0x0:Windowsの標準的なNTPサーバーの時刻を同期するモード/設定
  ・0x1:Windows端末上でのみ実行できる一定間隔で時刻同期するモード/設定
  ・0x2:ドメイン/外部の両方から時刻同期するモード/設定
  ・0x4:Symmetric Active/Passive Modeにより時刻同期するモード/設定
  ・0x8:Client/Server Modeにより時刻同期するモード/設定
  ・0x9:Client/Server Modeにより一定間隔で時刻同期するモード/設定

 TimeProviders\NtpServer「Enabled」

  0:NTPサーバー機能 無効
  1 :NTPサーバー機能 有効

 TimeProviders\NtpClient「Enabled」

  0:NTPクライアント機能 無効
  1:NTPクライアント機能 有効

 TimeProviders\NtpClient「SpecialPollInterval」 

   0x9の時のNTP同期間隔
  3600:1時間
  21600:6時間
  43200:12時間
  86400:1日(24時間)
  604800:7日 

 Config\ 「AnnounceFlags」

  a:NTPサーバーの権威なし(上位NTPサーバーなしでは稼働しない)
  5:NTPサーバーの権威あり(上位NTPサーバーなしでも単独で稼働する) 


以下はParameters「NTPServer」の値の末尾が「0x8」の場合で時刻同期間隔はWindowsが時刻差に基づいて動的に決定する。

Step モード:目標の時刻に瞬時に変更。時刻が戻ることもあるので,同じ時刻を2回通過することもある。(同一のタイムスタンプが複数存在するのでデーターベース処理には不向き)
Slew モード:時刻差を時間をかけて徐々に縮める。時刻が大きく戻ることは無い。

Slewモードの条件式 「条件1と条件2が満たす場合,Slew モードで時刻同期を実施」
Windows Server 2012以前
条件1.
AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
NTP Client が NTP Server に対して Polling した際の NTP Client と NTP Server の時刻の差

条件2.
AbsoluteValueOfCurrentTimeOffset / (PhaseCorrectRate * UpdateInterval)<= System Clock Rate / 2

Windows Server 2016以降
条件1.
AbsoluteValueOfCurrentTimeOffset <= MaxAllowedPhaseOffset
NTP Client が NTP Server に対して Polling した際の NTP Client と NTP Server の時刻の差

条件2.
AbsoluteValueOfCurrentTimeOffset ÷ (16 x PhaseCorrectRate x pollIntervalInSeconds)<= System Clock Rate/2

注)System Clock Rate はシングルプロセッサーの場合:0.010 / マルチプロセッサーの場合:0.015 で固定。

 Config\ 「MaxAllowedPhaseOffset」

   NTP Client と NTP Server の時刻差でslewモードとstepモードの閾値
   設定値以下でSlewモード動作 【条件1】
  1:Workgroup
  300:Domain-Controller ,Domain-Member

 Config\ 「MaxPollInterval」

   0x8の時のSlewモードの最大ポーリング間隔でpollIntervalInSecondsを決定する
 【2016以降の条件2】
  10:Workgroup   2^10 =1024
  15:Domain-Controller ,Domain-Member   2^15 =32768

 Config\ 「MinPollInterval」

   0x8の時のSlewモードの最小ポーリング間隔でpollIntervalInSecondsを決定する
 【2016以降の条件2】
  6:Workgroup   2^6 =64
  10:Domain-Controller ,Domain-Member   2^10 =1024

 Config\ 「PhaseCorrectRate」

   0x8の時のSlewモードの調節速度でどのくらいの速度で時刻を合わせていくかの傾き
  【条件2】
  1:Workgroup ,Domain-Member
  7:Domain-Controller

 Config\ 「UpdateInterval」

   0x8の時のSlewモードの調節速度で時刻を合わせていく間隔 【2012以前の条件2】
  100:Workgroup ,Domain-Controller
  30000:Domain-Member

ポート開放(123)

NTPサーバー設定した場合は受信ポート123(UDP)を開放する。

設定確認

コマンドプロンプトから確認
一番良く使用するコマンドで時刻同期正常確認する。
 「w32tm /query /status」

タイムプロバイダー等設定確認
 「w32tm /query /configuration」

NTPサーバ間の時刻差や上位NTPサーバの名前を確認
 「w32tm /monitor /computers:192.168.100.1」

その他の確認コマンド
 「w32tm /query /peers /verbose」

考察

標準設定ではWorkgroupのコンピューターは,ほぼStepモードで動作する。ドメインのコンピュータで条件が合えばSlewモード動作となるようだ。データーベース処理への影響もあると思うがSlewモードは難解なので,単純なStepモード(0x9)の設定として頻繁に同期を取れば問題ないように思う。ドメインメンバーについては気にする必要はないのかな。