この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: NTP
SEOタイトル: NTP (Network Time Protocol) とは — Stratum、pool.ntp.org / NICT、ntpd/chronyd、PTP との違い

この記事の要点
  • NTP (Network Time Protocol) はインターネット上のサーバと時刻を同期するためのプロトコル。1985 年 RFC 958 が起源
  • ポートは UDP 123。サーバとクライアントが同一ポート同士でやり取り
  • 時刻源 (原子時計 / GPS) を Stratum 0 とし、Stratum 1, 2, 3 と階層的に時刻を配る
  • 一般用途は pool.ntp.org、国内では NICT (ntp.nict.jp)、社内では自社で Stratum 2 を立てる
  • 実装は ntpd (古典)、chronyd (RHEL/Ubuntu 新標準)、systemd-timesyncd (軽量)
  • 高精度が必要な金融・5G では PTP (Precision Time Protocol, IEEE 1588) がマイクロ秒精度を提供

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 / 標準電波ナノ秒
1Stratum 0 に直結したサーバ (NICT, USNO 等)マイクロ秒
2Stratum 1 に同期するサーバ (ISP / 社内 NTP)ミリ秒
3Stratum 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.comGoogle Public NTP。うるう秒スミア対応
time.cloudflare.comCloudflare の Public NTP。NTS (NTP Secure) 対応
time.windows.comWindows 既定。精度は控えめだが OS 標準
time.apple.commacOS / iOS 既定

本番運用では、社内に Stratum 2 を 2-3 台立てて、各サーバ・PC は社内 NTP を参照するのが定石です。外向きの UDP 123 を全マシンから開けずに済み、また DNS や経路障害の影響も小さくなります。

主要実装

実装特徴
ntpd (Reference Implementation)古典。豊富な機能と長い歴史。CVE が多発した過去あり
chronydRHEL 8+ / Ubuntu 18.04+ / SUSE 標準。ネットワーク断・仮想化に強い
systemd-timesyncdSNTP のみ。簡易だが軽量。Ubuntu Desktop 既定
ntpsecntpd フォーク。コード削減とセキュリティ強化
w32timeWindows 標準。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 を使います。

観点NTPPTP
精度1〜10 ms (WAN), <1 ms (LAN)マイクロ秒〜ナノ秒 (LAN ハードウェア支援時)
方式クライアント主導でサーバから取得マスター → スレーブへ Sync 配信
ハードウェアソフト処理NIC / スイッチに専用回路 (Boundary Clock)
用途一般用金融 (MiFID II), 放送, 5G, 電力

FAQ

Q: 起動直後だけ時刻が大きくずれているサーバを直したい
A: chronyd なら makestep 1.0 3 設定で初回 3 回までは大きくジャンプ可。ntpdntpd -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 で塞いでください。