Contents
エッジサーバを使った時刻同期(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です。