サイトアイコン puti se blog

WindowsでNTPサーバーを構築する方法とstratum確認手順

Windowsサーバーは、標準ではNTPサーバーではありませんし、コンポーネントのインストールでもNTPサーバーは構築出来ません。
そこでWindows でNTPサーバーを構築したい時の手順を紹介します。

また、構築したWindows NTPサーバーをリモートからNTPサーバーとして機能していることやstratum値の動作確認もしてみましょう。

環境・前提条件

で、NTPサーバーを構築してみました。

結論、レジストリ値を変更するとWindowsサーバーでNTPサーバーを構築できる

Windowsサーバーの以下のレジストリ値の項目を変更し、NTPサーバーを構築します。
また、各レジストリ値の意味合いについて、実際に検証しながら次章で確認してきます。まずはNTPサーバーを構築してみましょう。

1、サーバーのタイプがNTPでは無かった場合変更

これは通常、なにもしなくてもそのままなのですが、

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\

の「Type」の値が「NTP」となっていなかった場合、「NTP」に変更する。※ADに参加したようなサーバーの場合は、このTypeが変わっています。

2、NTPサーバーを有効にする

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\

の「Enabled」の値を0から「1」に変える。

3、権威あるNTPサーバーにする

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\

の「AnnounceFlags」の値をaから「5」に変える。

4、Windows Timeサービスを再起動する

最後に、「Windows Time」サービスを右クリックから「再起動」すると、Windowsサーバーは権威あるNTPサーバーに構築し終わっています。

ただし、今回構築したNTPサーバーの上位NTPサーバーをどうするかも検討し設定してあげる必要があります。

Windows Server で権限のあるタイム サーバーを構成する方法

以下の手順で、構築したNTPサーバーがどういうstratum状態でNTPサービスを提供しているのか確認していってみましょう。

WindowsでリモートからNTPサーバーの状態(stratum)を確認する方法

NTPサーバーではないWindowsからリモートで、NTPサーバーの状態(stratumやRefID)を確認する方法が以下のコマンドです。

w32tm /monitor /computers:<IPアドレス>

です。今回の検証環境では、NTPサーバーのIPアドレスは「*.*.60.1」なので、上記コマンドの<IPアドレス>の箇所に、このNTPサーバーのIPアドレスを入れればリモートからNTPサーバーの状態(stratumやRefID)を確認することが出来ます。

以下、WindowsでNTPサーバーを構築中に、上記w32tmコマンドを実施し、NTPサーバー構築方法のレジストリ値の意味合いを確認してみます。

NTPのstratum階層構造がわからない人は、以下を参照してください。

Network Time Protocol - Wikipedia

レジストリ値でNtpServer EnabledでNTPサーバーにしただけの場合

のみ設定した状態です。※「stratum」は、上記コマンドプロンプト画面上「階層」という言葉で出力がされています。

■ 画像1ブロック目のw32tmコマンド出力赤線

まず、ターゲットのNTPサーバーがまだNTPサーバー構築してない場合です。
NTPサーバー構築していない場合でも、UDP123はリッスンしているんですが、w32tmでアクセスしてもNTPエラーになり反応が無いことがわかります。

■ 画像2ブロック目のw32tmコマンド出力赤線

ターゲットのNTPサーバーがまだNTPサーバーとして構築し(NtpServer Enabled=1)、「Windows Time」サービスを再起動したばかりの状態です。
NTPサーバーは、上位のNTPサーバーと時刻同期が取れていないため(ローカルクロックには同期が取れているが)、stratum 0となっています。
stratum 0の場合、下位のNTPクライアントは時刻同期が出来ません。

■画像2ブロック目のw32tmコマンド出力赤線

「Windows Time」サービスを再起動してしばらく経つと、NTPサーバーが上位のNTPサーバー(stratum 3)から時刻同期され、stratum 4としてNTPサービスが出来るようになります。

つまり、レジストリ値NtpServer Enabledだけでは、NTPサービスは上位のNTPサーバーと時刻同期出来ていないと、NTPサービスを提供できない状態になります。
更に言いますと、このNTPサーバー状態では、上位のNTPサーバー無しのローカルクロックだけでは、NTPサービスは提供できないNTPサーバーと言うことです。

レジストリ値AnnounceFlagsで権威あるNTPサーバーにした場合

を設定したNTPサーバーのstratum状態です。

■ 画像1ブロック目のw32tmコマンド出力赤線

ターゲットのNTPサーバーがまだNTPサーバーとして構築し(NtpServer Enabled=1)、「Windows Time」サービスを再起動したばかりの状態です。
NTPサーバーは、上位のNTPサーバーと時刻同期が取れていないですが(ローカルクロックには同期が取れているが)、先ほどと異なりstratum 1となっています。
stratum 1の場合、下位のNTPクライアントは時刻同期ができます。

■画像2ブロック目のw32tmコマンド出力赤線

「Windows Time」サービスを再起動してしばらく経つと、NTPサーバーが上位のNTPサーバー(stratum 3)から時刻同期され、stratum 4としてNTPサービスが出来るようになります。

つまり、AnnounceFlags=5にすると、上位NTPサーバーと時刻出来ていなくても、NTPサーバーとしてNTPサービスを提供出来る状態になります。

上位NTPサーバーを無しにした場合(ローカルクロックが上位なstratum 1)

つまり、上位のNTPサーバー無しのローカルクロックだけで、NTPサービスは提供出来るNTPサーバーを構築するには、

とする必要があります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\

の「NtpServer」には、デフォルト値で上位NTPサーバーとして「time.windows.com,0x8」が入っています。

上位NTPサーバーとして「time.windows.com,0x8」がstratum 3のため、今回構築したNTPサーバーはstratum 4でしたが、
こちらの「time.windows.com,0x8」の値を消してカラの値にすれば、上位参照できるNTPサーバーはいなくなり、今回構築したNTPサーバーはstratum 1となります。

■ 画像1ブロック目のw32tmコマンド出力赤線

ターゲットのNTPサーバーがまだNTPサーバーとして構築し(NtpServer Enabled=1)、「Windows Time」サービスを再起動したばかりの状態です。
NTPサーバーは、上位のNTPサーバーと時刻同期が取れていないですが(ローカルクロックには同期が取れているが)、先ほどと異なりstratum 1となっています。
stratumが1の場合、下位のNTPクライアントは時刻同期ができます。

■画像2ブロック目のw32tmコマンド出力赤線

「Windows Time」サービスを再起動してしばらく経っても、上位NTPサーバーがなく、stratum 1のままです。
stratum 1の場合、下位のNTPクライアントは時刻同期ができます。

モバイルバージョンを終了