Windows NTPサーバの設定方法 自動起動コマンド、バッチを紹介
ネットワークから時刻同期を行うプロトコルである「NTP」「SNTP」。
インターネット上のNTPサーバなどから時刻同期を行わない場合や、ローカルネットワーク環境でのNTPクライアントの設定テスト、NTPパケットの通信テストなど様々なタイミングで、WindowsPCをNTPサーバとして稼働させたいことがあるかと思います。
今回はWindowsOSのパソコンをNTPサーバとして稼働させる設定方法の解説と、同じ設定をコマンドプロンプトから行う方法を解説していきます。
※本記事で使用している端末のOS[Windows10 21H2]
コマンドプロンプトよりNTPサーバを設定・起動するメリット
WindowsのパソコンをNTPサーバとして稼働させるための設定方法は、様々なサイトなどでも解説されておりますが、「レジストリ」の設定を変更する必要があります。
NTPサーバの機能を有効にする際に度々レジストリエディターを起動し、数価を手入力する行為が煩わしいというSE、エンジニア向けに、コマンドプロンプトからレジストの値を変更し、NTPサーバとしての設定を行う方法を解説します。
コマンドプロンプトから設定が可能ということは、バッチファイルとしてデスクトップに置いておき、ワンクリックでNTPサーバの起動、停止が可能になります。
手動でNTPサーバとしての設定を行う方法[レジストリエディター]
まずは、パソコンの「レジストリ」の値をレジストリエディターより手動で変更し、NTPサーバの設定を行う方法を解説します。
大まかに下記のような手順でNTPサーバの設定、起動を行います。
- レジストリエディターにて「W32Time\Config」の[AnnounceFlags]の値変更
- レジストリエディターにて「W32Time\TimeProviders\NtpServer」の[Enabled]の値変更
- コマンドプロンプトよりNTPサーバを起動するコマンドを入力
- WindowsファイアウォールなどのセキュリティソフトにNTP通信を可能にする設定を追加
レジストリエディターから手動で設定を行う場合も、最終的にはコマンドプロンプトにてNTPサーバの起動を行う必要があります。
下記より設定方法を詳しく解説します。
レジストリの変更が必要な値
NTPサーバ設定に必要な設定項目は2つです。
※レジストリエディターの起動方法はタスクバーの検索ボックスにて「regedit」と検索します。
1つ目は「W32Time\Config」内の[AnnounceFlags]の値を変更します。
レジストリエディターを起動し下記パスまでアクセスします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
画像のように「W32Time\Config」の中に[AnnounceFlags]という項目を編集します。
デフォルトで[a]となっている「AnnounceFlags」の値を[5]に変更します。
変更が完了したら[OK]をクリックし次の設定に進みます。
2つ目は「W32Time\TimeProviders\NtpServer」内の[Enabled]の値を変更します。
こちらも同じように下記パスにアクセスします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
デフォルトで[0]となっている「Enabled」の値を[1]に変更します。
変更が完了したら[OK]をクリックし、レジストリエディターの設定はこれで完了となります。
最後に、コマンドプロンプトよりNTPサーバを起動するコマンドを入力します。
管理者としてコマンドプロンプトを開き、下記コマンドを入力します。
> net start w32time
起動が完了すると画像のように「Windows Time サービスを開始します」と表示されます。すでに開始されている場合はそのままで大丈夫です。
Windowsファイアウォールの無効化
PCをNTPサーバとして稼働させた場合、NTPクライアントからの通信を受信するため、Windowsファイアウォールやセキュリティソフトの設定を変更する必要もあります。
時刻同期はNTP(ポート番号123)を使用するため、通信を許可する設定を行うかセキュリティソフトなどを無効にする必要があります。
コマンドプロンプトからNTPサーバの設定を行う方法
レジストリエディターの値の変更を主導で行う方法を紹介しましたが、上記の一連の手順を、数行のコマンドを入力するだけで行う手順の解説を行います。最後にはコマンドの内容の解説も行います。
NTPサーバにするための設定コマンド
コマンドは管理者で実行したコマンドプロンプトにて入力する必要があります。
下記3行のコマンドを入力します。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v AnnounceFlags /t "REG_DWORD" /d "0x00000005" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t "REG_DWORD" /d "0x00000001" /f
net start w32time
後ほどコマンドの内容の解説を行いますが、手動でレジストリの変更を行っていた「W32Time\Config」内の[AnnounceFlagsの値変更が1行目、「W32Time\TimeProviders\NtpServer」内の[Enabled]の値変更が2行目となります。3行目は手動の際と同じくNTPサーバ起動のコマンドです。
レジストリの設定変更コマンド解説
コマンド内容の解説を行います。
レジストリの値をレジストリエディターを使用せず、コマンドプロンプトにて変更するには「reg」コマンドを使用します。
「reg」コマンドは「reg ○○」といった形で入力するコマンドで、レジストリの修正や追加が可能な「add」コマンドを今回使用しました。
下記表がregコマンドのオプション一覧と説明です。
ADD | 値の追加、書き換え(変更) |
DELETE | 値の削除 |
QUERY | 値の取得(出力)、値の検索 |
COPY | 値を別の親キーにコピー |
SAVE | 特定のキーとその中のデータをレジストリデータファイル(ハイブ)に書き出し |
RESTORE | レジストリデータファイル(ハイブ)から指定のキーにファイル内のデータを展開(復元) |
LOAD | レジストリデータファイル(ハイブ)をレジストリキーとして扱い、内部のキーやデータに直接アクセスできるようにする |
UNLOAD | LOAD で読み込んだレジストリデータファイル(ハイブ)のキーを閉じる(アンロード) |
COMPARE | 指定のキー同士の中身を比較 |
今回使用したオプションはaddコマンドのみなので「reg add」を使用したレジストリ変更コマンドについて詳しく解説していきます。まずはレジストリの変更したい内容をまとめておきます。
●変更点1 パス:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config 名前:AnnounceFlags 種類:REG_DWORD データ(値):0x00000005(5) 「デフォルトは0x0000000a(10)」※()内は10進数 ●変更点2 パス:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 名前:Enabled 種類:REG_DWORD データ(値):0x00000001(1) 「デフォルトは0x00000000(0)」※()内は10進数
手動で設定変更を行ったレジストリの値をコマンドで変更するためには、上記のように「パス」「名前」「種類」「データ(値)」を使用します。データ(値)は変更後の値を決定しておきます。
あとは下記の入力方法に従って、コマンドを完成させます。
・reg addコマンド入力方法 reg add "パス" /v "名前" /t "種類" /d "データ(値)" /f
この入力方法に、実際に「変更点1」の値を当てはめると下記のようになります。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v AnnounceFlags /t "REG_DWORD" /d "0x00000005" /f
同じように「変更点2」の値も当てはめ、コマンドを作成します。
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t "REG_DWORD" /d "0x00000001" /f
元の値に戻したい場合は、一番最後の「データ(値)」の部分を変更前の値を入れたコマンドを入力することで戻すことが可能です。
バッチファイルにて自動でNTPサーバを起動する
入力するコマンドが決定したことで、バッチファイルとして使用することも可能です。
バッチファイル作成例です。下記のテキストをメモ帳にコピーし、.BATファイルで保存しておくとワンクリックでNTPサーバの設定と起動が可能となります。
※管理者権限で実行する必要があります。
@echo off color 1f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v AnnounceFlags /t "REG_DWORD" /d "0x00000005" /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t "REG_DWORD" /d "0x00000001" /f net start w32time echo NTP Server "Ebable" pause
[ntpSV_ON.bat]というファイル名で保存し、実行してみます。
今回作成したバッチファイルを実行すると、下の画像のように表示され、NTPサーバが起動されます。
NTPサーバの機能を停止したいとき、変更したレジストリの値を元に戻したいときのコマンドも下記に記載しておきます。
こちらも同じく.BAT形式で保存し管理者権限で実行することで、ワンクリックの操作で設定を元に戻すことが可能です。
@echo off color 1f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v AnnounceFlags /t "REG_DWORD" /d "0x0000000a" /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t "REG_DWORD" /d "0x00000000" /f net stop w32time echo NTP Server "Disable" pause
NTPクライアントの時刻同期先設定[時刻取得テスト]
NTPサーバの設定が完了した後のテスト方法、NTPクライアントの設定方法を解説します。
PCは合計2台必要となります。
NTPサーバ(WindowsPC):IPアドレス[10.10.10.200] NTPクライアント(WindowsPC):IPアドレス[10.10.10.1] ※NTPサーバより時刻を自動取得する際、現在設定されている時刻と大きく離れている場合、時刻同期に失敗することが多いため、手動で近い時間に合わせる必要がある場合があります。
NTPサーバとクライアントが正常にNTPパケットを通信できる状態にします。今回は時刻同期のテストのためIPアドレスは同セグメント、Windowsファイアウォールは無効にしてテストを行います。
タスクバー右下の日時を右クリックし、表示されたメニューより[日付と時刻の調整(A)]を選択すると、設定の[日付と時刻]が表示されます。
関連性の[別のタイムゾーンの時計を追加する]を選択すると画像のように[インターネット時刻]から[設定の変更(C)]を選択します。
※AD(Active Directory)でWindowsアカウントを管理している場合、ADの設定によっては[インターネット時刻]が表示されない場合があります。
Windowsの端末はデフォルトで、インターネット上の[time.windows.com]より時刻を取得する設定となっています。これをNTPサーバとしたPCのIPアドレス[10.10.10.200]に変更します。
NTPサーバのIPを入力し、[今すぐ更新(U)]をクリックすると同期の成功・失敗が表示されます。
[同期しました]と表示された場合は時刻同期に成功しており、NTPサーバに設定されている日付、時刻がクライアントに自動で反映されます。
時刻同期に失敗する場合[確認事項]
一連の流れを試してみて設定や時刻同期が上手くいかない場合、下記を確認してみてください。
- NTPサーバ、クライアント間の通信は可能か(Pingにて疎通確認)
- 無線NW(Wi-Fi)等に接続していないか
- セキュリティソフトやWindowsファイアウォール等か動作してないか
- NTPサーバとクライアントで日時が離れすぎていないか
- PCを一度再起動してみる