documentation.suse.com / NTP/NTSを使用した時刻の同期
SUSE Linux Enterprise Server for SAP applications 16.0

NTP/NTSを使用した時刻の同期

発行日: 04/11/2025
概要

この記事では、時刻同期の概要と、時刻同期を設定する方法について説明します。

目的

タスクやリソースを他のチームメンバーとネットワーク経由で共有する際には、システム時刻の同期を維持することが非常に重要です。

所要時間

この記事を理解して、コンピュータで時刻同期の基本的な設定を行うのに60分ほどを要します。

要件
  • Linuxシステム管理の基本的な知識があること。タスクに応じてroot特権があること。

  • ソースタイムサーバにアクセスするための内部ネットワーク接続またはインターネットへのネットワーク接続が機能していること。

1 概要

コンピュータ上で同期された正確なシステム時間を維持することは、チームワークにとって不可欠です。計画アプリケーションやカレンダアプリケーションは、このようなシステム時刻を利用して時間を正確に追跡し、時間どおりにユーザに予定を通知します。クラスタ化されたアプリケーションでは、多くの場合、ホストマシンどうしが相互に通信するには同期したシステム時刻が必要です。

内蔵ハードウェアクロックは信頼できるタイムソースではありません。システム時刻を手動で修正すると、時刻が突然変化することにより、重要なアプリケーションが誤動作する原因となることがあります。したがって、ネットワークを介して外部の信頼できるタイムソースにシステム時刻が同期している必要があります。

1.1 NTPとは

Network Time Protocol (NTP)は、ネットワークを通じてシステム時刻が同期するように設計されています。NTPの目標は、絶対時間を維持し、それを使用してネットワーク内のすべてのマシンのシステム時刻を同期することです。

1.2 NTSとは

Network Time Security (NTS)は、NTPのセキュリティ拡張機能です。NTSは、NTPメッセージを認証して暗号化するメカニズムを提供し、受信した時刻データが安全で信頼性が高いことを保証します。NTSは、既存のNTPインフラストラクチャと下位互換性があるように設計されています。これにより、NTSをサポートしていない既存のNTPサーバに変更を加えることなく、段階的な展開が可能になります。

1.3 NTPの動作

NTPサービスが適切に設定されている場合、このサービスは信頼できるタイムサーバに継続的に問い合わせ、システム時刻を調整します。一般的に、インターネットに接続された家庭用コンピュータなどのデバイスは、インターネット上のパブリックタイムサーバに問い合わせるように設定されています。

公開タイムサーバに問い合わせる個々のデバイス
図 1: 公開タイムサーバに問い合わせる個々のデバイス

逆に、企業のサブネット内に存在するデスクトップコンピュータやサーバは、ローカルネットワーク内の専用のタイムサーバに問い合わせるように設定されています。このタイムサーバ自体は、公開タイムサーバの時刻に同期しています。

内部タイムサーバに問い合わせる複数のホスト
図 2: 内部タイムサーバに問い合わせる複数のホスト

1.3.1 実装

chronyは、SSUSE Linux Enterprise Server for SAP applicationsにおけるNTPのデフォルト実装です。chronyは次の2つの部分で構成されます。

  • chronyd: 起動時に開始できるsystemdサービスです。

  • chronycは、chronydのパフォーマンスを監視し、実行時に特定の操作パラメータを変更するためのコマンドラインインタフェースプログラムです。

1.4 利点

NTPを使用して正確な時刻を維持することには、次の利点があります。

  • スケジュールに従って行動する場合に時計を利用できます。

  • スケジュール設定したデスクトップアクションやシステムアクションをアプリケーションで正確に開始できます。

  • クラスタノードは、データを同期させて最新の状態に保つことができます。

  • インターネットへのアクセスが制限されているネットワークでは、内部タイムサーバを使用して同期状態のシステム時刻を維持できます。

  • NTSを介してNTPにセキュリティ対策を統合することで、プロトコルの堅牢性を高め、安全でない時刻同期に関連する脆弱性に対処します。

2 /etc/chrony.confの調整によるNTPの設定

chronydを起動すると、/etc/chrony.confファイルから設定が読み込まれます。以下の各セクションでは、chronydの動作に影響すると考えられる重要なパラメータについて説明します。

2.1 タイムソースの指定

コンピュータの時計を同期状態で維持するには、どのタイムソースを使用するかをchronydに指示する必要があります。このためには、serverpool、およびpeerのディレクティブを使用します。それぞれを複数回使用できます。

serverディレクティブは、特定のホストの名前またはIPアドレスを指定して、それをタイムサーバとして使用することをchronydに指示します。

server 0.europe.pool.ntp.org offline1
server 1.europe.pool.ntp.org offline prefer2
server 192.168.2.254

1

offlineオプションを使用すると、chronydからタイムサーバへの問い合わせができなくなります。このオプションは、chronydの開始時にタイムサーバにアクセスできない場合に効果的です。タイムサーバにアクセスできる場合は、chronycを使用してタイムサーバをオンラインにする必要があります。詳細については、3項 「実行時のchronydの管理」を参照してください。

2

preferオプションは、このようなオプションが用意されていないタイムソースよりも、指定のタイムソースを優先的に使用することをchronydに指示します。

poolディレクティブを使用すると、時間の経過とともに切り替わる複数のIPアドレスに解決されるネットワーク名を指定できます。

pool pool.ntp.org iburst1 maxsources 32

1

iburstオプションを指定すると、4~8件の要求のバーストからchronydが開始され、早い段階で時計の最初の更新が発生します。

2

maxsourcesオプションは、プールから使用するソースを最大で3つにすることをchronydに指示します。

peerディレクティブは、タイムサーバの代わりにNTPピアホストを指定します。ピア間のシステム時刻の同期には、serverオプションとpoolオプションで呼び出すクライアント/サーバモードではなく、対称アーキテクチャを使用します。peerを複数回使用して複数のピアを指定できます。

peer 192.168.1.116
peer ntp.example.com

2.2 NTPサーバとしてのchronydの実行

デフォルトでは、指定したNTPサーバのクライアントとしてchronydが機能します。これをNTPサーバとしても使用するには、/etc/chrony.confファイルにallowディレクティブを追加します。NTPサーバポート(デフォルトでは123)を開き、クライアントの要求に応答します。

単一のNTPクライアントのIPを指定できるほか、複数のクライアントを含むサブネットを指定することもできます。allowディレクティブは複数回使用できます。

allow 1.2.3.4
allow 3.4.5.0/24
ヒント
ヒント

IPアドレスやサブネットを指定せずにallowディレクティブを単独で使用すると、すべてのIPv4およびIPv6アドレスからのアクセスを許可します。

記述したallowディレクティブによるアクセスを制限するには、その後にdenyディレクティブを記述します。

allow 1.2.3.4
deny 1.2.3.0/24
allow 1.2.0.0/16

前期の例では、3つのディレクティブの記述順序に関係なく同じ効果が得られます。サブネット1.2.0.0/16はアクセスを許可されますが、サブネット1.2.3.0/24はアクセスを拒否されます。ただし、ホスト1.2.3.4のアクセスは許可されます。

2.3 ローカル基準の時計の設定

chronydは、gpsdなどの他のプログラムを使用して、特定のドライバからタイミングデータにアクセスします。/etc/chrony.confrefclockディレクティブを使用して、タイムソースとして使用するハードウェア基準時計を指定します。これには、2つの必須パラメータ(ドライバ名とドライバ固有のパラメータ)があります。2つのパラメータの後には、ゼロ以上のrefclockオプションが続きます。chronydには、次のドライバが含まれています。

PPS

カーネルのPPS(Pulse Per Second)APIドライバ。次に例を示します。

refclock PPS /dev/pps0 lock NMEA refid GPS
SHM

NTP共有メモリドライバ。次に例を示します。

refclock SHM 0 poll 3 refid GPS1
refclock SHM 1:perm=0644 refid GPS2
SOCK

Unixドメインソケットドライバ。次に例を示します。

refclock SOCK /var/run/chrony.ttyS0.sock
PHC

PTPハードウェア時計ドライバ。次に例を示します。

refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
refclock PHC /dev/ptp1:nocrossts poll 3 pps
ヒント
ヒント

個々のドライバのオプションについて詳しくは、man 8 chrony.confを参照してください。

2.4 オフラインタイムソースの有効化

chronydは、ネットワークに接続されていない状態でブートするシステム上でも正常に起動しますが、/etc/chrony.confで指定されたタイムサーバにはアクセスできません。アクセスできないタイムサーバへのchronydによる問い合わせを防止するには、タイムソースディレクティブに続いてofflineオプションを記述します。次に例を示します。

server ntp.example.org offline

これにより、次のコマンドでサーバのポーリングを有効にしない限り、chronydではサーバがポーリングされません。

# chronyc online ntp.example.org
ヒント
ヒント

offlineオプションの代わりにauto_offlineオプションを設定すると、タイムサーバに2つの要求を送信しても応答がなかった場合、chronydではそのタイムサーバがオフラインになっていると見なされます。このオプションを使用することで、ネットワークリンクを切断するときにchronycからofflineコマンドを実行する必要がなくなります。

3 実行時のchronydの管理

3.1 chronycとは

chronycは、chrony NTP実装のクライアント部分です。chronycコマンドを使用して、実行時にchronydサービスの動作を変更できます。chronydの操作に関するステータスレポートも生成します。

注記
注記: 一時的な変更

chronycを使用して行われた変更は、永続的ではありません。次回のchronydの再起動後に現在の変更内容は失われます。永続的な変更状態とするには、2項 「/etc/chrony.confの調整によるNTPの設定」の説明に従って/etc/chrony.confを変更します。

3.2 chronycの動作

chronycは、対話的モードと非対話的モードのどちらでも実行できます。chronycを対話形式で実行するには、コマンドラインで「chronyc」と入力し、Enterキーを押します。プロンプトを表示し、コマンド入力を待ちます。たとえば、オンラインまたはオフラインのNTPソースの数を確認するには、次のようにactivityコマンドを実行します。

# chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

chronycのプロンプトを終了するには、quitまたはexitを入力します。

対話型プロンプトを使用する必要がない場合は、次のようにコマンドを直接入力します。

# chronyc activity

4 NTSの設定

NTPプロトコルでは、タイムサーバとクライアント間の通信を認証および暗号化するためのセキュリティメカニズムは導入されていません。ネットワークタイムセキュリティ(NTS)は、NTPのセキュリティを強化する拡張機能です。chronyはNTSをサポートし、時間ソースを認証して特定のネットワーク攻撃から保護することができます。

以下の手順では、安全な時刻同期のためにタイムサーバとクライアントマシンを設定する方法について説明します。

手順 1: NTSタイムサーバの設定
  1. (オプション) NTS経由で時刻を更新するようにタイムサーバを設定することをお勧めします。これにより、同期チェーンの最初から安全な時刻同期が保証されます。/etc/chrony.conf内のNTSをサポートしていない既存の時間ソースをコメントアウトし、NTSをサポートする時間ソースを少なくとも1つ追加します。次に例を示します。

    server time.cloudflare.com iburst nts
    ヒント
    ヒント

    ntsオプションは、NTS接続が利用可能な場合はそれを要求し、NTSが利用できない場合はNTPにフォールバックします。

  2. chronydサービスを再起動します。

    > sudosystemctl restart chronyd.service
  3. 設定された時間ソースを確認します。

    > chronyc sources -v
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^? time.cloudflare.com           3   6     1     2   -947ms[ -947ms] +/-   12ms
    ^? pyrrha.fi.muni.cz             2   6     1     1   -948ms[ -948ms] +/-   39ms
    ^* whitesoft-intex16.c.cbsn>     1   6     1     2   -948ms[ -948ms] +/- 5444us
    ^? mail.combatostrich.dev        2   6     1     1   -948ms[ -948ms] +/-   28ms
    注記
    注記

    ^*で始まる行には、最適として選択された時間ソースが含まれます。

    設定された時間ソースがNTSモードを使用していることを確認します。

    > chronyc -N authdata
    Name/IP address             Mode KeyID Type KLen Last Atmp  NAK Cook CLen
    =========================================================================
    [...]
    time.cloudflare.com          NTS     1   15  256    3    0    0    8   96
  4. サーバ設定に、どのクライアントがタイムサーバと時刻を同期できるかを指定する、allowオプションが含まれていることを確認します。次に例を示します。

    allow 192.168.1.0/24
  5. (オプション) タイムサーバがファイアウォールの背後で実行されている場合は、NTPとNTSの両方のポートでの通信を許可します。デフォルトでは123と4460です。

  6. TLS証明書と対応する秘密鍵を取得し、/var/lib/chrony/にコピーします。chronyで読み取り可能であることを確認します。次に例を示します。

    > sudo install -m 0440 -o chrony -g chrony nts.key /var/lib/chrony/
    > sudo install -m 0440 -o chrony -g chrony nts.crt /var/lib/chrony/
    ヒント
    ヒント

    TLS証明書の詳細については、専用の記事をご覧ください。

  7. /etc/chrony.confを編集し、ntsdumpdir /var/lib/chronyオプションがアクティブであることを確認します。次に、TLSキーと証明書へのパスを追加します。

    ntsdumpdir /var/lib/chrony
    ntsserverkey /var/lib/chrony/nts.key
    ntsservercert /var/lib/chrony/nts.crt
  8. chronydサービスを再起動します。

    > sudo systemctl restart chronyd.service
手順 2: NTSクライアントの設定
  1. 既存のNTPソースを無効にします。次に例を示します。

    #server 192.168.1.1 iburst

    ソース設定は、/etc/chrony.confまたは/etc/chrony.d/の下のファイルに含まれています。

  2. クライアントホストは、TLS証明書に署名したルートCAを信頼する必要があります。CA証明書ストアを管理する方法の詳細については、専用の記事をご覧ください。

  3. 手順1「NTSタイムサーバの設定」で設定したNTSタイムサーバソースを、/etc/chrony.confのクライアントchrony設定に追加します。次に例を示します。

    server nts1.example.com iburst nts
  4. chronydサービスを再起動します。

    > sudo systemctl restart chronyd.service
  5. クライアントで設定されたタイムソースを確認し、接続が認証されていることを確認します。

    > sudo chronyc sources -v
    > sudo chronyc -N authdata
  6. NTSタイムサーバで、NTS接続に関するクライアントごとの統計情報を確認します。

    > sudo chronyc -N clients -k

5 chronydsystemdサービス

chronyの主要部分は、バックグラウンドで動作して、選択したタイムサーバとシステム時刻を同期するchronydsystemdサービスです。次のsystemdコマンドを使用してchronydサービスを操作できます。

systemctl status chronyd.service

chronydサービスの現在のステータスに関する詳しい情報を出力します。

systemctl is-enabled chronyd.service

システムをブートするときにchronydサービスが自動的に開始される機能が有効になっているかどうかを確認します。

systemctl enabled chronyd.service

システムをブートするときにchronydサービスが自動的に開始される機能を有効にします。

systemctl disable chronyd.service

システムをブートするときにchronydサービスが自動的に開始される機能を無効にします。

systemctl is-active chronyd.service

chronydサービスが開始されていて実行中かどうかを確認します。

systemctl start chronyd.service

chronydサービスを開始します。

systemctl stop chronyd.service

chronydサービスを停止します。

systemctl restart chronyd.service

chronydサービスを再起動し、/etc/chronyd.confを再ロードします。

6 トラブルシューティング

エラーが発生した場合は以下を確認します。

  • コンピュータがネットワークに接続されていること、およびネットワークが正しく設定されていることを確認します。

    > sudo systemctl status network.service
    ● NetworkManager.service - Network Manager
         Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
    [...]
  • タイムソースとして入力したタイムサーバが存在していて、ネットワーク経由でアクセスできることを確認します。次に例を示します。

    > ping pool.ntp.org
    PING pool.ntp.org (85.199.214.101) 56(84) bytes of data.
    64 bytes from 85.199.214.101 (85.199.214.101): icmp_seq=1 ttl=37 time=29.9 ms
    [...]
  • 使用しているコンピュータ上でfirewalldサービスがアクティブになっている場合は、NTPサービスが許可されていることを確認します。

  • 次のように、chronydサービスが実行されていることを確認します。

    > sudo systemctl status chronyd.service
    ● chronyd.service - NTP client/server
         Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
     [...]
  • 仮想化ゲストのシステム時刻が正確な時刻と異なる場合は、VMホストサーバのシステム時刻が有効なタイムサーバと同期されていること、およびゲストがホストと同じタイムソースと同期されていることを確認します。

  • システムのブートでNTPサービスが正しく起動しない場合は、PortfastではなくEdge Portsとしてポートを設定した状態で、Spanning Tree Protocolを使用するようにネットワークスイッチを設定していることが原因として考えられます。この場合は、ネットワーク接続が確立されるまでに最長で1分程度を要することがあります。

  • NetworkManagerの使用時に、システムブート中にNTPサービスが開始しない場合は、/etc/sysconfig/network/configファイルを編集して、NM_ONLINE_TIMEOUTの値を30に変更します。問題が解決しない場合は、タイムアウトの値を15増やして再試行します。

  • NTPソースにアクセスできない場合は、次のコマンドでソースを特定します。

    > chronyc sources -v
    [...]
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* time.mydomain.com             3  10   377    81  -5354us[-8257us] +/-  191ms
    ^? ntp1.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 77.177.77.177                 0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp3.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp4.example.net              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 2a02:3d8:1::1:1               0   6     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp2.example.org              0  10     0     -     +0ns[   +0ns] +/-    0ns

    この場合、実際に時刻を提供しているサーバはtime.mydomain.comのみです。障害が発生したリモートNTPタイムソースへのネットワーク接続について、一般的なトラブルシューティングも必要です。

7 詳細情報