Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.6

18 NTP を利用した時刻同期 Edit source

概要

NTP (Network Time Protocol) はネットワークを介してシステムの時刻を同期させるためのプロトコルです。まず、コンピュータは信頼できる時刻の発信源となるサーバから、時刻を取得します。次にコンピュータ自身が時刻の発信源となって、ネットワークに時刻を提供します。つまり、目的は 2 つ存在することになります。絶対時刻を管理することと、ネットワーク内にある全マシンの時刻を同期させることです。

システム時刻の正確性は、様々な状況下で重要となります。内蔵のハードウエア時計は、データベースやクラスタなどのアプリケーションの要件に適合するほど正確なものではありませんし、だからといって手作業で時刻を修正してしまったりすると、時刻が逆戻りすることによって、重要なアプリケーションの動作に問題が発生したりしてしまいます。ネットワークに接続されているコンピュータであれば、通常は全てのマシンのシステム時刻を同期させる必要がありますが、この場合も手作業での修正は好ましくありません。 NTP ではこれらの問題を解決する仕組みを備えています。 NTP では、ネットワーク経由でシステムの時刻を信頼できる時刻に少しずつ調整する仕組みを提供しています。このほか、ラジオ制御の時計など、ローカルの参照時計を管理する機能もあります。

openSUSE Leap 15 以降では、 chrony が NTP の既定の実装になっています。 chrony は 2 種類のパーツから構成されています。 1 つは chronyd と呼ばれるデーモンで、システムの起動時に開始されるものです。もう 1 つは chronyc と呼ばれるもので、 chronyd の状態を監視したり、動作中に様々なパラメータを変更したりするためのコマンドラインインターフェイスです。

openSUSE Leap 15.2 以降では、 YaST モジュールの NTP クライアントは chrony をデーモンを使用せずに実行するよう設定する際、 cron デーモンではなく systemd-timer を使用するようになっています。

注記
注記

Active Directory を利用して時刻同期を行う場合は、 手順7.2「Windows ドメインメンバーシップ を利用した Active Directory ドメインへの参加」 に示されている手順に従ってください。

18.1 YaST を利用した NTP クライアントの設定 Edit source

chrony パッケージに付属する NTP デーモン (chronyd) は、ローカルコンピュータのハードウエア時計を参照先として使用するように事前設定されています。ハードウエア時計の正確さは、その時刻の発信源に大きく依存しています。たとえば原子時計や GPS レシーバは非常に正確な時刻源となりますが、一般的な PC に搭載されている RTC チップは、信頼できる時刻源とは言えません。このような場合は、 YaST を利用して時刻同期を行ってください。

YaST NTP クライアント設定 ( ネットワークサービス › NTP 設定 ) のウインドウでは、 NTP デーモンの起動のタイミングや設定元の種類、そして独自のタイムサーバの指定を行うことができます。

NTP 設定ウインドウ
図 18.1: NTP 設定ウインドウ

18.1.1 NTP デーモンの開始 Edit source

NTP デーモンの起動については、下記のいずれかを選択することができます:

手動でのみ起動

必要な場合にのみ chrony デーモンを手作業で起動したい場合は、 手動でのみ起動 を選択してください。

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

chrony を恒久的に起動したりせず、定期的にシステム時刻を設定したい場合は、 デーモンを使用せずに同期する を選択してください。なお、 同期間隔 [分] で間隔を指定することもできます。

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

システムの起動時に chronyd を開始したい場合は、 今すぐ開始し、システム起動時に開始するよう設定 を選択してください。こちらを選択しておくことをお勧めします。

18.1.2 設定元の種類 Edit source

設定元 のドロップダウンボックスでは、 動的 または 静的 のいずれかを選択します。お使いのサーバが固定の (公開されている) NTP サーバを利用する場合は 静的 を、 DHCP を介して NTP サーバの情報を提供しているネットワークの場合は 動的 を選択してください。

18.1.3 タイムサーバの設定 Edit source

時刻の問い合わせ先となるタイムサーバの設定は、 NTP 設定 ウインドウの下半分に書かれています。この一覧は、 追加 , 編集 , 削除 の各ボタンで変更することができます。

新しいタイムサーバを追加するには、 追加 を押します:

タイムサーバの追加
図 18.2: タイムサーバの追加
  1. アドレス 欄には、そのマシンの同期先となるタイムサーバの URL か、タイムサーバのプールの URL を指定します。入力が終わったら テスト を押すと、タイムサーバとの通信を確認することができます。

  2. chronyd の起動時に多くの要求を送信して同期を高速化するには、 初期同期の高速化 を選択します。

  3. オフライン起動 を選択すると、システムの起動時に chronyd を素早く起動することができます。これは、システムの起動時にインターネットに接続できない環境のほか、 NetworkManager でネットワーク接続を管理しているような場合に便利な機能です。

  4. OK を押して閉じます。

18.2 ネットワーク内での NTP の手動設定 Edit source

chronyd/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

下記のようにして pool (プール) を指定することもできます。プールは複数の IP アドレスに展開される仕組みです:

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

同じネットワーク内にある複数のコンピュータの時刻を同期するにあたっては、それら全てを外部のサーバと同期させる構成はお勧めできません。その代わりに、いずれか 1 台のコンピュータを外部のタイムサーバと同期させ、残りのコンピュータをそのコンピュータに同期させることをお勧めします。この場合は、サーバ側の /etc/chrony.conf 内に local ディレクティブを指定して、信頼できるタイムサーバと区別するようにしてください:

local stratum 10

chrony を開始するには、下記のように実行します:

systemctl start chronyd.service

chronyd の準備が完了すると、時刻が安定して受信され、ローカルコンピュータの時計の調整を行うためのドリフトファイルが作成されるまで、しばらくの時間がかかります。ドリフトファイルは、コンピュータが起動されてからのハードウエア時計のズレの計算結果を表したファイルです。補正は直ちに開始されるため、これによってシステム時刻の安定性を高めるようになっています。

システムの起動時に chrony サービスを開始するには、下記のように実行します:

systemctl enable chronyd.service
警告
警告: yast-timesync.service サービスとの競合について

chronyd.service に加えて、 openSUSE Leap には yast-timesync.service という名前のサービスが含まれています。 yast-timesync.service はタイマーで 5 分おきに動作するよう設定され、 chronyd-q オプションを付けて動作させたあと、終了するようになっています。ただし、 chronyd は同時に 1 つまでしか起動できない仕様であることから、 chronyd サービスを動作させている場合は、このサービスを有効化または起動してはなりません。

18.3 chronyc による動作中の chronyd の設定 Edit source

chronyd の動作中に何らかの変更を行いたい場合は、 chronyc を使用することができます。 chronyc では、 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 ) をお読みください。

18.4 動作中の動的な時刻同期 Edit source

システムの起動時にネットワークの接続が利用できないような環境では、 chronyd は起動できるものの、設定ファイル内に書かれたタイムサーバの DNS 名が解決できないことになります。

chronyd では server , pool , peer の各ディレクティブで指定したタイムサーバ名を、成功するまで間隔を増やしながら解決を試みます。

chronyd の起動時にはタイムサーバに接続できないことがわかっている場合は、下記のようにして offline オプションを指定してください:

server サーバアドレス offline

上記のように設定すると、 chronyd は下記のコマンドを送信するまで、サーバへの問い合わせを行わないようになります:

# chronyc online サーバアドレス

なお、 auto_offline オプションを指定すると、 chronyd はタイムサーバに対して 2 回リクエストを送信しても応答がない場合、そのタイムサーバがオフライン状態にあるものと判断するようになります。これにより、ネットワーク接続が切れている状態でも 'offline' コマンドを実行する必要がなくなります。

18.5 ローカル参照時計の設定 Edit source

ソフトウエアパッケージ chrony は、他のプログラム (たとえば gpsd ) を利用して SHM や SOCK ドライバ経由でタイミングデータを取得することができます。 /etc/chrony.conf 内に refclock ディレクティブを指定することで、ハードウエア参照時計を同期先として使用することができます。このディレクティブには、 2 種類の必須パラメータがあります。 1 つはドライバ名で、もう 1 つはドライバ固有のパラメータです。 2 つのパラメータは 0 個以上の 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 をお読みください。

このページを印刷