NTPによる時刻設定|Stratum階層と ntpdate/ntpd の使い方

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「サーバーの時刻がいつのまにかズレている…」
「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など用途別の選び方が重要


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

ntpdateの注意点として「実行時にntpdが動いていると、ポート123が使用中で失敗する」というケースがあります。
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

上記例の pool.ntp.org は、世界中のボランティアが提供する複数のNTPサーバーをまとめて仮想的なNTPサーバーとして運用しているプロジェクトです。
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対応)
NICTは公的機関が運営する精度Stratum 1のサーバーで、信頼性が高い反面、過度なアクセスは控えるべきです。
一般的なサーバー運用では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

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。