NTP/NTSを使用した時刻の同期
- 概要
この記事では、時刻同期の概要と、時刻同期を設定する方法について説明します。
- 目的
タスクやリソースを他のチームメンバーとネットワーク経由で共有する際には、システム時刻の同期を維持することが非常に重要です。
- 所要時間
この記事を理解して、コンピュータで時刻同期の基本的な設定を行うのに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.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
に指示する必要があります。このためには、server
、pool
、およびpeer
のディレクティブを使用します。それぞれを複数回使用できます。
server
ディレクティブは、特定のホストの名前またはIPアドレスを指定して、それをタイムサーバとして使用することをchronyd
に指示します。
server 0.europe.pool.ntp.org offline1 server 1.europe.pool.ntp.org offline prefer2 server 192.168.2.254
| |
|
pool
ディレクティブを使用すると、時間の経過とともに切り替わる複数のIPアドレスに解決されるネットワーク名を指定できます。
pool pool.ntp.org iburst1 maxsources 32
| |
|
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.conf
のrefclock
ディレクティブを使用して、タイムソースとして使用するハードウェア基準時計を指定します。これには、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 詳細情報 #
firewalld
を使用してコンピュータをセキュリティで保護する方法についてはhttps://documentation.suse.com/sles/html/SLES-all/cha-security-firewall.html#sec-security-firewall-firewalldを参照してください。systemd
サービスを操作するすべてのコマンドについてはhttps://susedoc.github.io/doc-modular/main/html/reference-systemctl-enable-disable-services/に説明があります。詳しい情報については、次の関連するマニュアルの該当ページを参照してください。
すべての設定ディレクティブについては
man 1 chrony.conf
を実行してください。すべての
chronyc
コマンドについてはman 1 chronyc
を実行してください。すべての
chronyd
コマンドラインオプションについてはman 8 chronyd
を実行してください。
7 法的事項 #
Copyright © 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。