【Linux】Ubuntu 18.04のNTPの挙動を確認してみた

Linux
スポンサーリンク

今回は、Ubuntu 18.04でNTPクライアントの挙動を確認しました。

NTPクライアントとは

NTPクライアントはOSの時刻同期を取り扱うコンポーネントの一つです。
NTPは、NTPサーバから提供される時刻をクライアントに反映するための仕組みで、OSの時刻を同期し、OSの時刻を常に正しい時刻に合わせる機能を持ったソフトウェアがNTPクライアントです。
NTPはNetwork Time Protocolの略で、OSI参照モデルのアプリケーション層で実装されるプロトコルで、基本ポート123で通信を行うプロトコルです。

前提条件

今回、NTPサーバについては自宅に用意しているNTPサーバへ同期を行います。
また、Ubuntu18.04の時刻同期にはsystemd-timesyncdを使用して設定を行います。(ntpdate等をインストールしていなければデフォルトで実行されています。)

NTPクライアントとして動作する仮想マシンは以下の通りです。

  • CPU : 2vCPU
  • MEM : 4GB
  • DISK : 60GB
  • IP : 192.168.100.180
  • Hostname : dev-ubt18-ntp

NTPサーバとして設定する先のIPアドレスは以下の通りです。
この設定値については、設定する環境に読み替えて設定してください。

  • NTP Server1 : 192.168.100.230 (dev-ntp01)
  • NTP Server2 : 192.168.100.231 (dev-ntp02)

本来であれば、Ubuntu 18.04については、インストール時にntp.ubuntu.comと時刻同期を行っているため、クライアントOS側で意識的にNTPサーバを指定する必要はありませんが。企業等で内部NW内にNTPサーバが存在する場合など、指定がある場合にはNTPクライアントの設定を変更する必要があります。

また、今回はSSH接続をおこない、CLIで設定変更をしていきます。

NTPクライアント同期確認

設定変更を行うUbuntu 18.04に対しSSHを行うか、ターミナルを起動します。
timedatectl statusコマンドで、現在時刻と同期状態を確認します。

> timedatectl status
                      Local time: Sat 2022-05-21 02:52:09 UTC → 現在の地域の時刻
                  Universal time: Sat 2022-05-21 02:52:09 UTC → 世界標準時
                        RTC time: Sat 2022-05-21 02:52:08 → ハードウェアクロック
                       Time zone: Etc/UTC (UTC, +0000) → タイムゾーン
       System clock synchronized: yes → 同期状態
systemd-timesyncd.service active: yes → NTPクライアントの稼働状態
                 RTC in local TZ: no → ハードウェアクロックをローカルタイムゾーンに合わせるか

現在時刻と同期状態を確認したら、systemd-timesyncdの状態を確認していきます。

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) → NTPクライアントの設定が読み込まれているか。
   Active: active (running) since Sat 2022-05-21 02:59:18 UTC; 18s ago → systemd-timesyncdサービスが動作しているか。
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2006 (systemd-timesyn)
   Status: "Synchronized to time server ntp.ubuntu.com:123 (91.189.91.157)." → NTPサーバのアドレスと同期状態
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq2006 /lib/systemd/systemd-timesyncd

NTPクライアント設定値確認

NTPクライアントの状態確認が完了したらNTPクライアントの設定確認をしていきます。
timesyncd.confを編集する際には、root権限が必要になります。
Ubuntu 18.04のNTPクライアントの設定は以下のパスにあります。

/etc/systemd/timesyncd.conf

デフォルトの設定は以下の通りになります。

#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP= → NTPサーバのアドレスを設定
#FallbackNTP=ntp.ubuntu.com → NTPサーバが指定されていない場合に同期を行うNTPサーバを設定
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

今回は、以下のように設定を変更しました。

#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
NTP= 192.168.100.230 192.168.100.231
FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

設定の変更箇所は2カ所で、[Time]セクション内にある#NTP=のコメントアウトを外し、NTPサーバのIPアドレスまたはFQDNを設定します。
複数のNTPサーバがある場合には、スペースで区切ります。
2カ所目は、#FallbackNTP=ntp.ubuntu.comのコメントアウトを外しました。
これは、NTPの設定が定義されていない場合に利用されるNTPサーバを定義するらしいです。詳しくはこちら

NTPクライアントの挙動確認

NTPサーバの設定をいろいろと変えてみて、NTPクライアントの同期状態の挙動確認を行ってみました。検証したパターンは以下の通りとなります。

検証パターンNTPサーバ設定FallbackNTP設定結果
1. 実在するNTPサーバの設定パターン192.168.100.230 (NTPサーバ1)192.168.100.231 (NTPサーバ2)192.168.100.230 (NTPサーバ1)と同期される
2. 実在しないNTPサーバの設定パターン192.168.100.232 (未使用IP)192.168.100.231 (NTPサーバ2)同期されない
3. 複数NTPサーバを設定するパターン192.168.100.230 (NTPサーバ1)、192.168.100.231 (NTPサーバ2)ntp.ubuntu.com192.168.100.230 (NTPサーバ1)と同期される
4. 複数NTPサーバを設定し、Primaryが存在しないパターン192.168.100.232 (未使用IP)、
192.168.100.230 (NTPサーバ1)
192.168.100.231 (NTPサーバ2)192.168.100.231 (NTPサーバ2)と同期される
5. NTPサーバを設定せず、FallbackNTPのみ設定するパターンなし192.168.100.231 (NTPサーバ2)192.168.100.231 (NTPサーバ2)と同期される
検証パターン

1. 実在するNTPサーバの設定パターン

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-21 02:59:57 UTC; 3s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2058 (systemd-timesyn)
   Status: "Synchronized to time server 192.168.100.230:123 (192.168.100.230)."
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq2058 /lib/systemd/systemd-timesyncd

この場合は、設定どおり、NTPサーバ1と同期しています。

2. 実在しないNTPサーバの設定パターン

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-21 02:59:18 UTC; 18s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2006 (systemd-timesyn)
   Status: "Idle".
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq2006 /lib/systemd/systemd-timesyncd

存在しないNTPサーバを設定し、FallbackNTPは存在するパターンの場合、Connectionが続き最終的にはNTPサーバへの接続がタイムアウトしました。これもGitHubでの回答通りでFallbackNTPはNTPサーバが未定義の場合のみ同期されるようです。
StatusはIdleとなっていました。

3. 複数NTPサーバを設定するパターン

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-21 02:56:12 UTC; 3s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 1881 (systemd-timesyn)
   Status: "Synchronized to time server 192.168.100.230:123 (192.168.100.230)."
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq1881 /lib/systemd/systemd-timesyncd

複数のNTPサーバを設定した場合、初めに記載したNTPサーバがPrimaryとなり優先的に同期されるようです。

4. 複数NTPサーバを設定し、Primaryが存在しないパターン

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-21 02:55:35 UTC; 2s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 1846 (systemd-timesyn)
   Status: "Synchronized to time server 192.168.100.231:123 (192.168.100.231)."
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq1846 /lib/systemd/systemd-timesyncd

複数のNTPサーバを設定し、PrimaryのNTPサーバと疎通が取れていない場合、Connectingが続いた後に、正常にSecondaryのNTPサーバへと接続されました。

5. NTPサーバを設定せず、FallbackNTPのみ設定するパターン

> sudo systemctl status systemd-timesyncd.service

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-21 02:54:10 UTC; 55s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 1808 (systemd-timesyn)
   Status: "Synchronized to time server 192.168.100.231:123 (192.168.100.231)."
    Tasks: 2 (limit: 4632)
   CGroup: /system.slice/systemd-timesyncd.service
           mq1808 /lib/systemd/systemd-timesyncd

NTPサーバを定義しない場合は、FallbackNTPの設定が反映されるようです。

まとめ

今回は、Ubuntu18.04でNTPクライアント設定の挙動確認を行いました。
NTPクライアントの設定は複数のNTPサーバを指定し、FallbackNTPについては設定しなくても問題ないという結論に至りました。
Ubuntu18.04では、NTPクライアントの設定は記載順にPrimaryとSecondaryの設定となり、Primaryがダウンした場合や、Primaryと疎通がどれない場合には、NTPクライアントが自動的にSecondaryへ再接続してくれるようです。
Secondaryもタイムアウトすると、NTPクライアントはIdleとなり、同期を行いません。
明示的にNTPサーバを設定しない場合はデフォルトでntp.ubuntu.comと同期を行うようですが、NTPの設定をしてNTPサーバの定義していない場合の挙動を記載するのはどうかなと思います。

おまけ

本ブログではVMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
また、Youtubeで解説動画も鋭意作成中です。本ブログで記事にしているものも動画にしようと思っておりますので、よろしくお願いいたします。
willserverのnoteも開設したのでフォローお願いします。

コメント

タイトルとURLをコピーしました