「NTPの仕組みと階層構造(Stratum)を改めて整理したい」
NTP(Network Time Protocol)は、ネットワーク経由で正確な時刻を取得・配布するためのプロトコルです。
ハードウェアクロックは長時間動かすと必ずズレるため、サーバー運用では「NTPによる時刻同期」が事実上必須になります。
この記事では、NTPの基本概念、Stratum階層、ntpdate/ntpdの伝統的な使い方、ntp.conf設定、UDP123ポート、認証付きNTP、各国・各クラウドの推奨タイムサーバーまでを、現役サーバー管理者目線で解説します。
chrony との関係や timedatectl による現代的な時刻管理は別記事に分けているため、本記事では「NTPプロトコル本来の仕組み」に焦点を当てます。
この記事のポイント
・NTPはネットワーク経由で時刻を同期するプロトコル(UDP 123)
・Stratum階層構造で精度を維持。Stratum0が原子時計・GPS
・ntpdateは即時同期、ntpdは継続的な微調整、組織内NTPサーバーは負荷分散に有効
・pool.ntp.org/NICT/各クラウド標準NTPなど用途別の選び方が重要
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
NTPによる時刻設定が必要な理由とプロトコルの基本
コンピューターのハードウェアクロックは、水晶発振器の精度限界・温度変動・電源電圧の影響で、毎日数秒~数十秒のズレを蓄積します。このズレを放置すると、ログのタイムスタンプ整合性が崩れ、TLS証明書の有効期限判定が狂い、Kerberos認証が失敗する、といった実害が発生します。
これを防ぐのがNTP(Network Time Protocol)です。
NTPはRFC 5905で定義されたUDP(ポート123)ベースのプロトコルで、サーバー・クライアント間で時刻情報を交換し、ネットワーク遅延を加味して数ミリ秒~数十ミリ秒の精度で時刻を一致させます。
# NTPで使われるポートを確認 $ ss -unlp | grep :123 UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("ntpd",pid=1234,fd=16))
NTPの階層構造(Stratum 0~15)の仕組み
NTPは「Stratum(ストラタム)」と呼ばれる階層構造を持ちます。これは時刻情報の信頼性を表す指標で、数字が小さいほど一次ソースに近いことを意味します。・Stratum 0:原子時計、GPS受信機、CDMA基地局など物理的な時刻源(一次ソース)
・Stratum 1:Stratum 0に直接同期しているNTPサーバー。NICT、各国標準研究所が運用
・Stratum 2:Stratum 1から時刻を取得しているNTPサーバー。pool.ntp.orgの多くがここに該当
・Stratum 3~15:順次下位のサーバーから取得。組織内NTPサーバーは通常Stratum 3~4になる
・Stratum 16:未同期状態("unsynchronized")
クライアントが上位サーバーから同期すると、自身のStratum値は「上位+1」になります。
たとえばStratum 2のサーバーから時刻を取得しているクライアントは、Stratum 3として動作します。
重要なのは「複数のNTPサーバーを参照すること」です。1台だけだとそのサーバーが故障した時に時刻が狂うため、3~4台のサーバーを設定して相互照合(majority vote)するのがNTPの基本設計です。
ntpdateコマンドによる時刻の即時同期
ntpdateは、NTPサーバーから時刻を一発で取得し、システムクロックを書き換える伝統的なコマンドです。ntpdは継続的に微調整するのに対し、ntpdateは「今すぐ正しい時刻に合わせる」用途で使います。
■書式
ntpdate タイムサーバー名
下記例では、jp.pool.ntp.orgから現在時刻を取得しています。
# rootで実行 # ntpdate jp.pool.ntp.org 18 May 17:50:23 ntpdate[2345]: adjust time server 133.243.238.244 offset +0.012345 sec # 日本標準時を提供するNICT(独立行政法人 情報通信研究機構)を使う場合 # ntpdate ntp.nict.jp
ntpd停止→ntpdate→ntpd起動 の順で実行するか、ntpdate -u(非特権ポート使用)を使います。
なお、ntpdate は ntp プロジェクトでは非推奨(deprecated)扱いになっています。
モダンな環境では
ntpd -gq(gqで一度だけ大きく合わせて終了)か、 chrony の chronyd -q が代替候補です。
ntpd(NTPデーモン)の設定と運用
組織内にNTPクライアントが多い場合、外部NTPサーバーへの問い合わせ集中を避けるため、自前のNTPサーバーを立てて社内のクライアントはそこに同期させる構成が定石です。これは「pool.ntp.orgのルール」でも推奨されており、100台以上のクライアントを持つ環境では必須のマナーです。
1. ntpdの起動・停止
ntpdはinitスクリプトまたはsystemdユニットで管理します。# 起動(古典的なinitスクリプト方式) # /etc/init.d/ntpd start # 起動(systemd方式・RHEL7以降) # systemctl start ntpd # systemctl enable ntpd # 状態確認 # systemctl status ntpd # ntpq -p
ntpq -p は、現在同期している上位サーバーと時刻オフセットを表示する診断コマンドです。「*」が付いているのが現在の同期先(system peer)、「+」が候補、「-」が拒否されたサーバーです。
2. /etc/ntp.confの設定例
NTPサーバーの設定は/etc/ntp.conf ファイルで行います。クロックの誤差を予測した補正情報(drift)は、デフォルトで
/etc/ntp.drift または /var/lib/ntp/drift に保存されます。# vi /etc/ntp.conf server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst # drift ファイルの場所を明示 driftfile /var/lib/ntp/drift # 内部LAN(例:192.168.1.0/24)からの問い合わせを許可 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # その他はデフォルト拒否 restrict default ignore
DNSラウンドロビン(1つのホスト名を複数のIPアドレスに振り分ける仕組み)によって、適当なNTPサーバーに負荷分散されます。
iburst オプションは、起動直後に最大8回パケットを連続送信して同期を高速化するもので、現代のntp.confでは事実上の必須項目です。
3. restrictディレクティブによるアクセス制御
NTPサーバーを公開する場合、適切なrestrict設定がないと「NTPアンプ攻撃」の踏み台にされる危険があります。具体的には
monlist コマンドを使ったDDoS増幅攻撃の歴史があり、現代でも警戒が必要です。
# 推奨設定:デフォルト拒否+特定LANのみ許可 restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
用途別NTPサーバーの選び方(NICT/pool.ntp.org/クラウド標準)
NTPサーバーは用途・地理的位置・クラウド環境によって推奨されるものが異なります。| 用途 | 推奨NTPサーバー |
|---|---|
| 日本国内で公的な精度が必要 | ntp.nict.jp(NICT・Stratum 1) |
| 日本国内の一般用途 | ntp.jst.mfeed.ad.jp / jp.pool.ntp.org |
| AWS EC2インスタンス | 169.254.169.123(Amazon Time Sync Service) |
| Google Cloud(GCP)VM | metadata.google.internal |
| Azure VM | VMホスト経由(time.windows.com) |
| Cloudflare | time.cloudflare.com(NTS対応) |
一般的なサーバー運用ではpool.ntp.orgまたはクラウド事業者の提供するNTPサービスを使うのが推奨されます。
「no server suitable for synchronization found」が出た時の対処法
ntpdateやntpq -pで同期できない時、典型的な原因は3つです。1. UDP 123ポートが塞がれている
ファイアウォール・セキュリティグループでUDP 123(双方向)が許可されているか確認します。クラウドVMで頻発する原因No.1です。
# Outboundのテスト # ntpdate -q ntp.nict.jp server 133.243.238.243, stratum 1, offset +0.001234, delay 0.02834 # firewalldで開ける # firewall-cmd --permanent --add-service=ntp # firewall-cmd --reload
2. 名前解決に失敗している
DNSが動いていないと、pool.ntp.orgが解決できず同期失敗します。IPアドレス直書きで切り分けます。3. NTPサーバー側がアクセス拒否している
restrictディレクティブでクライアントIPが弾かれている、またはサーバー側でレート制限が掛かっているケース。別のNTPサーバーで試してみるのが早道です。
本記事のまとめ
NTPは「ネットワーク経由で時刻を同期する」シンプルなプロトコルですが、Stratum階層・複数サーバー参照・restrict設定など、堅牢な運用のための仕組みが多数組み込まれています。ntpdateで即時同期、ntpdで継続同期、というのが従来の組み合わせでした。現代ではchrony・systemd-timesyncdへの置き換えが進んでいますが、NTPプロトコル自体は引き続き全ての時刻同期の基盤になっています。
| やりたいこと | コマンド |
|---|---|
| NTPで即時同期(伝統的方法) | ntpdate jp.pool.ntp.org |
| NICT(日本標準時)で同期 | ntpdate ntp.nict.jp |
| ntpdの起動 | systemctl start ntpd |
| 同期状態の確認 | ntpq -p |
| UDP123ポートの確認 | ss -unlp | grep :123 |
| NTPサービスの開放(firewalld) | firewall-cmd --permanent --add-service=ntp |
| 設定ファイルの場所 | vi /etc/ntp.conf |
| driftファイル場所 | cat /var/lib/ntp/drift |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます