メインコンテンツへスキップ
  1. Linux 関連記事一覧/
  2. Ubuntu 26.04 LTS Server/

Ubuntu 26.04 LTS Server の NTP 同期先の変更(chrony)

目次

同期先の 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本体。sourcedirconfdir で下の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 chrony

serverpool は指定の仕方が違います。

ディレクティブ意味
server <アドレス>そのアドレス1つを同期先にする。社内サーバーはこちら
pool <名前>名前解決で返る複数のアドレスを同期先にする。maxsources で上限を指定する
iburst起動直後に短い間隔で4回問い合わせる。同期開始が数分から数秒に縮む

追加した直後の状態です。

同期先の確認コマンド
chronyc sources -v
chronyc tracking
社内サーバーを追加した直後 実行例
kazulog@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文字の読み方は次のとおりです。

表示意味
^サーバー(= はピア、# はローカルクロック)
*現在同期しているサーバー
+同期に使える候補。複数あれば合成される
-候補から外れている
?使えない。到達していないか、精度の情報が足りない
xfalseticker。他のサーバーと食い違っている

既定の同期先を止めて社内サーバーだけにする

既定の定義ファイルの拡張子を変えて、読み込まれないようにします。

既定の同期先を無効化するコマンド
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 chrony

ubuntu-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     : Normal

Reference 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 statusNormal なら正常。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 ()

timedatectlSystem clock synchronizedyes になります。

timedatectl での確認 実行例
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)のは本体の設定で回数が制限されています。

chrony.conf の該当行
makestep 1 3

1秒を超えるずれがあれば、起動後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 statusNot 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     : Normal

System 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 makestep
makestep による補正 実行例
kazulog@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 にも記録が残ります。

chrony のログ確認コマンド
sudo journalctl -u chrony --since "-15 min" --no-pager
chrony のログ 実行例
kazulog@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 で問い合わせを受け付ける範囲を指定するだけです。

NTP サーバーとして公開するコマンド
echo 'allow 192.168.100.0/24' | sudo tee -a /etc/chrony/conf.d/kazulog-ntp.conf
sudo systemctl restart chrony
NTP サーバーとしての確認 実行例
kazulog@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 chrony
既定に戻した状態 実行例
kazulog@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
初期状態(既定の同期先)showconflog
社内 NTP サーバーを追加showconflog
既定の同期先を無効化showconflog
時計を5分ずらすshowconflog
ずれを検知した状態showconflog
makestep で補正showconflog
同期が戻ったことの確認showconflog
sv1 を NTP サーバーにするshowconflog
sv2 を sv1 に同期させるshowconflog
既定に戻す(最終状態)showconflog

NTP サーバーとして動かした R1 の記録です。検証Configはこの ..._run.txt です。

R1show出力syslogrunning-config
NTP サーバーとして動作中showlogrun

参考リンク

chrony documentation

関連記事

Ubuntu 公式ページ