documentation.suse.com / SUSE Linux Enterprise Desktopドキュメント / 管理ガイド / サービス / NTPによる時刻の同期
適用項目 SUSE Linux Enterprise Desktop 15 SP7

39 NTPによる時刻の同期

NTP (network time protocol)メカニズムは、システムの時刻をネットワーク上で同期させるためのプロトコルです。最初に、マシンは信頼できる時刻を持つサーバに時刻を照会できます。次に、ネットワーク上の他のコンピュータがこのマシン自体に対し、時刻を照会できます。目的は2つあり、絶対的な時間を維持することと、ネットワーク内のすべてのマシンのシステム時刻を同期させることです。

正確なシステム時刻を維持することはさまざまな場で重要です。ハードウェア組み込み型クロックがデータベースやクラスタなどのアプリケーション要件に合致しないことがよくあります。システムタイムを手動で修正することは時に問題を発生させる可能性があります。たとえば、時間を逆廻りに戻すことで重要なアプリケーションの誤動作を誘発することもあります。ネットワーク内では、すべてのマシンのシステムタイムを同期させることが通常必要とされますが、手動での時刻調整はよい方法ではありません。NTPには、これらの問題を解決するメカニズムがあります。NTPサービスは、ネットワーク内の信頼できるタイムサーバを使用して、システム時間を継続的に調整します。さらに、電波時計のようなローカルリファレンスクロックを管理する機能があります。

SUSE Linux Enterprise Desktop 15以降、chronyは、NTPでデフォルトで実装されるようになりました。chronyは2つの部分で構成されています。chronydは、ブート時に起動可能なデーモンであり、chronycは、chronydのパフォーマンスを監視し、実行時に動作パラメータを変更するためのコマンドラインインタフェースプログラムです。

SUSE Linux Enterprise Desktop 15.2以降、NTPクライアント設定用のYaSTモジュールは、デーモンとして実行するように設定されていない場合に、cronデーモンではなくsystemd-timerを設定し、chronyを実行します。

注記
注記

アクティブディレクトリによる時間同期を有効にするには、Procedure 7.2, “Joining an Active Directory domain using Windows domain membershipにある指示に従います。

39.1 YaSTでのNTPクライアントの設定

chronyパッケージ付属のNTPデーモン(chronyd)は、ローカルコンピュータハードウェアクロックを時間の参照に使用するように事前設定されています。ハードウェアクロックの精度は、その時間ソースに大きく依存します。たとえば、原子時計やGPS受信機は正確な時間ソースですが、一般的なRTCチップは信頼できる時間ソースではありません。YaSTを利用すれば、NTPクライアントを簡単に設定することができます。

YaST NTPクライアント設定(ネットワークサービス › NTP設定)ウィンドウでは、NTPデーモンの開始時期や設定ソースの種類を指定したり、カスタムタイムサーバを追加することができます。

[NTP設定]ウィンドウ
図 39.1: [NTP設定]ウィンドウ

39.1.1 NTPデーモン開始

NTPデーモンを開始する時期は、次の3つのオプションから選択できます。

手動でのみ

手動でのみを選択すると、chronyデーモンが手動で起動します。

デーモンを使用せずに同期する

デーモンを使用せずに同期するを選択すると、永続的に動作するchronyを使用せずに、定期的にシステム時間を設定します。同期間隔(分)を設定できます。

今すぐ開始し、システム起動時に開始するよう設定

システムのブート時に自動的にchronydを起動するには、今すぐ開始し、システム起動時に開始するよう設定を選択します。この設定をお勧めします。

39.1.2 設定元のタイプ

設定元ドロップダウンボックスで、動的または静的のいずれかを選択します。お使いのサーバが(パブリック) NTPサーバの固定セットのみを使用している場合は、静的を設定し、内部ネットワークがDHCP経由でNTPサーバを提供している場合は、動的が適しています。

39.1.3 タイムサーバの設定

NTP設定ウィンドウの下部に、クライアントからの問い合わせ先となるタイムサーバが一覧表示されます。必要に応じて、追加削除、および編集を使用してこのリストを変更します。

新しいタイムサーバを追加するには追加をクリックします。

タイムサーバの追加
図 39.2: タイムサーバの追加
  1. コンピュータの時刻の同期元とするタイムサーバまたはそのプールのURLをアドレスフィールドに入力します。URLを入力したら、テストをクリックして、有効なタイムソースを指していることを確認します。

  2. chronydデーモンの開始時により多くの要求を送信することによって時刻同期を高速化するには、初期同期の高速化を有効にします。

  3. ブート時にchronydデーモンを自動的に開始しインターネットに接続されていない可能性のあるシステムでブート時間を短縮するには、オフライン起動を有効にします。ネットワーク接続がNetworkManagerで管理されているノートパソコンなどで、このオプションが効果的です。

  4. OKをクリックして、確定します。

39.2 ネットワークでのNTPの手動設定

chronyは、その設定を/etc/chrony.confファイルから読み込みます。コンピュータのクロックを同期させるには、使用するタイムサーバをchronyに指示する必要があります。特定のサーバ名またはIPアドレスを使用できます。以下に例を示します。

0.suse.pool.ntp.org
1.suse.pool.ntp.org
2.suse.pool.ntp.org
3.suse.pool.ntp.org

プール名を指定することもできます。プール名は複数のIPアドレスに解決されます。

pool pool.ntp.org
ヒント
ヒント: 同じネットワーク上のコンピュータ

同じネットワーク上の複数のコンピュータで時刻を同期させる場合、それらのコンピュータをすべて外部サーバと同期させることはお勧めしません。1つのコンピュータを、外部のタイムサーバと同期させるタイムサーバとし、他のコンピュータを、クライアントとして機能させることをお勧めします。信頼性のあるタイムサーバと区別するには、サーバの/etc/chrony.conflocalディレクティブを追加します。

local stratum 10

chronyを起動するには、次のコマンドを実行します。

systemctl start chronyd.service

chronydを初期化した後、時間が安定するまでにある程度時間がかかり、ローカルコンピュータクロックを修正するためのドリフトファイルが作成されます。ドリフトファイルを用いることで、ハードウェアクロックの定誤差はコンピュータの電源が入った時点で算出されます。修正はすぐに反映されるため、システム時刻がより安定します。

ブート時にchronyが自動的に起動するようにサービスを有効にするには、次のコマンドを実行します。

systemctl enable chronyd.service
警告
警告: yast-timesync.serviceサービスの競合

chronyd.serviceサービスのほかに、SLEDには、yast-timesync.serviceが含まれています。yast-timesync.serviceは、5分ごとにタイマーによってトリガされ、-qオプションを指定してchronydを実行し、システム時刻を設定して終了します。任意の時点で実行できるchronydのインスタンスは1つのみであるため、chronyd関連のサービスを両方同時に有効化または起動しないでください。

39.3 NTSの設定

ネットワークタイムプロトコル(NTP)は、ネットワーク内の1つ以上のホストのシステム時刻を同期し、正確に保つために使用されるプロトコルです。この記事では、ネットワークタイムセキュリティ(NTS)を使用してNTPを保護する方法について説明します。

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

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

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

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

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

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

    > sudo systemctl restart chronyd.srvice
  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
手順 39.2: NTSクライアントの設定
  1. 既存のNTPソースを無効にします。次に例を示します。

    #server 192.168.1.1 iburst

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

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

  3. 手順39.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

39.4 chronycを使用した実行時のchronydの設定

実行時にchronycを使用してchronydの動作を変更することができます。chronydの操作に関するステータスレポートも生成します。

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

# 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
注記
注記: 一時的な変更

chronycを使用して行われた変更は、永続的ではありません。変更内容は、次のchronydの再起動後に失われます。永続的な変更を行う場合は、/etc/chrony.confを変更してください。

chronycコマンドの完全なリストについては、そのマニュアルページ(man 1 chronyc)を参照してください。

39.5 ランタイム時の動的時刻同期

chronydは、ネットワーク接続なしでブートするシステムでは正常に起動しますが、ツールは設定ファイルで指定されたタイムサーバのDNS名を解決できません。

chronydは、serverpool、およびpeerディレクティブによって指定されたタイムサーバ名を、時間間隔を増やして成功するまで解決しようとします。

chronydの起動時にタイムサーバにアクセスできない場合は、offlineオプションを指定することができます。

server server_address offline

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

# chronyc online server_address

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

39.6 ローカルリファレンスクロックの設定

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

  • 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を参照してください。

39.7 ETR (External Time Reference)とのクロックの同期

ETR(External Time Reference)とのクロック同期のサポートを利用できます。ETRは、2**20(2の20乗)マイクロ秒ごとに、発振器信号と同期信号を送信して、すべての接続先サーバのTODクロックの同期を保ちます。

可用性のため、2ユニットのETRをコンピュータに接続できます。クロックが同期チェックの許容値を超えた場合は、すべてのCPUがマシンをチェックし、クロックが同期していないことを示します。この事態が発生した場合は、XRC対応デバイスへのすべてのDASD I/Oがクロックの再同期まで停止します。

ETRサポートは2つのsysfs属性を介して有効化されます。rootとして次のコマンドを実行します。

echo 1 > /sys/devices/system/etr/etr0/online
echo 1 > /sys/devices/system/etr/etr1/online
Documentation survey