【Ubuntu20.04】Chronyを使ってローカル環境のNTPサーバーを構築する

どうも、Tです。

以前、検証用のローカルNTPサーバーをCentOSで作って使っていました。

【CentOS8】Chronyを使ってローカル環境のNTPサーバーを構築する
どうも、Tです。 検証環境でローカルで動作するNTPサーバー(外部のNTPサーバーと同期しない。自分のシステムクロックを用いて...

Stream問題などあり、あーもうCentOS仕事でもつかえねぇな(個人の見解です)となり、検証環境をCentOSからUbuntuへ置き換えています。

ということで、UbuntuでローカルNTPサーバーを作ってみました。

やりたいこと

環境

  • DISTRIB_ID=Ubuntu
  • DISTRIB_RELEASE=20.04
  • DISTRIB_CODENAME=focal
  • DISTRIB_DESCRIPTION=”Ubuntu 20.04.1 LTS”

事前準備

  • OSのインストールは終わってIP設定ができています。

方法

タイムゾーン設定

Ubuntuさんは、インストール初期状態でタイムゾーンがUTCになっています。

kadmin@kadmin:~$ timedatectl
Local time: Sat 2021-08-07 07:23:42 UTC
Universal time: Sat 2021-08-07 07:23:42 UTC
RTC time: Sat 2021-08-07 07:23:42
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

下記コマンドで日本時間(JST)に変更します。

kadmin@kadmin:~$ sudo timedatectl set-timezone Asia/Tokyo

タイムゾーンが変更されたことを確認します。

kadmin@kadmin:~$ timedatectl
Local time: Sat 2021-08-07 16:25:32 JST
Universal time: Sat 2021-08-07 07:25:32 UTC
RTC time: Sat 2021-08-07 07:25:32
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Chronyインストール・設定

chronyをインストールします。

kadmin@kadmin:~$sudo apt install chrony

インストール初期では、下記のメッセージが表示されインストールができない場合あります。その時は、 sudo apt updateをしてからapt installを実行しましょう。

E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/c/chrony/chrony_3.5-6ubuntu6.1_amd64.deb 404 Not Found [IP: 91.189.88.142 80]
E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

Chronyの設定ファイルを変更します。

kadmin@kadmin:~$ sudo vi /etc/chrony/chrony.conf

変更箇所は、下記。

デフォルトで設定されている外部NTPサーバーとの設定をコメントアウトします。

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.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

同期を許可するネットワークセグメントを設定します。デフォルトで項目自体なかったので追記します。

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

NTPサーバー自身(自分自身)が外部のNTPを同期がとれない場合、stratumをいくつで動作するか(クライアントに通知するか)設定します。デフォルトで項目自体なかったので追記します。

# AddConfig- Serve time even if not synchronized to any NTP server.
local stratum 1

Chrony起動設定・確認

chronyの自動起動を有効化しておきます。

kadmin@kadmin:~$ sudo systemctl enable chrony
Synchronizing state of chrony.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable chrony

chronyのstart(起動)もしくはrestart(再起動)しておきます。startした場合は、起動することを確認したのちに、restartしておきましょう。

kadmin@kadmin:~$ sudo systemctl restart chrony

chronyの起動状態がactiveになっていることをを確認します。

kadmin@kadmin:~$ sudo 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 Sat 2021-08-07 16:31:33 JST; 14min ago
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Main PID: 4399 (chronyd)
Tasks: 2 (limit: 1075)
Memory: 1.1M
CGroup: /system.slice/chrony.service
├─4399 /usr/sbin/chronyd -F -1
└─4400 /usr/sbin/chronyd -F -1

chronyのNTPとの同期状態を確認しています。外部NTPの設定をコメントアウトしているので、下記のように外部NTPは表示されません。

kadmin@kadmin:~$ sudo chronyc sources
210 Number of sources = 0
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================

chronyをrestart(再起動)していない場合、下記のように外部NTPと同期されてしまいます。その際は、chronyをrestart(再起動)してchrony.confを再読み込みしておきましょう。

kadmin@kadmin:~$ sudo chronyc sources
210 Number of sources = 8
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================^- pugot.canonical.com 2 6 377 31 -6929us[-6940us] +/- 140ms
^- golem.canonical.com 2 6 377 105 +134us[+6480ns] +/- 129ms
^- chilipepper.canonical.com 2 6 377 42 +1653us[+1642us] +/- 129ms
^- alphyn.canonical.com 2 6 377 107 -7017us[-7144us] +/- 147ms
^- tyo.clearnet.pw 2 6 377 16 -330us[ -342us] +/- 25ms
^* 133.243.238.243 1 6 377 14 +276us[ +264us] +/- 2266us
^- any.time.nl 2 6 377 23 -192us[ -204us] +/- 41ms
^+ i172-105-204-167.poolntp> 3 6 367 30 -169us[ -181us] +/- 3153us

時刻とサービス状態を確認します。System clockはどことも同期されていない状態で、NTP serviceは稼働状態です。

kadmin@kadmin:~$ timedatectl
Local time: Sat 2021-08-07 16:50:02 JST
Universal time: Sat 2021-08-07 07:50:02 UTC
RTC time: Sat 2021-08-07 07:50:02
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: active
RTC in local TZ: no

動作確認

NTPサーバーの時刻を未来時間に設定します。(17:00だったので2分先の17:02を設定してみました。)

kadmin@kadmin:~$ sudo timedatectl set-ntp no
kadmin@kadmin:~$ sudo timedatectl set-time "2021-08-14 17:02:00"
kadmin@kadmin:~$ sudo timedatectl set-ntp yes

timedatectl set-ntp noでNTP同期を無効にしないと下記のように失敗します。NTP同期無効→時間設定→NTP同期有効の手順を踏んでください。

kadmin@kadmin:~$ sudo timedatectl set-time “2021-08-14 17:00:00”
Failed to set time: Automatic time synchronization is enabled

設定した時刻になっていることを確認します。

kadmin@kadmin:~$ sudo timedatectl
Local time: Sat 2021-08-14 17:02:24 JST
Universal time: Sat 2021-08-14 08:02:24 UTC
RTC time: Sat 2021-08-14 08:02:24
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: active
RTC in local TZ: no

あとは、クライアントから設定した時間で同期されることを確認します。

参考

NTPサーバ構築手順 (Ubuntu 20.4編)
vCenterはNTPサーバとDNSサーバと併用する事を前提としています。手っ取り早くvCenterを検証したい方向けに、Ubuntu20.4でNTPサーバを構築する方法をまとめます。
Ubuntu 20.04 LTS Server 日本時間(JST)にタイムゾーン変更手順
CentOSなどはインストール時にタイムゾーンを設定するのですが、Ubuntu 20.04 LTS Server ではインストール時にタイムゾーンを指定する項目がありません。そのためタイムゾーンが日本

まとめ

CentOSとあまり変わらなくてよかったです。