どうも、Tです。
以前、検証用のローカルNTPサーバーをCentOSで作って使っていました。
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
あとは、クライアントから設定した時間で同期されることを確認します。
参考
まとめ
CentOSとあまり変わらなくてよかったです。