同期先の NTP サーバーを変更する
Ubuntu 26.04 LTS Server の時刻同期は chrony が担当します。既定では Canonical が運用する NTP サーバー(ntp.ubuntu.com)に同期していますが、社内に NTP サーバーを置いている環境ではそちらへ向ける必要があります。
ここでは、同期先の変更、同期状態の読み方、ずれた時計の直し方、自分を NTP サーバーにする手順を扱います。chrony が動いていることの確認だけであればタイムゾーン設定と時刻同期にまとめています。
chrony の設定ファイルの構成
設定は /etc/chrony/chrony.conf 1枚ではなく、ディレクトリに分かれています。
| パス | 役割 |
|---|---|
/etc/chrony/chrony.conf | 本体。sourcedir と confdir で下の2つを読み込む |
/etc/chrony/sources.d/*.sources | 同期先の定義。既定の ubuntu-ntp-pools.sources が置かれている |
/etc/chrony/conf.d/*.conf | 追加の設定。利用者はここにファイルを置く |
/run/chrony-dhcp/ | DHCP で受け取った NTP サーバー。sourcedir で読み込まれる |
本体の chrony.conf は編集しません。 conf.d/ にファイルを1枚置くのが Ubuntu での作法です。パッケージ更新で本体が置き換わっても設定が残ります。
ls /etc/chrony/conf.d/ /etc/chrony/sources.d/kazulog@sv1:~$ ls /etc/chrony/conf.d/ /etc/chrony/sources.d/
/etc/chrony/conf.d/:
README kazulog-ntp.conf ubuntu-nts.conf
/etc/chrony/sources.d/:
README ubuntu-ntp-pools.sources拡張子が .conf / .sources のファイルだけが読み込まれます。既定の定義を止めたいときは、ファイルを消さずに拡張子を変えれば無効化できます。
社内 NTP サーバーを追加する
conf.d/ に設定ファイルを作り、chrony を再起動します。
sudo tee /etc/chrony/conf.d/kazulog-ntp.conf <<'EOF'
# 社内 NTP サーバー(R1)を使う
server 192.168.100.1 iburst
EOF
sudo systemctl restart chronyserver と pool は指定の仕方が違います。
| ディレクティブ | 意味 |
|---|---|
server <アドレス> | そのアドレス1つを同期先にする。社内サーバーはこちら |
pool <名前> | 名前解決で返る複数のアドレスを同期先にする。maxsources で上限を指定する |
iburst | 起動直後に短い間隔で4回問い合わせる。同期開始が数分から数秒に縮む |
追加した直後の状態です。
chronyc sources -v
chronyc trackingkazulog@sv1:~$ chronyc sources -v | tail -8
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.100.1 3 6 17 34 +1487ms[+1493ms] +/- 1942ms
^+ ntp-nts-2.ps5.canonical.> 2 6 17 39 +11ms[ +17ms] +/- 118ms
^* ntp-nts-3.ps5.canonical.> 2 6 17 38 +14ms[ +21ms] +/- 119ms
^- ntp-nts-2.ps6.canonical.> 2 6 17 38 -41ms[ -41ms] +/- 172ms
^+ ntp-nts-3.ps6.canonical.> 2 6 17 38 -40ms[ -34ms] +/- 168ms
^- ntp-nts-1.ps5.canonical.> 2 6 17 39 +14ms[ +20ms] +/- 120ms
kazulog@sv1:~$ chronyc tracking
Reference ID : B97DBE7B (ntp-nts-3.ps5.canonical.com)追加しただけでは同期先は切り替わりません。 既定の5台が残っているため、chrony は多数決と精度で最良のものを選びます。先頭の ^? は「まだ使えない」という印です。
chronyc sources の先頭2文字の読み方は次のとおりです。
| 表示 | 意味 |
|---|---|
^ | サーバー(= はピア、# はローカルクロック) |
* | 現在同期しているサーバー |
+ | 同期に使える候補。複数あれば合成される |
- | 候補から外れている |
? | 使えない。到達していないか、精度の情報が足りない |
x | falseticker。他のサーバーと食い違っている |
既定の同期先を止めて社内サーバーだけにする
既定の定義ファイルの拡張子を変えて、読み込まれないようにします。
sudo mv /etc/chrony/sources.d/ubuntu-ntp-pools.sources /etc/chrony/sources.d/ubuntu-ntp-pools.sources.disabled
sudo mv /etc/chrony/conf.d/ubuntu-nts.conf /etc/chrony/conf.d/ubuntu-nts.conf.disabled
sudo systemctl restart chronyubuntu-nts.conf は NTS(Network Time Security)用の証明書を指定しているファイルで、Canonical のサーバーを使わないなら一緒に無効化して構いません。
kazulog@sv1:~$ ls /etc/chrony/conf.d/ /etc/chrony/sources.d/
/etc/chrony/conf.d/:
README kazulog-ntp.conf ubuntu-nts.conf.disabled
/etc/chrony/sources.d/:
README ubuntu-ntp-pools.sources.disabled
kazulog@sv1:~$ chronyc sources -v | tail -3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.100.1 3 6 17 39 +75us[ +264us] +/- 68ms
kazulog@sv1:~$ chronyc tracking
Reference ID : C0A86401 (192.168.100.1)
Stratum : 4
Ref time (UTC) : Fri Sep 11 07:27:54 2026
System time : 0.000000200 seconds slow of NTP time
Last offset : +0.000188777 seconds
RMS offset : 0.000188777 seconds
Frequency : 5.242 ppm fast
Residual freq : -26.357 ppm
Skew : 8.059 ppm
Root delay : 0.004248492 seconds
Root dispersion : 0.067712799 seconds
Update interval : 2.0 seconds
Leap status : NormalReference ID が社内サーバーになりました。chronyc tracking の主な項目です。
| 項目 | 意味 |
|---|---|
Reference ID | 同期先。16進表記は IPv4 アドレスそのもの(C0A86401 = 192.168.100.1) |
Stratum | 自分の階層。同期先の値に1を足したもの |
System time | システムクロックと NTP 時刻の差。小さいほどよい |
Last offset / RMS offset | 直近の補正量と、その二乗平均 |
Frequency | クロックの進み方のずれ(ppm)。chrony が補正し続けている量 |
Leap status | Normal なら正常。Not synchronised は同期が取れていない |
同期先の素性は chronyc ntpdata で見られます。このコマンドは sudo が必要です(tracking / sources / sourcestats は不要)。
kazulog@sv1:~$ sudo chronyc ntpdata 192.168.100.1 | head -12
Remote address : 192.168.100.1 (C0A86401)
Remote port : 123
Local address : 192.168.100.10 (C0A8640A)
Leap status : Normal
Version : 4
Mode : Server
Stratum : 3
Poll interval : 6 (64 seconds)
Precision : -10 (0.000976562 seconds)
Root delay : 0.000000 seconds
Root dispersion : 0.002197 seconds
Reference ID : 7F7F0101 ()timedatectl の System clock synchronized も yes になります。
kazulog@sv1:~$ timedatectl
Local time: Fri 2026-09-11 16:35:40 JST
Universal time: Fri 2026-09-11 07:35:40 UTC
RTC time: Fri 2026-09-11 07:35:40
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no大きくずれた時計を直す
chrony は通常、時計を少しずつ進める/遅らせる(slew)ことで合わせます。時刻が飛ぶとログの前後関係が壊れるためです。時計を一気に合わせる(step)のは本体の設定で回数が制限されています。
makestep 1 31秒を超えるずれがあれば、起動後3回目の更新まではステップしてよい、という意味です。逆に言えば、それ以降にずれた場合は自動ではステップしません。
意図的に5分ずらしてみます。
sudo date -s '+5 minutes'kazulog@sv1:~$ date
Fri Sep 11 16:29:38 JST 2026
kazulog@sv1:~$ sudo date -s '+5 minutes'
kazulog@sv1:~$ chronyc tracking
Reference ID : 00000000 ()
Stratum : 0
Ref time (UTC) : Thu Jan 01 00:00:00 1970
System time : 0.000000000 seconds fast of NTP time
Last offset : -0.000318293 seconds
RMS offset : 0.000318293 seconds
Frequency : 5.095 ppm fast
Residual freq : +0.000 ppm
Skew : 0.000 ppm
Root delay : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 65.2 seconds
Leap status : Not synchronised
kazulog@sv1:~$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 192.168.100.1 3 6 77 14 +300.0s[+300.0s] +/- 6109us時刻が飛んだことを chrony が検知して同期が外れ、Leap status が Not synchronised になりました。同期先には 300 秒のずれが見えています。
しばらく待つと同期先は選び直されますが、ずれは残ったままです。
kazulog@sv1:~$ date
Fri Sep 11 16:38:40 JST 2026
kazulog@sv1:~$ chronyc tracking
Reference ID : C0A86401 (192.168.100.1)
Stratum : 4
Ref time (UTC) : Fri Sep 11 07:33:24 2026
System time : 292.156341553 seconds fast of NTP time
Last offset : +0.000182769 seconds
RMS offset : 89.999153137 seconds
Frequency : 4.617 ppm fast
Residual freq : -5.942 ppm
Skew : 16.834 ppm
Root delay : 0.004045914 seconds
Root dispersion : 0.004102858 seconds
Update interval : 65.0 seconds
Leap status : NormalSystem time が 292 秒のままです。makestep 1 3 の3回を使い切っているため、chrony は slew で少しずつ縮めようとします。slew の最大速度は既定で実時間の 12 分の1(maxslewrate 83333.333)に制限されているため、292 秒のずれを消すには1時間近くかかります。実測でも約1分で 297.7 秒から 292.2 秒までしか縮んでいません。
このときに使うのが chronyc makestep です。次の更新時に slew ではなくステップで補正させます。
sudo chronyc makestepkazulog@sv1:~$ date
Fri Sep 11 16:39:04 JST 2026
kazulog@sv1:~$ sudo chronyc makestep
200 OK
kazulog@sv1:~$ date
Fri Sep 11 16:34:17 JST 2026
kazulog@sv1:~$ chronyc tracking
Reference ID : C0A86401 (192.168.100.1)
Stratum : 4
Ref time (UTC) : Fri Sep 11 07:33:24 2026
System time : 0.000000000 seconds fast of NTP time
Last offset : +0.000182769 seconds
RMS offset : 89.999153137 seconds時計が 16:39:04 から 16:34:17 に戻り、System time が 0 になりました。journalctl にも記録が残ります。
sudo journalctl -u chrony --since "-15 min" --no-pagerkazulog@sv1:~$ sudo journalctl -u chrony --since "-15 min" --no-pager | tail -8
Sep 11 16:27:52 sv1 chronyd[3650]: System clock was stepped by -1.485292 seconds
Sep 11 16:27:52 sv1 chronyd[3650]: System clock TAI offset set to 37 seconds
Sep 11 16:34:58 sv1 chronyd[3650]: Forward time jump detected!
Sep 11 16:34:58 sv1 chronyd[3650]: Can't synchronise: no selectable sources (0 unreachable sources)
Sep 11 16:35:24 sv1 chronyd[3650]: System clock was stepped by -0.000000 seconds
Sep 11 16:37:13 sv1 chronyd[3650]: Selected source 192.168.100.1
Sep 11 16:37:13 sv1 chronyd[3650]: System clock wrong by -299.997180 seconds
Sep 11 16:34:14 sv1 chronyd[3650]: System clock was stepped by -289.988321 seconds最終行が makestep による補正です。時刻が戻ったため、ログの行の並びとタイムスタンプが逆転しています(16:37:13 の次が 16:34:14)。ステップさせるとこうなるので、稼働中のサーバーでは影響を確認してから実行してください。
chronyc makestep の補正は、次のポーリングのときに行われます。同期先が選ばれていない状態で実行しても、ずれが分からないため何も起きません(上のログの stepped by -0.000000 seconds がそれです)。自分を NTP サーバーにする
chrony はクライアントとサーバーを兼ねます。allow で問い合わせを受け付ける範囲を指定するだけです。
echo 'allow 192.168.100.0/24' | sudo tee -a /etc/chrony/conf.d/kazulog-ntp.conf
sudo systemctl restart chronykazulog@sv1:~$ cat /etc/chrony/conf.d/kazulog-ntp.conf
# 社内 NTP サーバー(R1)を使う
server 192.168.100.1 iburst
allow 192.168.100.0/24
kazulog@sv1:~$ ss -ulpn | grep 123
UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
kazulog@sv1:~$ sudo chronyc clients
Hostname NTP Drop Int IntL Last Cmd Drop Int Last
===============================================================================
192.168.100.20 6 0 1 - 52 0 0 - -allow を書くと 123/udp で待ち受けるようになります。chronyc clients に問い合わせてきたホストが並び、NTP 列が受け取ったパケット数です。
クライアント側(sv2)の設定は同じ書き方です。
kazulog@sv2:~$ cat /etc/chrony/conf.d/kazulog-ntp.conf
# 社内 NTP サーバー(sv1)を使う
server 192.168.100.10 iburst
kazulog@sv2:~$ chronyc sources -v | tail -3
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.100.10 4 6 37 0 +639ns[-1262us] +/- 6986us
kazulog@sv2:~$ chronyc tracking
Reference ID : C0A8640A (192.168.100.10)
Stratum : 5ルータ(stratum 3)→ sv1(stratum 4)→ sv2(stratum 5)と階層が1つずつ下がります。
設定を元に戻す
追加したファイルを消し、無効化したファイルの拡張子を戻します。
sudo rm /etc/chrony/conf.d/kazulog-ntp.conf
sudo mv /etc/chrony/sources.d/ubuntu-ntp-pools.sources.disabled /etc/chrony/sources.d/ubuntu-ntp-pools.sources
sudo mv /etc/chrony/conf.d/ubuntu-nts.conf.disabled /etc/chrony/conf.d/ubuntu-nts.conf
sudo systemctl restart chronykazulog@sv1:~$ chronyc sources -v | tail -7
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp-nts-2.ps5.canonical.> 2 6 17 36 +13ms[ +28ms] +/- 119ms
^+ ntp-nts-3.ps5.canonical.> 2 6 17 36 +13ms[ +28ms] +/- 120ms
^- ntp-nts-2.ps6.canonical.> 2 6 17 35 -42ms[ -42ms] +/- 173ms
^* ntp-nts-3.ps6.canonical.> 2 6 17 35 -26ms[ -11ms] +/- 154ms
^- ntp-nts-1.ps5.canonical.> 2 6 17 35 +11ms[ +11ms] +/- 116ms
kazulog@sv1:~$ chronyc tracking | head -3
Reference ID : 5BBD5B71 (ntp-nts-3.ps6.canonical.com)検証環境と実行ログ
CML 上に Ubuntu 26.04 LTS Server 2台(sv1 / sv2)と Cisco ルータ(R1)を置き、R1 を NTP サーバーとして実際に同期させて採取しました。
sv1 (Ubuntu 26.04) sv2 (Ubuntu 26.04) R1 (IOS XE 17.03.08a)
ens3 192.168.100.10 ens3 192.168.100.20 Gi2 192.168.100.1/24
stratum 4 stratum 5 ntp master 3(stratum 3)
allow 192.168.100.0/24
| | |
+-----------------------+------- LAB-SW --------+R1 側は ntp master 3 だけでローカルクロックを基準にした NTP サーバーになります。
| 手順 | 実行ログ | 設定ファイル | syslog |
|---|---|---|---|
| 初期状態(既定の同期先) | show | conf | log |
| 社内 NTP サーバーを追加 | show | conf | log |
| 既定の同期先を無効化 | show | conf | log |
| 時計を5分ずらす | show | conf | log |
| ずれを検知した状態 | show | conf | log |
| makestep で補正 | show | conf | log |
| 同期が戻ったことの確認 | show | conf | log |
| sv1 を NTP サーバーにする | show | conf | log |
| sv2 を sv1 に同期させる | show | conf | log |
| 既定に戻す(最終状態) | show | conf | log |
NTP サーバーとして動かした R1 の記録です。検証Configはこの ..._run.txt です。
| R1 | show出力 | syslog | running-config |
|---|---|---|---|
| NTP サーバーとして動作中 | show | log | run |
参考リンク
関連記事
- Ubuntu 26.04 LTS Server のホスト名の変更(hostnamectl)
- Ubuntu 26.04 LTS Server のパッケージ更新(apt update / upgrade)
- Ubuntu 26.04 LTS Server のタイムゾーン設定と時刻同期
- Ubuntu 26.04 LTS Server のユーザー作成と sudo 権限の設定
- Ubuntu 26.04 LTS Server の SSH サーバー設定(公開鍵認証)
- Ubuntu 26.04 LTS Server のサービス管理(systemctl)とログ確認(journalctl)
- Ubuntu 26.04 LTS Server の自動更新設定(unattended-upgrades)
- Ubuntu 26.04 LTS Server の初期設定を自動化する(cloud-init)
- Ubuntu 26.04 LTS Server のカーネルパラメータ設定(sysctl)
- Ubuntu 26.04 LTS Server のネットワーク設定(Netplan)
- Ubuntu 26.04 LTS Server の名前解決設定(systemd-resolved)
- Ubuntu 26.04 LTS Server の NTP 同期先の変更(chrony)
- Ubuntu 26.04 LTS Server のスタティックルート設定(Netplan)
- neovim 公式サイトから最新バージョンをインストールする手順 Ubuntu 26.04 LTS Server