手当たり次第に書くんだ

飽きっぽいのは本能

NTP トラブル時に確認すること – chrony、ntpd、timesyncd の整理

この記事は、以前 NTP のトラブルに遭遇したときに調べた内容を、現在の Linux 運用で読みやすいように再整理したものです。

当時の記事は ntpdntpq -p を中心にまとめていましたが、現在は環境によって chronysystemd-timesyncd、従来の ntpd が使い分けられます。そのため、まず「どの時刻同期サービスが動いているのか」を確認してから、同期先、到達性、オフセット、ジッターを見る方が実運用では分かりやすいです。

NTP とは何か

NTP は Network Time Protocol の略で、ネットワーク上の機器が持つ時計を基準時刻に同期するためのプロトコルです。サーバー、ネットワーク機器、仮想基盤、ログ基盤、認証基盤では、時刻のずれがトラブルの原因になります。

NTPv4 は RFC 5905 で仕様化されており、UTC を基準に時刻情報をやり取りします。単に時刻を受け取るだけではなく、通信遅延や複数の時刻源の信頼性を見ながら、ローカルクロックを少しずつ補正します。

最初に確認すること

NTP のトラブルでは、いきなり設定ファイルを見るより、まず現在の同期状態を確認します。Linux では次のように確認します。

timedatectl status

systemctl status chrony --no-pager
systemctl status systemd-timesyncd --no-pager
systemctl status ntp --no-pager

timedatectl は systemd 環境で時刻同期の大まかな状態を見るのに便利です。ただし、詳細な同期先やオフセットは、実際に使っている時刻同期サービス側のコマンドで確認します。

項目見るところ
chrony現在の Ubuntu などで使われることが多い。chronyc で詳細を確認する。
systemd-timesyncd軽量な SNTP クライアント。サーバーとして時刻を配る用途には向かない。
ntpd従来から使われてきた NTP デーモン。ntpq -p で状態を確認する。

stratum の意味

NTP には stratum と呼ばれる階層があります。GPS、標準電波、原子時計などの直接の時刻源は stratum 0 と考えられ、それに直結した NTP サーバーが stratum 1 になります。そこから下位へ参照関係が続くにつれて、stratum の値が大きくなります。

ただし、stratum の数字だけで良い NTP サーバーかどうかは判断できません。実際の精度には、ネットワーク遅延、経路の安定性、パケットロス、サーバーの負荷、複数の時刻源の整合性が関係します。遠い stratum 1 より、近くて安定した stratum 2 の方が扱いやすいこともあります。

chrony で確認する

chrony を使っている場合は、chronyc trackingchronyc sources -v を確認します。Ubuntu では 25.10 以降、標準の時刻同期として chrony が使われるようになっています。

chronyc tracking
chronyc sources -v

tracking では、参照している時刻源、stratum、現在のずれ、周波数補正、root delay、root dispersion などを確認できます。sources -v では、どの時刻源が選択されているか、候補として残っているか、到達できているかを確認できます。

表示意味
^*現在同期に使われている時刻源。
^+有効な候補として残っている時刻源。
^-候補から外された時刻源。
?到達できていない、または状態を判断できない時刻源。

NTP の確認では、単に System clock synchronized: yes だけを見るのではなく、どの時刻源に同期しているのか、オフセットが収束しているのか、複数の時刻源が極端に食い違っていないかを見ることが重要です。

ntpd で確認する

従来の ntpd を使っている場合は、ntpq -p で状態を確認します。古い Linux やアプライアンス、ネットワーク機器では、今でもこの見方が必要になることがあります。

ntpq -p

典型的な出力は次のようになります。

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.example.net  10.0.0.1       2 u  844 1024  377    0.828    0.226   0.108

Tally Code の見方

ntpq -p の先頭に付く記号は Tally Code と呼ばれ、NTP サーバーの選択状態を表します。

記号意味
*sys.peer。現在同期に使われている NTP サーバー。
+candidate。同期候補として有効な NTP サーバー。
#selected。同期距離などの理由で優先度は低いが参照可能な NTP サーバー。
xfalseticker。時刻源として不適切と判断された NTP サーバー。
.excess。候補数が多いなどの理由で使われていない NTP サーバー。
-outlier。クラスタリングの結果、外れ値として扱われた NTP サーバー。
空欄reject。到達性や品質の問題で使われていない NTP サーバー。

正常に同期していれば、いずれかの時刻源に * が付きます。ただし、起動直後はすぐに * にならないことがあります。しばらく待っても同期しない場合は、到達性、設定、時刻差、ファイアウォールを確認します。

ntpq -p の主なフィールド

項目見るところ
remote参照している NTP サーバー。
refidその NTP サーバーが参照している時刻源。GPS、上位 NTP サーバー、または識別子が表示される。
ststratum 値。
when最後に応答を受け取ってからの時間。
poll問い合わせ間隔。同期が安定すると間隔は長くなる。
reach直近 8 回分の到達性を 8 進数で表す。377 は直近 8 回すべて成功を意味する。
delay往復遅延の推定値。単位はミリ秒。
offsetローカルクロックと時刻源のずれ。単位はミリ秒。
jitterオフセットの揺らぎ。小さいほど安定している。

トラブル時に見るポイント

NTP の問題は、「同期していない」という結果だけを見ると原因が分かりにくいです。次の順番で切り分けると整理しやすくなります。

項目見るところ
サービスchronysystemd-timesyncdntpd のどれが動いているか。複数が競合していないか。
到達性UDP 123 番が通るか。外向き通信だけでなく、戻り通信が許可されているか。
名前解決NTP サーバー名が DNS で解決できるか。起動直後に DNS が使えない環境では失敗しやすい。
時刻差初期時刻が大きくずれていないか。TLS、証明書、NTS、認証系にも影響する。
時刻源1 台だけに依存していないか。複数の時刻源が大きく食い違っていないか。
仮想環境ホスト側の時刻、ゲスト OS の同期、VMware Tools や QEMU Guest Agent などの時刻補正が競合していないか。

特に仮想マシンでは、ホスト側の時刻同期とゲスト OS 側の NTP が混ざって見えることがあります。どちらを正本にするかを決め、二重補正にならないように確認します。

NTS も意識する

最近の時刻同期では、NTP のセキュリティを補う NTS も出てきます。Ubuntu の chrony では NTS を使う構成が用意されています。NTS は TLS を使うため、NTP の UDP 123 番だけでなく、鍵交換用の TCP 4460 番が必要になる場合があります。

そのため、NTS を使う環境で同期できない場合は、通常の NTP 到達性だけでなく、NTS 用の通信や証明書検証も確認します。初期時刻が大きくずれていると TLS の検証に影響するため、ブートストラップ用の時刻源が必要になることもあります。

ネットワーク機器の NTP サーバー化について

ネットワーク機器では、「NTP サーバーになれるか」と「自分のローカルクロックを権威ある時刻源として配れるか」を分けて考えた方が分かりやすいです。

Cisco Catalyst などでも、上位 NTP サーバーに同期した時刻を配る構成は可能な場合があります。一方で、ntp master のようにローカルクロックを時刻源として配る機能は、機種や OS、バージョンによって扱いが変わります。

運用上は、ネットワーク機器を時刻源の中心にするより、信頼できる Linux サーバーや専用時刻源を上位に置き、ネットワーク機器はそれを参照する構成の方が管理しやすいです。

参考

RFC 5905 – Network Time Protocol Version 4

Ubuntu Server documentation – Synchronize time using chrony

Ubuntu Server documentation – Synchronize time using timedatectl and timesyncd

chrony documentation – chronyc

まとめ

NTP のトラブルでは、単に時刻が合っているかだけでなく、どのサービスが時刻同期を担当しているのか、どの時刻源を選んでいるのか、到達性やオフセットがどう変化しているのかを見る必要があります。

ntpdntpq -p は今でも有用ですが、現在の Linux では chronysystemd-timesyncd も併せて考える必要があります。時刻同期は地味ですが、ログ、認証、証明書、監視、分散システムの前提になるため、トラブル時には最初に確認する価値があります。

NTP トラブル時に確認すること – chrony、ntpd、timesyncd の整理

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る