タイトル: NTP
SEOタイトル: NTP (Network Time Protocol) とは — Stratum、pool.ntp.org / NICT、ntpd/chronyd、PTP との違い
| この記事の要点 |
|
NTP とは
NTP (Network Time Protocol) は、ネットワーク上のコンピュータの時計を協定世界時 (UTC) に同期させるためのプロトコルです。Mills 教授 (米デラウェア大) が 1985 年に RFC 958 として発表し、現在はNTPv4 (RFC 5905) が広く実装されています。
OSI 参照モデルではアプリケーション層、トランスポートには UDP 123 を使用。インターネット越しでもミリ秒精度、LAN 内なら1 ミリ秒未満の同期を実現します。
なぜ時刻同期が必要か
- ログの相関分析: サーバ間でタイムスタンプがずれていると、障害解析やセキュリティ調査が不可能
- SSL/TLS 証明書: 有効期間チェックに依存。時刻ずれで「証明書の有効期間外」エラー
- Kerberos / 2FA: 5 分以上ずれると認証失敗 (clock skew)
- 分散 DB / ロック: Cassandra や DynamoDB の Last-Write-Wins が誤動作
- 監査 / コンプライアンス: PCI-DSS / SOX / FISC など多くの規格で時刻同期が必須
Stratum 階層
NTP は時刻源を Stratum (層) 0〜16 で表します。数値が小さいほど正確で、上位から下位へと時刻が伝播します。
| Stratum | 例 | 精度 |
|---|---|---|
| 0 | 原子時計 / GPS / 標準電波 | ナノ秒 |
| 1 | Stratum 0 に直結したサーバ (NICT, USNO 等) | マイクロ秒 |
| 2 | Stratum 1 に同期するサーバ (ISP / 社内 NTP) | ミリ秒 |
| 3 | Stratum 2 に同期するサーバ / クライアント | ミリ秒 |
| ... | ... | ... |
| 16 | 未同期 (時刻配信不可) | — |
公開 NTP サーバ
| サーバ | 用途 |
|---|---|
| pool.ntp.org | 世界各国のボランティアサーバプール。DNS ラウンドロビン。国別 (jp.pool.ntp.org / 0-3.pool.ntp.org) もある |
| ntp.nict.jp | 情報通信研究機構 (NICT)。日本標準時 (JST) の原器。商用利用可、無料 |
| ntp.jst.mfeed.ad.jp | インターネットマルチフィード (MFEED) 提供。NICT へ直結する Stratum 1 |
| time.google.com | Google Public NTP。うるう秒スミア対応 |
| time.cloudflare.com | Cloudflare の Public NTP。NTS (NTP Secure) 対応 |
| time.windows.com | Windows 既定。精度は控えめだが OS 標準 |
| time.apple.com | macOS / iOS 既定 |
本番運用では、社内に Stratum 2 を 2-3 台立てて、各サーバ・PC は社内 NTP を参照するのが定石です。外向きの UDP 123 を全マシンから開けずに済み、また DNS や経路障害の影響も小さくなります。
主要実装
| 実装 | 特徴 |
|---|---|
| ntpd (Reference Implementation) | 古典。豊富な機能と長い歴史。CVE が多発した過去あり |
| chronyd | RHEL 8+ / Ubuntu 18.04+ / SUSE 標準。ネットワーク断・仮想化に強い |
| systemd-timesyncd | SNTP のみ。簡易だが軽量。Ubuntu Desktop 既定 |
| ntpsec | ntpd フォーク。コード削減とセキュリティ強化 |
| w32time | Windows 標準。AD ドメインでは DC が NTP サーバを兼ねる |
chronyd の設定例
# /etc/chrony/chrony.conf (Ubuntu) or /etc/chrony.conf (RHEL)
# 上位サーバ (NICT + pool)
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
pool pool.ntp.org iburst maxsources 4
# ローカルからの提供 (NTP サーバとしても動かす場合)
allow 192.0.2.0/24
# RTC を NTP 時刻で更新
rtcsync
makestep 1.0 3 # 起動直後 3 回までは大きくジャンプ可
driftfile /var/lib/chrony/drift
logdir /var/log/chrony# 反映と確認
sudo systemctl restart chronyd
# 現在参照中のサーバ一覧
chronyc sources -v
# トラッキング状態 (offset, jitter, root delay)
chronyc tracking
# ステータス
chronyc activity
# 手動で 1 回強制同期
sudo chronyc -a 'burst 4/4'
sudo chronyc -a makestep
ntpd を使う場合
# /etc/ntp.conf
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
driftfile /var/lib/ntp/ntp.drift
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
# 確認コマンド
ntpq -p
# remote refid st t when poll reach delay offset jitter
# *ntp-a2.nict.go. .NICT. 1 u 12 64 377 3.123 -0.234 0.456
# ↑ ms
# * = 同期源として採用中
# 詳細
ntpstat
ntptime
systemd-timesyncd (軽量 SNTP)
# /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.nict.jp ntp.jst.mfeed.ad.jp
FallbackNTP=pool.ntp.org time.google.com
# 反映
sudo systemctl restart systemd-timesyncd
# 状態
timedatectl
# → Local time: Wed 2026-06-11 12:34:56 JST
# Time zone: Asia/Tokyo (JST, +0900)
# System clock synchronized: yes
# NTP service: active
Windows での時刻同期
# 設定 → 時刻と言語 → 日付と時刻 → 今すぐ同期
# CLI (管理者)
w32tm /config /manualpeerlist:"ntp.nict.jp,0x8 ntp.jst.mfeed.ad.jp,0x8" /syncfromflags:manual /update
Restart-Service w32time
w32tm /resync /force
# 状態確認
w32tm /query /status
w32tm /query /peers
w32tm /query /configuration
# 出力例
# Last Successful Sync Time: 2026/06/11 12:00:00
# Source: ntp.nict.jp
# Phase Offset: 0.0012345s
うるう秒 (Leap Second) の扱い
地球の自転と原子時計のずれを補正するため、UTC には不定期にうるう秒が挿入されます。2017 年 1 月 1 日 08:59:60 JST が直近の例で、これにより多くの分散システムが障害を起こしました。
- 従来式 (ntpd): 23:59:60 という秒を挿入。OS によっては時計が一瞬戻る
- スミア (Smear) 方式: Google / Amazon / Cloudflare などが採用。1 日かけて 1 秒を分散
- 本番システムは、スミア対応サーバ (
time.google.com) に統一するのが安全 - 2035 年以降はうるう秒廃止が国際度量衡総会で決定済み
Time Skew (時刻ずれ) のトラブル例
| 症状 | 原因 | 対処 |
|---|---|---|
| SSL/TLS 証明書エラー | クライアント時刻が証明書発行日より過去 | NTP 同期 |
| Kerberos 認証失敗 (Clock Skew Too Great) | 5 分以上ずれている | chronyd 起動 / makestep |
| 仮想マシン起動直後の大きなジャンプ | ホストとゲストの時刻ずれ | VMware Tools / virtio_clk + chronyd の makestep |
| ログのタイムスタンプが未来 | BIOS RTC が壊れている / タイムゾーンミス | timedatectl set-timezone Asia/Tokyo + 同期 |
| TOTP (Google Authenticator) コード不正 | 30 秒以上ずれている | NTP 同期 |
PTP (Precision Time Protocol) との比較
金融取引・5G 基地局・電力系統など、マイクロ秒精度が必要な領域では IEEE 1588 PTP を使います。
| 観点 | NTP | PTP |
|---|---|---|
| 精度 | 1〜10 ms (WAN), <1 ms (LAN) | マイクロ秒〜ナノ秒 (LAN ハードウェア支援時) |
| 方式 | クライアント主導でサーバから取得 | マスター → スレーブへ Sync 配信 |
| ハードウェア | ソフト処理 | NIC / スイッチに専用回路 (Boundary Clock) |
| 用途 | 一般用 | 金融 (MiFID II), 放送, 5G, 電力 |
FAQ
Q: 起動直後だけ時刻が大きくずれているサーバを直したい
A: chronyd なら makestep 1.0 3 設定で初回 3 回までは大きくジャンプ可。ntpd は ntpd -gq を一度実行してから常駐させると 1 発で合います。
Q: AWS / GCP / Azure 上の VM の時刻同期は?
A: 各クラウドが内部 NTP (例 AWS 169.254.169.123, Google metadata.google.internal) を提供しています。スミア対応・低レイテンシ・課金なしなのでこちらを使うのが最適です。
Q: NTP をインターネット公開して悪用されないか?
A: 旧 ntpd の monlist リフレクション攻撃 (CVE-2013-5211) のように悪用例があります。必要最低限のクライアントだけ allow、未使用機能は restrict default noquery で塞いでください。