目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / NTP/NTSを使用した時刻の同期

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

発行日: 20/03/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 実装

SUSE Linux Microでは、chronyが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 chronyd systemdサービス

chronyの主要部分は、バックグラウンドで動作して、選択したタイムサーバとシステム時刻を同期するchronyd systemdサービスです。次の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を再ロードします。

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

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

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

    > 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タイムソースへのネットワーク接続について、一般的なトラブルシューティングも必要です。

6 詳細情報