Ubuntu 22.04とChronyでNTPサーバをつくってみた

どうも、Tです。

Ubuntu 22.04でNTPサーバーを作った備忘録です。

環境

Ubuntu Serverをほぼデフォルトでインストールしたものを使用しています。

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"

これよりの操作はrootユーザーで行っています。

Chrony設定

インストール

Ubuntuは、デフォルトでNTPクライアント機能の提供する「systemd-timesyncd」しか導入されていません。NTPサーバーにしたいので、NTPサーバ・クライアント機能を持っている「chrony」をインストールします。

 # apt -y install chrony

設定

設定を追加していきます。

 # vi /etc/chrony/chrony.conf

外部の参照先NTPサーバを指定します。

デフォルトで用意されていたNTPサーバをコメントアウトして、任意の参照先NTPサーバを追加します。今回は参照先NTPに「ntp.nict.jp」を使いました。

#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2
pool ntp.nict.jp iburst

自身にNTP同期してくるクライアント側のネットワーク範囲を制限します。設定値が用意されていなかったので下記2行を末尾に追記しました。

# AddConfig-Allow NTP Client Access from local network
allow 192.168.10.0/24

chronyサービスを再起動します。

 # systemctl restart chrony

chronyサービスが起動していることを確認します。

 # systemctl status chrony
● chrony.service - chrony, an NTP client/server
Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-07-11 15:52:08 JST; 53s ago
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Process: 2172 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS)
Main PID: 2181 (chronyd)
Tasks: 2 (limit: 9388)
Memory: 1.2M
CPU: 71ms
CGroup: /system.slice/chrony.service
tq2181 /usr/sbin/chronyd -F 1
mq2182 /usr/sbin/chronyd -F 1

同期確認

参照先NTPサーバ(ntp.nict.jp)を同期できていることを確認します。先頭に*がついたものがあれば同期できています。

 # chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp-a3.nict.go.jp 1 6 17 63 -346us[ -346us] +/- 2008us
^- ntp-k1.nict.jp 1 6 17 64 -122us[ -66us] +/- 6423us
^* ntp-a2.nict.go.jp 1 6 37 0 +8803ns[ -86us] +/- 1764us
^- ntp-b2.nict.go.jp 1 6 17 65 -19us[ -58us] +/- 1844u

備考

chronyサービスはインストールした時点で自動起動が有効になっています。

 # systemctl list-unit-files | grep chrony.service
chrony.service enabled enabled

UbuntuはデフォルトでNTPクライアント機能のみ提供する「systemd-timesyncd」がありますが、chronyをインストール時に削除されて下記のような状態になります。

 # systemctl list-unit-files | grep systemd-timesyncd
systemd-timesyncd.service masked enabled

クライアントから動作確認

他のUbuntuサーバを使い、今回設定したNTPサーバに時刻同期が可能か確認します。

デフォルトで導入されているNTPクライアント「systemd-timesyncd」を使います。

設定ファイルを編集していきます。

 # vi /etc/systemd/timesyncd.conf

NTPに設定したNTPサーバのIPアドレスを指定します。

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

systemd-timesyncdサービスを再起動します。

 # systemctl restart systemd-timesyncd

下記のコマンドで時刻同期できていることを確認します。

 # timedatectl timesync-status
Server: 192.168.10.201 (192.168.10.201)
Poll interval: 2min 8s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 85F3EEF3
Precision: 1us (-25)
Root distance: 1.837ms (max: 5s)
Offset: -2.785ms
Delay: 127us
Jitter: 1.052ms
Packet count: 2
Frequency: +41.238ppm

NTPサーバに接続できてない場合、下記のように表示されます。

テストのため存在しないIPアドレス(192.168.10.20)を設定して試したところです。

 # timedatectl timesync-status
Server: 192.168.10.20 (192.168.10.20)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
Packet count: 0

まとめ

NTPサービスっていっぱいあって・・・・ほんと・・・・。