Windowsサーバーは、標準ではNTPサーバーではありませんし、コンポーネントのインストールでもNTPサーバーは構築出来ません。
そこでWindows でNTPサーバーを構築したい時の手順を紹介します。
また、構築したWindows NTPサーバーをリモートからNTPサーバーとして機能していることやstratum値の動作確認もしてみましょう。
環境・前提条件
- Windows Server 2016
で、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サーバーにしただけの場合
- レジストリ値 Enabled=1
のみ設定した状態です。※「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サーバーにした場合
- レジストリ値Enabled=1と
- レジストリ値AnnounceFlags=5
を設定した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サーバーを構築するには、
- レジストリ値Enabled=1と
- レジストリ値AnnounceFlags=5
- レジストリ値(上位NtpServer)NtpServerをカラ
とする必要があります。
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クライアントは時刻同期ができます。