エッジサーバを使った時刻同期(NTPサーバOS: Windows11)

1.概要

PDH(Physical Data Hub)はRaspberry Pi 4を使っています。Raspberry Piは、ハードとしてRTC(Real Time Clock)を持っていません。そのため、常に外部のタイムサーバーと時刻を合わせる必要があります。その時刻合わせの方法は、こちら(タイムサーバーの設定)に記載しています。ただし、これはPDHが外部のインターネットのタイムサーバーにアクセスできることが前提です。
PDHを複数使用するシステムを構築する際には、 PDHはエッジサーバーとともにLANでルーターに接続し、エッジサーバーのみを外部に接続するという構成が、セキュリティ上も都合がよく、よく使われるシステムです。ただし、このシステム構成の場合には、PDHは外部に時刻合わせに行けません。
このようなシステムの場合には、Edge ServerをNTPサーバーとして機能させ、PDHには、タイムサーバーとしてEdge Serverを設定します。この方法で、時刻合わせができます。

ここでは、Windows 11をOSとしたEdge ServerをNTPサーバーを立ち上げ、PDH から時刻合わせをする方法を説明します。

参考HP: 「Windowsを「NTPサーバー」にする手順と自動起動について解説!
    「NTPサーバーと同期がとれない

Windows 11にNTPサーバーを立ち上げる手順は、以下の様になります。
1) レジストリの設定変更:レジストリエディタで3か所修正します。
2) ファイアウォールへ規則追加:時刻同期用にポート123を開けます。
3) w32timeサービスの起動:日付と時刻を同期するためのサービスを起動します。
4) w32timeサービスの常時起動設定:再電源投入後もサービスが起動するように設定します。
5) 時刻合わせの確認をします。:PDHからとWindows PCから確認します。
順に説明していきます。

2.レジストリの設定変更

レジストリエディタで、レジスタを3か所修正します。

① スタートメニューを右クリックしてポップアップメニューから「ファイル名を指定して実行」を選びます。

② “regedit”と入力して、「OK」を押します。

③ [HKEY_LOCAL_MACHINE]->[SYSTEM]->[CurrentControlSet]->[Services]->[W32Time]->[TimeProviders]->[NtpServer]に移動し、[Enabled]をクリックします。

④ 「値のデータ」を“0”から“1”に変更します。変更したら「OK」を押します。1か所目の修正が終了です。

⑤ 次に、2か所目です。[HKEY_LOCAL_MACHINE]->[SYSTEM]->[CurrentControlSet]->[Services]->[W32Time]->[Config]に移動し、[AnnounceFlags]をクリックします。

⑥ 「値のデータ」を“a”から“5”に変更します。変更したら「OK」を押します。2か所目が終了しました。

設定値0x5は、「権限のある時刻サーバとして公開する」という設定になります。

⑦ 最後の3ヶ所目です。2か所目と同じ[HKEY_LOCAL_MACHINE]->[SYSTEM]->[CurrentControlSet]->[Services]->[W32Time]->[Config]の[LocalClockDispersion]の値を“a”から”0”に変更します。クロックの揺らぎを”0”に設定します。
この3か所目は、Windows ntpサーバとLinuxクライアントで時刻同期をする際には必要です。

 

⑧ 以上で、レジストリエディタの設定変更は終了です。レジストリエディタを終了します。

3. Windows Defenderファイアウォールへ規則追加

PDHが時刻同期でアクセスできるように、ファイアウォールのポート:123 を開けます。

① スタートメニューを右クリックして、ポップアップメニューから「システム」を選びます。

② システムメニューから,「プライバシーとセキュリティ」を選択します。
「Windowsセキュリティ」をクリックします。

③「Windowsセキュリティを開く」をクリックします。

④「ファイアウォールとネットワークの保護」をクリックします。

⑤下のほうにある「詳細設定」をクリックします。

⑥ ファイアウォールの設定画面が開きます。左側ペインで「受信の規則」をクリックします。 次に右のペインで「新しい規則」をクリックします。

⑦ 受信の規則ウェイザードが起動します。ポート:123を開けますのでポートを選択し、ポートの規則を作成します。「次へ」を押します。

⑧ 「UDP」を選択します。「特定のローカル ポート」を千t鳴くし、ポート番号 “123”を入力します。「次へ」を押します。

⑨ 「接続を許可する」を選択します。「次へ」を押します。

⑩環境に合わせて選択します。ここでは、「ドメイン」と「プライベート」を選択します。「次へ」を押します。

⑪ 適当な名前を入力します。「完了」を押します。

⑫ 入力した名前で新しい規則ができています。以上で、ファイアウォールの新規規則の作成が完了です。終了します。

4. w32timeサービスの起動

w32timeサービスとは、ネットワーク上のコンピューターの日付と時刻を同期するためのサービスで、w32timeサービスを起動することで、NTPサーバーに設定したWindowsにアクセスするネットワーク上のコンピューターの時計を同期して合わせることができます。

① スタートメニューから、すべてのアプリを選び、Windowツールを開きます。コマンドプロンプトのアイコンをを右クリックして「管理者として実行」で開きます。

② w32timeサービスを起動します。
起動コマンド:> net start w32time
停止コマンド:> net stop w32time

 > net start w32time
と入力して、サービスは正常に開始されましたと表示されればOKです。

5. w32timeサービスの常時起動設定

上記のコマンドプロンプトで起動しただけでは、PCを起動のたびにw32timeサービスを起動しないといけません。自動的に、起動するようにサービスの設定を変えます。

① スタートメニューから、すべてのアプリを選び、Windowツールを開きます。サービスをダブルクリックします。

② サービス一覧の中から、「Windows Time」を探して、ダブルクリックします。

③ Windows Timeのプロパティが開きますので、「スタートアップの種類」を“自動(遅延開始)”に変えます。「OK」を押します。
以上で、設定は完了です。

④ コマンドプロンプトでサービスの設定を確認できます。
コマンドプロンプトを管理者権限で開きます。

sc queryex W32Time

と入力します。STATEで状態がわかります。ここでは実行中です。

sc qc W32Time

で、起動設定が確認できます。自動(遅延起動)になっています。

6. 時刻合わせの確認(PDHから接続)

① PDHから時刻合わせにいくPCのIPアドレスを調べます。

ipconfig
を実行します。ここでは、192.168.20.03です。

② PDH側の設定を行います。詳細はこちら(タイムサーバーの設定)を参照ください。
timesyncd.conf を修正します。
NTPサーバのIPアドレスを設定します。ここでは、192.168.20.03です。
修正したら、保存、終了します。

③ timesyncdサービスを再起動します。
まず、sudo systemctl daemon-reload で設定を読み直します。
次に、sudo systemctl restart systemd-timesyncd.service で再起動します。
④ 同期が取れたか確認します。
systemctl status systemd-timesyncd.service
Status: “synchronized to … 192.168.20.3:123
と表示されており、同期が取れました。

⑤  timedatectl コマンドでも確認します。

7. 時刻合わせの確認(Windowsから接続)

① スタートメニューから「設定」をクリックし、「時刻と言語」をクリックします。「日付と時刻」を選びます。
② その中の「別のタイムゾーンの時計を追加する」をクリックします。

③ 「インターネット時刻」のタブを選択し、「設定の変更」をクリックします。

④ サーバの欄に、ntpサーバのアドレスを入力し、「今すぐ更新」をクリックします。
下に、「時刻は正常に・・・と同期しました」と出ればOKです。