プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2022/09/29

NTP サーバー/クライアント chrony の設定

update2023/07/27 event_note2022/09/29 8:12

chrony を使って NTP サーバー、NTP クライアントのぞれぞれを設定してみました。

環境

  • Ubuntu 20.04
  • chrony 3.5

インストール

$ sudo apt install chrony

NTP サーバーとしての設定

/etc/chrony/chrony.conf をエディタで編集します。

$ sudo nano /etc/chrony/chrony.conf

上位サーバーの無効化

17行目〜20行目をコメントアウトします。

#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

認証の無効化

24行目をコメントアウトします。

#keyfile /etc/chrony/chrony.keys

アクセス許可

特定のセグメントからのみアクセスを許可したい場合は以下のように追記します。

# Allow NTP client access from local network.
allow 192.168.4.0/24

全セグメントから許可シたい場合は allow とだけ記載するようです。

上位の NTP サーバーがいなくても同期を取れるようにする

以下を追記します。

# Serve time even if not synchronized to a time source.
local stratum 5

再起動

設定が完了したら chrony を再起動します。

$ sudo systemctl restart chrony

NTP クライアントとしての設定

/etc/chrony/chrony.conf をエディタで編集します。

$ sudo nano /etc/chrony/chrony.conf

17行目〜20行目をコメントアウトし、pool <NTPサーバーのIPアドレス> iburst> を追記します。

#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 192.168.0.10 iburst

時刻同期について

以下のページが参考になりました。

chrony は iburst オプションの付いた NTP サーバーに対して、起動直後に短い間隔で4回問い合わせをするそうです。 また、デフォルトでは makestep 1 3 の設定がありますが、これは chrony の起動時に、1.0 秒以上時刻ずれが 3 回続いた場合、step モードで一気に時刻補正をするという意味だそうです。 そうでない場合は slew モードで少しずつ時刻補正を行うそうです。

再起動

設定が完了したら chrony を再起動します。

$ sudo systemctl restart chrony

確認

chronyc sources を実行し、サーバー名の最初に * と表示されていれば同期が取れています。

$ chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 192.168.0.10                  5   6   377    34  -7277ns[-2447ns] +/-   41us

ちょっとはまったところ

きちんと同期がとれているか確認するために、サーバー側の日時を Ubuntu の GUI で変更し、クライアントの PC を再起動してみましたが、同期されませんでした。
何でだろうと思っていたら、日時を GUI で変更したときに chrony のサービスが停止していました。

chrony が動いているかどうかは以下のコマンドで確認できます。

$ sudo systemctl status chrony

もし chrony が停止していた場合は、以下のコマンドで起動します。

$ sudo systemctl start chrony

この状態でクライアントの PC を再起動したら、起動時に日時が同期されました。

もし PC 再起動後に chrony が停止していた場合は有効化されていないので、以下のコマンドを実行します。

$ sudo systemctl enable chrony