11.

NTPとは|時刻同期のしくみ・Stratum階層・ntpd/chronyd

編集
この記事の要点
  • 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 で塞いでください。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTTP
  2. HTTPS
  3. DNS
  4. FTP
  5. TFTP
  6. DHCP
  7. SMTP
  8. SNMP
  9. POP3
  10. Telnet
  11. NTP
  12. SSH

最近更新/作成されたページ