今回は、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.com | 192.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も開設したのでフォローお願いします。
コメント