第18章 chrony スイートを使用した NTP 設定
IT では、多くの理由で正確な時間の維持が重要です。たとえばネットワーキングでは、パケットとログのタイムスタンプが正確であることが必要になります。Linux システムでは、NTP
プロトコルがユーザー領域で実行しているデーモンにより実装されます。
ユーザー領域のデーモンは、カーネルで実行しているシステムクロックを更新します。システムクロックは、さまざまなクロックソースを使用して時間を維持します。一般的に使用されるのは Time Stamp Counter (TSC) です。TSC は、最後にリセットされた時点からのサイクル数を計測する CPU レジスターです。非常に高速でハイレゾリューションであり、中断も発生しません。
デーモンは、ntp と chrony の各パッケージにあるリポジトリーで利用できる ntpd
デーモンと chronyd
デーモンから選びます。
本章では、chrony スイートの使い方について説明します。
18.1. chrony スイートの概要
Chrony は Network Time Protocol (NTP) の実装です。Chrony を使用すると、以下のことができます。
-
システムクロックを、
NTP
サーバーと同期する - システムクロックを、GPS レシーバーなどの基準クロックと同期する
- システムクロックを、手動で入力した時間と同期する
-
ネットワーク内の他のコンピューターにタイムサービスを提供する
NTPv4(RFC 5905)
サーバーまたはピアとして
chrony は、ネットワーク接続が頻繁に切断される、ネットワークの混雑が長時間続く、温度が変わる (一般的なコンピューターのクロックは温度に敏感) といったさまざまな状況や、継続して実行されない、または仮想マシンで実行されているといったシステムにおいても、良好に動作します。
インターネット上で同期している 2 つのマシン間の一般的精度は数ミリ秒以内、LAN 上のマシン間では数十マイクロ秒以内です。ハードウェアのタイムスタンプまたはハードウェア基準クロックは、同期している 2 つのマシン間の精度をサブマイクロ秒レベルにまで高めることができます。
Chrony は、ユーザー領域で実行する chronyd
と、chronyd
のパフォーマンスを監視し、実行時にさまざまなオペレーティングパラメーターを変更するのに使用できるコマンドラインプログラムである chronyc で構成されます。
18.1.1. ntpd と chronyd の相違点
ntpd
より chronyd
が優れている点:
-
chronyd
は、時間参照へのアクセスが途切れやすい環境でも良好に機能します。一方ntpd
は、良好に機能するためには時間参照の定期的なポーリングを必要とします。 -
chronyd
はネットワークの混雑が長時間にわたる場合でも機能します。 -
chronyd
は通常、クロックをより高速に、より高い精度で同期できます。 -
chronyd
は、水晶振動子の温度変化などによってクロックのレートが突然変更しても素早く適応します。一方、ntpd
の場合は、落ち着くまでに時間がかかる場合があります。 -
デフォルト設定では、
chronyd
は実行中の他のプログラムが発生しないように、システムの起動時にクロックを同期した後には時間をステップしません。ntpd
は時間をステップできないように設定することも可能ですが、クロックを調整する別の方法を使用する必要があります。これは、クロックの精度にマイナスの影響を含む短所があります。 -
chronyd
は Linux 上のクロックのレートを幅広い範囲で調整できるため、たとえば仮想マシン上など、壊れたクロックもしくは不安定なクロックのあるマシン上でも操作が可能になります。たとえば、一部の仮想マシン。 -
chronyd
の方が小型でメモリ使用量が少なく、必要なときだけ CPU を起動させるので、省電力性に優れています。
chronyd
ができて、ntpd
にできないこと。
-
chronyd
は、時間補正の方法がクロックを監視している管理者などによる手動入力のみである隔離されたネットワークにサポートを提供します。たとえば、管理者がクロックを探します。chronyd
は、異なる更新時に修正されたエラーを検証し、コンピューターの時刻が進んだり遅れたりする時点のレートを予測して、この予測を使用してその後のコンピュータークロックの調整を行います。 -
chronyd
は、たとえばコンピューターの電源を切った後も作動し続けるクロックのような、リアルタイムクロックの時間の増減率の計算をサポートしています。このデータがあれば、システムの起動時に、リアルタイムクロックから取得した適合された時間の値を使用してシステム時間を設定できます。これらのリアルタイムクロック機能が利用できるのは、現在 Linux のシステムのみです。 -
chronyd
は Linux のハードウェアタイムスタンプに対応しており、ローカルネットワークにおける非常に精度の高い同期を可能にしています。
ntpd
ができて、chronyd
にできないこと。
-
ntpd
は、ブロードキャスト、マルチキャスト、メニーキャストのクライアントやサーバーなど、NTP
バージョン 4 (RFC 5905) のすべてのオペレーティングモードに対応しています。ただし、ブロードキャストとマルチキャストの各モードは、認証はされても、本来、一般的なサーバーやクライアントのモードと比べて精度と安全性が低いため、通常は回避することが推奨されます。 -
ntpd
は、公開鍵暗号でサーバーを認証する Autokey プロトコル (RFC 5906) に対応します。ただし、このプロトコルは安全性が低いことが実証されており、将来 Network Time Security (NTS) 仕様の実装に置き換えられる可能性があるため注意してください。 -
ntpd
には多くの基準クロックのドライバーが含まれています。一方のchronyd
は、共有メモリー (SHM) または Unix ドメインソケット (SOCK) を使用して基準クロックのデータにアクセスするために、gpsd のような他のプログラムに依存しています。
18.1.2. NTP デーモンの選択
Chrony は、chrony に対応していないツールで管理または監視されているシステムや、chrony と互換性のないハードウェア基準クロックを搭載しているシステムを除いた、すべてのシステムに推奨されます。
Autokey
は ntpd
プロトコルをサポートしていないため、このプロトコルを使ってパケット認証を行う必要があるシステムには chronyd
しか使用できません。Autokey
プロトコルには重大なセキュリティ上の問題があるため、使用を回避することが推奨されます。Autokey
の代わりに、chronyd
と ntpd
の両方でサポートされる対称鍵で認証を使用します。Chrony は SHA256 や SHA512 といったより強力なハッシュ関数に対応しています。一方、ntpd
が使用できるのは MD5 と SHA1 のみです。
18.2. chrony の概要および設定
18.2.1. chronyd および chronyc について
chrony デーモンである chronyd
は、コマンドラインユーティリティーの chronyc を使用して監視と管理を行います。このユーティリティーは、chronyd
の現在の状態に対してクエリーを実行し、その設定を変更する多数のコマンド入力を可能にするコマンドプロンプトを提供します。デフォルトでは、chronyd
は chronyc のローカルインスタンスのコマンドのみを受け付けますが、リモートホストから監視コマンドを受け付けるように設定することも可能です。リモートアクセスは制限する必要があります。
18.2.2. chrony 設定コマンドの概要
chronyd
のデフォルト設定ファイルは /etc/chrony.conf
です。その他のオプションは man ページ -f
をご覧ください。その他のオプションについては chronyd
の man ページを参照してください。使用できるディレクティブの完全なリストは、http://chrony.tuxfamily.org/manual.html#Configuration-file を参照してください。
以下は、chronyd
設定オプションの一部です。
- コメント
- コメントの前には、#、%、;、または ! を付けます。
- allow
-
必要に応じて、
NTP
サーバーとして動作しているマシンへのNTP
接続が許可されるホスト、サブネット、またはネットワークを指定します。デフォルトでは、接続は許可されません。以下に例を示します。
allow 192.0.2.0/24
特定のネットワークへのアクセスを許可するときにこのコマンドを使用します。
allow 2001:0db8:85a3::8a2e:0370:7334
このコマンドを使用して、IPv6
へのアクセスを付与します。
クライアントアクセスを可能にするため、ファイアウォールで UDP ポート番号 123 を開いておく必要があります。
+
~]# firewall-cmd --zone=public --add-port=123/udp
ポート 123 を永続的に開きたいときは、--permanent
オプションを使用します。
+
~]# firewall-cmd --permanent --zone=public --add-port=123/udp
- cmdallow
-
allow
ディレクティブ (allow
セクションを参照) と似ていますが、特定のサブセットまたはホストへの制御アクセスを許可します (これはNTP
クライアントアクセスとは異なります)。「制御アクセス」とは、chronyc がこのようなホストで実行可能であり、このコンピューターでchronyd
に正常に接続できることを意味します。 構文は同じになります。cmdallow all
ディレクティブと似た動作を持つcmddeny all
ディレクティブもあります。 - dumpdir
-
chronyd
を再起動しても測定履歴を保存するディレクトリーへのパスです (これが実行していない時にシステムクロックの動作が変更されていないことを想定しています)。(設定ファイルのdumponexit
コマンド、chronyc のdump
コマンドから) この機能を使用する場合は、dumpdir
コマンドを使用して測定履歴を保存するディレクトリーを定義してください。 - dumponexit
-
このコマンドが存在する場合は、プログラムの終了時に、
chronyd
が、常に記録された各時間ソースの測定履歴を保存することを示しています。(上記のdumpdir
コマンドでは、以下のようになります)。 - hwtimestamp
-
hwtimestamp
ディレクティブは、ハードウェアのタイムスタンプで非常に精度の高い同期を可能にします。詳細はchrony.conf(5)
の man ページを参照してください。 - local
local
キーワードは、現在の同期ソースがない場合でも、(それをポーリングしているクライアントから見ると)chronyd
がリアルタイムに同期しているように見えるようにします。このオプションは、通常、孤立したネットワークで「master」となるコンピューターで使用されます。ここでは、いくつかのコンピューターが相互に同期するようになり、「master」は、手動入力でリアルタイムと一致させます。以下はコマンド例を示します。
local stratum 10
10 という大きな値が示しているのは「基準クロックからのホップ数が非常に多いため、時間の信頼性が低い」ということです。基準クロックに最終的に同期している別のコンピューターにアクセスするコンピューターは、確実に 10 よりも下の階層に存在することになります。このため、
local
コマンドで 10 のように高い値を設定すると、リアルサーバーの視認性があるクライアントにリークしたとしても、マシン自体の時間がリアルタイムと混同することを防ぎます。- log
log
コマンドは、特定情報がログに記録されることを意味します。以下のオプションを取ります。- measurements
-
このオプションは、生の
NTP
測定値と関連情報をと呼ばれるmeasurements.log
ファイルに記録します。 - statistics
-
このオプションは、回帰処理の情報を
statistics.log
ファイルにログ記録します。 - tracking
-
このオプションは、システムの時間が進んだり遅れたりする予測に対する変更や、発生した slew 調整を、
tracking.log
と呼ばれるファイルにログ記録します。 - rtc
- このオプションは、システムのリアルタイムクロックに関する情報をログ記録します。
- refclocks
-
このオプションは、生およびフィルター処理された基準クロックの測定を、
refclocks.log
ファイルにログ記録します。 - tempcomp
このオプションは、温度測定とシステムレートの補正を、
tempcomp.log
と呼ばれるファイルにログ記録します。ログファイルは、
logdir
コマンドが指定するディレクトリーに書き込まれます。以下はコマンド例を示します。
log measurements statistics tracking
- logdir
このディレクティブは、ログファイルが書き込まれるディレクトリーを指定します。
このディレクティブの使用例は、以下のようになります。
logdir /var/log/chrony
- makestep
通常、
chronyd
は、必要に応じてクロックの速度を下げるかまたは上げることで、システムに対して時間オフセットの段階的修正を実施します。特定の状況では、このスルーイング (slewing) プロセスでシステムクロックを修正するのに非常に時間がかかり、システムクロックが不安定な状態になることがあります。このディレクティブは、調整がしきい値を上回ったときに、chronyd
でシステムクロックを一度に修正 (step) します。ただし、chronyd
が開始してからのクロックの更新が、指定した制限を上回らなかった場合に限ります (負の値は、制限を無効にします)。initstepslew
ディレクティブはNTP
のソースのみに対応しているため、この方法は基準クロックを使用しているときに特に有用です。このディレクティブの使用例は、以下のようになります。
makestep 1000 10
この場合は、調整幅が 1000 秒よりも大きければシステムクロックが更新されますが、最初の 10 回の更新しか行われません。
- maxchange
このディレクティブは、クロック更新で修正される許容オフセットの最大値を設定します。更新が指定された回数行われた後にのみチェックが実行されるため、システムクロックの初回の調整が大きくなります。指定された最大値よりも大きなオフセットが発生すると、そのオフセットは指定した回数の間無視され、その後に
chronyd
が終了します (負の値を使用すると、終了しないようになります)。いずれの場合も、メッセージは syslog に送信されます。このディレクティブの使用例は、以下のようになります。
maxchange 1000 1 2
最初のクロック更新後に、
chronyd
がすべてのクロック更新でオフセットをチェックし、1000 秒よりも大きい調整を 2 回無視して、3 回目に終了します。- maxupdateskew
chronyd
のタスクの 1 つは、コンピュータのクロックがその基準源に対してどれくらい速くまたは遅く動くかを調べることです。また、推定値の誤差範囲の概算を計算します。エラーの範囲が広すぎる場合は、測定が落ち着いていないこと、そして推定増加または損失率に信頼性があまりないことを示しています。
maxupdateskew
パラメーターは、推定値を使用できるほど信頼できるかどうかを判定するためのしきい値です。デフォルトでは、しきい値は 1000 ppm です。構文は以下のようになります。
maxupdateskew skew-in-ppm
skew-in-ppm の一般的な値は、電話回線を介してサーバーにダイアルアップ接続を行う場合は 100、LAN 上のコンピューターの場合は 5 または 10 になります。
信頼性のない推定値の使用に対する保護の方法は、これだけではないことに注意してください。
chronyd
は常に、予想される進みまたは遅れのレートと、予測のエラー範囲を追跡しています。ソースの 1 つで測定が作成された後に別の予測が新たに生成されると、加重組み合わせのアルゴリズムを使用してマスター予測が更新されます。このため、chronyd
に信頼性の高い既存のマスター予測があり、エラー範囲の広い新たな予測が生成されると、既存のマスター予測が新規のマスター予測を特徴づけることになります。- minsources
minsources
ディレクティブは、ローカルクロックを更新する前にソース選択アルゴリズムで選択可能なものとして考慮されるべきソースの最小数を設定します。構文は以下のようになります。
minsources number-of-sources
number-of-sources は、デフォルトでは 1 です。minsource を 1 よりも大きくすると、信頼性が向上します。複数のソースが互いに対応することが必要となるためです。
- noclientlog
- 引数を取らないこのディレクティブは、クライアントアクセスをログに記録しないことを指定します。通常はログに記録されるため、chronyc のクライアントコマンドを使用して統計が報告されます。
- reselectdist
chronyd
が、利用可能なソースから同期ソースを選択する際に、同期距離が最短のものを優先します。ただし、同様の距離のソースが複数存在して、再選択が繰り返されるのを回避するため、現在選択されていないソースからの距離に、固定距離が追加されます。これを、reselectdist
オプションで設定できます。デフォルトでは、この距離は 100 ミリ秒となります。構文は以下のようになります。
reselectdist dist-in-seconds
- stratumweight
stratumweight
ディレクティブは、chronyd
が利用可能なソースから同期ソースを選択する際に、階層ごとに追加される同期距離を設定します。構文は以下のようになります。
stratumweight dist-in-seconds
デフォルトでは、dist-in-seconds は 1 ミリ秒です。つまり、通常は、距離の値が非常に悪い場合でも、stratum が高いソースよりも、stratum が低いソースが優先されることを意味します。
stratumweight
を 0 に設定すると、ソースを選択したときにchronyd
が stratum を無視します。- rtcfile
rtcfile
ディレクティブは、システムのリアルタイムクロック (RTC) の正確性の追跡に関連するパラメーターをchronyd
が保存できるファイル名を定義します。構文は以下のようになります。
rtcfile /var/lib/chrony/rtc
chronyd
は、このファイルが存在し、chronyc でwritertc
コマンドを実行すると、情報をこのファイルに保存します。保存される情報は、あるエポックでの RTC のエラー、そのエポック (1970 年 1 月 1 日以降の秒数)、および RTC の時間が早まるもしくは遅れる変化量です。リアルタイムクロックのコードはシステム固有のものなので、すべてのリアルタイムクロックがサポートされるわけではありません。このディレクティブを使用する場合は、リアルタイムクロックを手動で調整しないでください。リアルタイムクロックがランダムな間隔で調整されると、その変化量を測定する chrony の必要性が干渉されるためです。- rtcsync
-
rtcsync
ディレクティブは、デフォルトで/etc/chrony.conf
ファイルにあります。これにより、システムクロックが同期されていることがカーネルに知らされ、カーネルによりリアルタイムクロックが 11 分ごとに更新されます。
18.2.3. chronyc のセキュリティー
chronyc には、以下の 2 つの方法で chronyd
にアクセスできます。
- インターネットプロトコル (IPv4 または IPv6)
-
Unix ドメインソケット (
root
または chrony ユーザーがローカルにアクセス可能)
デフォルトでは、chronyc は、Unix ドメインソケットに接続します。デフォルトのパスは /var/run/chrony/chronyd.sock
です。この接続に失敗すると (たとえば非特権ユーザーで chronyc を実行していると失敗する可能性があります)、chronyc は 127.0.0.1 への接続を試み、その後 ::1 への接続を試みます。
chronyd
の動作に影響しない次の監視コマンドのみが、ネットワークに許可されています。
- activity
- manual list
- rtcdata
- smoothing
- sources
- sourcestats
- tracking
- waitsync
これらのコマンドを chronyd
許可するホストのセットは、chronyd
の設定ファイルの cmdallow
ディレクティブ、または chronyc の cmdallow
コマンドで設定できます。デフォルトでは、このコマンドが許可されるのは、ローカルホスト (127.0.0.1 または ::1) のものだけになります。
その他のコマンドはすべて、Unix ドメインソケットのみを介して許可されます。ネットワーク上で送信されると、chronyd
は、ローカルホストからの場合でも Not authorised
エラーで応答します。
chronyc を使用して chronyd にリモートでアクセス
以下を
/etc/chrony.conf
ファイルに追加すると、IPv4 と IPv6 の両方のアドレスからアクセスが可能になります。bindcmdaddress 0.0.0.0
または
bindcmdaddress :
cmdallow
ディレクティブを使用すると、リモート IP アドレス、ネットワーク、またはサブネットからのコマンドが許可されます。以下の内容を
/etc/chrony.conf
ファイルに追加します。cmdallow 192.168.1.0/24
ファイアウォールでポート 323 を開き、リモートシステムから接続します。
~]# firewall-cmd --zone=public --add-port=323/udp
ポート 323 を永続的に開きたいときは、
--permanent
を使用します。~]# firewall-cmd --permanent --zone=public --add-port=323/udp
allow
ディレクティブは NTP
のアクセス用で、cmdallow
ディレクティブは、リモートコマンドの受け取りを可能にします。ローカルで実行している chronyc を使用すると、この変更を一時的なものにできます。永続的に変更するときは設定ファイルを変更します。
18.3. chrony の使用
18.3.1. chrony のインストール
chrony スイートは一部のバージョンの Red Hat Enterprise Linux 7 でデフォルトでインストールされます。必要な場合には、インストールされていることを確認するために root
で以下のコマンドを実行します。
~]# yum install chrony
chrony デーモンのデフォルトの場所は /usr/sbin/chronyd
です。コマンドラインユーティリティーが /usr/bin/chronyc
にインストールされます。
18.3.2. chronyd ステータスの確認
chronyd
のステータスを確認するには、以下のコマンドを実行します。
~]$ systemctl status chronyd
chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago
18.3.3. chronyd の起動
chronyd
を起動するには、root
で以下のコマンドを発行します。
~]# systemctl start chronyd
システムの起動時に chronyd
を自動的に起動するように設定するには、root
で以下のコマンドを実行します。
~]# systemctl enable chronyd
18.3.4. chronyd の停止
chronyd
を停止するには、root
で以下のコマンドを発行します。
~]# systemctl stop chronyd
システムの起動時に chronyd
を自動的に起動しないように設定するには、root
で以下のコマンドを実行します。
~]# systemctl disable chronyd
18.3.5. chrony の同期確認
chrony が同期されているかどうかを確認するには、tracking
、sources
、および sourcestats
コマンドを使用します。
18.3.5.1. chrony 追跡の確認
chrony の追跡を確認するには、以下のコマンドを実行します。
~]$ chronyc tracking
Reference ID : CB00710F (foo.example.net)
Stratum : 3
Ref time (UTC) : Fri Jan 27 09:49:17 2017
System time : 0.000006523 seconds slow of NTP time
Last offset : -0.000006747 seconds
RMS offset : 0.000035822 seconds
Frequency : 3.225 ppm slow
Residual freq : 0.000 ppm
Skew : 0.129 ppm
Root delay : 0.013639022 seconds
Root dispersion : 0.001100737 seconds
Update interval : 64.2 seconds
Leap status : Normal
各フィールドは、以下のとおりです。
- Reference ID
-
(利用可能な場合) コンピューターが現在同期しているサーバーの参照 ID および参照名 (または
IP
アドレス) です。参照 ID は IPv4 アドレスとの混同を避けるため 16 進数の数値になっています。 - Stratum
- 基準クロックのあるコンピューターから何ホップ離れているかを示します。上記の例のコンピューターは stratum-1 コンピューターであるため、2 ホップ離れていることになります (つまり、a.b.c が stratum-2 で、stratum-1 から同期しています)。
- Ref time
- 参照ソースからの最後の測定が処理された時間 (UTC) です。
- System time
-
chronyd
は、通常の操作ではシステムクロックを更新しません。タイムスケールにおけるジャンプは、いかなるものでも特定のアプリケーションプログラムに有害な結果をもたらすためです。代わりに、システムクロックのエラーをわずかに早めたり遅くしたりして、エラーがなくなるまで修正し、修正が完了したら、システムクロックを通常のスピードに戻します。その結果、(gettimeofday()
システムコールを使用した他のプログラム、またはシェルの date コマンドが読み取る) システムクロックが、chronyd
が予測する現在の実際の時間 (サーバーモードで稼働している場合はこれをNTP
クライアントに報告) と異なる期間が発生します。この行で報告される値は、これによる差異です。 - Last offset
- 最後のクロック更新におけるローカルオフセットの予測です。
- RMS offset
- 長期的な、オフセット値の平均です。
- Frequency
-
chronyd
が修正しない場合にシステムクロックが間違う変化量です。これは、ppm (100 万分の 1) で表されます。たとえば、1 ppm という値は、システムクロックにおける 1 秒が、実際の時間と比較すると 1.000001 秒進んでいることを意味します。 - Residual freq
現在選択されている基準源の「残留周波数」を示しています。基準源からの測定値が、示すべき周波数と、実際に使用されている周波数との違いを反映しています。
これが常にゼロにならない理由は、補正する手順が周波数に適用されているためです。基準源から測定を取得し、新たな剰余周波数が計算されるたびに、この剰余の推定精度が、既存の周波数の推定精度 (
skew
を参照) と比較されます。新たな周波数の加重平均は、その精度によって異なる加重で計算されます。基準源からの測定に一貫した傾向がある場合、剰余は時間をかけてゼロになります。- Skew
- 周波数の予測されるエラー範囲です。
- Root delay
- コンピューターが最終的に同期する stratum-1 コンピューターの、ネットワークパスの遅延の合計数です。Root delay の値はナノ秒の分解能で出力されます。値は、極端な状況では負数になります。(コンピューター同士が互いの周波数を追跡せず、各コンピューターのターンアラウンド時間に比較してネットワークの遅延が非常に短い、対称的なピア配置で、これが発生する場合があります。)
- Root dispersion
- コンピューターが最後に同期する stratum-1 コンピューターに戻るすべてのコンピューターを介して累積された合計分散です。分散は、システムクロックの分解能や統計的測定の変動等に起因します。Root の分散値は、ナノ秒の分解能で出力されます。
- Leap status
- Leap のステータスで、Normal、Insert second、Delete second、または Not synchronized のいずれかになります。
18.3.5.2. chrony ソースの確認
sources コマンドは、chronyd
がアクセスしている現在の時間ソースの情報を表示します。
任意の引数 -v (verbose (詳細) の意) を指定できます。この例では、余分なキャプション行は、コラムの意味を説明するものとして表示されます。
~]$ chronyc sources 210 Number of sources = 3 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* GPS0 0 4 377 11 -479ns[ -621ns] +/- 134ns ^? a.b.c 2 6 377 23 -923us[ -924us] +/- 43ms ^+ d.e.f 1 6 377 21 -2629us[-2619us] +/- 86ms
各コラムの表示内容は、以下のとおりです。
- M
-
ソースのモードを示します。
^
はサーバーを、=
はピアを意味し、#
はローカルに接続された基準クロックを示します。 - S
-
この列は、ソースの状態を示します。「*」は、
chronyd
が現在同期しているソースを表します。「+」は、選択したソースと結合する、受け入れ可能なソースを表します。「-」は、受け入れ可能なソースで、結合アルゴリズムにより除外されたものを表します。「?」は、接続が切断されたソース、またはパケットがすべてのテストをパスしないソースを表します。「x」は、chronyd
が falseticker と考える (つまり、その時間が他の大半のソースと一致しない) クロックを表します。「~」は、時間の変動性が大きすぎるように見えるソースを表します。「?」条件は、少なくとも 3 つのサンプルが収集されるまで開始時にも表示されます。 - Name/IP address
-
ソースの名前または
IP
アドレス、もしくは基準クロックの参照 ID を表示します。 - Stratum
- 直近で受け取ったサンプルでレポートされているソースの stratum を表示します。Stratum 1 は、ローカルで基準クロックに接続しているコンピューターを示します。Stratum 1 コンピューターに同期しているコンピューターは、stratum 2 に存在することになります。同じく、Stratum 2 コンピューターに同期しているコンピューターは stratum 3 に存在することになり、以後も同様に続きます。
- Poll
ソースがポーリングされるレートで、間隔のベース-2 対数を秒数で示します。つまり、値が 6 の場合は、64 秒ごとに測定が行われます。
chronyd
は、一般的な条件に応じて、ポーリングレートを自動的に変更します。- Reach
- ソースの到達可能性のレジスターで、8 進法で表示されます。レジスターは 8 ビットで、ソースからパケットを受信するたびに、またはミスするたびに更新されます。値が 377 の場合は、最近の 8 回の通信全体で、有効な返信を受け取ったことを表します。
- LastRx
-
このコラムは、ソースから最後のサンプルがいつ受信されたかを表示します。通常は、秒数で表示されます。文字
m
、d
、h
、y
は、分、時、日、年を示します。値が 10 年の場合は、このソースからまだサンプルを受信していないことを示します。 - Last sample
-
この列は、ローカルクロックと、最後に測定されたソースの間のオフセットを表示します。角括弧内の数字は、実際に測定されたオフセットを表示します。これには
ns
(ナノ秒)、us
(マイクロ秒)、ms
(ミリ秒)、またはs
(秒) の各接尾辞が付く場合があります。角括弧の左側は元の測定を示し、slew がそれ以降にローカルクロックに適用可能になるように調整されています。+/-
に続く数字は、測定におけるエラーのマージンを示します。オフセットの値がプラスの場合は、ローカルクロックがソースよりも進んでいることを意味します。
18.3.5.3. chrony ソースの統計情報の確認
sourcestats
コマンドは、chronyd
が現在調べている各ソースに関するドリフト量とオフセット推定プロセスの情報を表示します。
任意の引数 -v
(verbose (詳細) の意) を指定できます。この例では、余分なキャプション行は、コラムの意味を説明するものとして表示されます。
~]$ chronyc sourcestats
210 Number of sources = 1
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
===============================================================================
abc.def.ghi 11 5 46m -0.001 0.045 1us 25us
各コラムの表示内容は、以下のとおりです。
- Name/IP address
-
これは、
NTP
サーバー (またはピア) の名前またはIP
アドレス、またはその行の残りの部分が関連する基準クロックの参照 ID です。 - NP
- 現在サーバーで保持されているサンプルポイントの数です。誤差レートと現在のオフセットは、このポイントを使って線形回帰を実行することで予測されます。
- NR
-
最新の回帰を追跡している同一サインを持つ剰余の実行数です。この数字がサンプル数に対して少なくなりすぎる場合は、直線がデータに適合しなくなったことを意味します。実行数が少なすぎる場合、
chronyd
は古いサンプルを破棄し、実行数が受け入れ可能な値になるまで回帰を再実行します。 - Span
- 一番古いサンプルと最新のサンプルの間隔です。単位が表示されない場合は、秒数を表しています。この例の間隔は 46 分です。
- Frequency
- これは予測されるサーバーの剰余周波数で、ppm (100 万分の 1) で表されます。この場合、このコンピューターのクロックは、このサーバーに対比して 109 分の 1 遅く稼働していると見積もられています。
- Freq Skew
- Freq の予測されるエラー範囲です (ppm (100 万分の 1) で表されます) 。
- Offset
- ソースの予測されるオフセットです。
- Std Dev
- サンプルの予測される標準偏差です。
18.3.6. システムクロックの手動調整
システムクロックを徐々に調整していく (slew) のを止め、一度に修正 (step) するには、root
で以下のコマンドを実行します。
~]# chronyc makestep
rtcfile
ディレクティブを使用している場合は、リアルタイムクロックを手動で調整しないでください。ランダムな調整を行うと、リアルタイムクロックがずれる変化量を測定する必要がある chrony に影響を与えます。
18.4. 異なる環境での chrony の設定
18.4.1. 孤立したネットワークでのシステムにおける chrony の設定
インターネットに接続していないネットワークに関しては、1 台のコンピューターをマスタータイムサーバーとします。もう 1 台のコンピューターをマスターの直接クライアント、またはクライアントのクライアントとします。マスターでは、ドリフトファイルは、システムクロックのドリフトの平均率を使用して手動で設定します。マスターを再起動すると、周囲のシステムから時間を取得し、システムクロックを設定するために平均値を計算します。その後、drift ファイルに基づいて調整の適用を再開します。drift ファイルは、settime
コマンドが使用されたときに自動的に更新されます。
マスターにしたシステムで、root
としてテキストエディターを実行し、以下のように /etc/chrony.conf
を編集します。
driftfile /var/lib/chrony/drift commandkey 1 keyfile /etc/chrony.keys initstepslew 10 client1 client3 client6 local stratum 8 manual allow 192.0.2.0
192.0.2.0
は、クライアントが接続できるネットワークアドレスまたはサブネットアドレスです。
マスターのダイレクトクライアントにしたシステムで、root
でテキストエディターを実行し、以下のように /etc/chrony.conf
を実行します。
server master driftfile /var/lib/chrony/drift logdir /var/log/chrony log measurements statistics tracking keyfile /etc/chrony.keys commandkey 24 local stratum 10 initstepslew 20 master allow 192.0.2.123
ここでの 192.0.2.123
はマスターのアドレスで、master
はマスターのホスト名になります。この設定になっているクライアントは、システムが再起動するとマスターと再同期を行います。
マスターの直接のクライアントにはならないクライアントシステムの /etc/chrony.conf
ファイルでは、local
ディレクティブおよび allow
ディレクティブが省略される以外は、同じになるべきです。
孤立したネットワークでは、ローカルの参照モードを有効にする local
ディレクティブも使用できます。これにより、NTP サーバーとして動作している chronyd
は、サーバーが一度も同期されていなかったり、クロックの最終更新から長い時間が経過している場合でも、リアルタイムに同期してるように見えます。
複数のサーバーをポーリングしているクライアントを混同することなく、ネットワーク上の複数のサーバーに同じローカル設定を使用し、互いを同期させるには、Orphan モードを有効にする local
ディレクティブの orphan
オプションを使用します。各サーバーは、他のすべてのサーバーを local
でポーリングするように設定する必要があります。これにより、最小の参照 ID を持つサーバーでのみローカル参照が有効になり、他のサーバーはそれに同期します。サーバーが失敗すると別のサーバーが引き継ぎます。
18.5. chronyc の使用
18.5.1. chronyc を使用した chronyd の制御
対話モードでコマンドラインユーティリティー chronyc を使用して、chronyd
のローカルインスタンスを変更するには、root
で以下のコマンドを実行します。
~]# chronyc
制限されているコマンドを使用する場合は、root
で chronyc を実行する必要があります。
以下のように、chronyc コマンドプロンプトが表示されます。
chronyc>
このコマンドの一覧を表示するには、help
と入力します。
このユーティリティーは、以下のようなコマンドで呼び出すと、非対話型コマンドモードで呼び出すこともできます。
chronyc command
chronyc を使用して変更した内容は永続的ではなく、chronyd
を再起動すると元に戻ります。永続的に変更する場合は、/etc/chrony.conf
を変更してください。
18.6. ハードウェアのタイムスタンプを使用した Chrony
18.6.1. ハードウェアのタイムスタンプの概要
ハードウェアのタイムスタンプは、一部の Network Interface Controller (NIC) でサポートされている機能です。着信パケットおよび送信パケットのタイムスタンプを正確に提供します。NTP
タイムスタンプは通常、カーネルにより作成され、システムクロックを使用して chronyd が作成されます。ただし、ハードウェアのタイムスタンプが有効な場合、NIC は独自のクロックを使用して、パケットがリンク層または物理層に出入りするときにタイムスタンプを生成します。ハードウェアスタンプで NTP
を使用すると、同期の精度を大幅に向上できます。最高精度を実現するには、NTP
サーバーおよび NTP
クライアントの両方が、ハードウェアのタイムスタンプを使用している必要があります。理想的な条件下では、サブマイクロ秒単位の精度を実現できるかもしれません。
ハードウェアのタイムスタンプを使用する時間同期の別のプロトコルには、PTP
があります。PTP
の詳細は、20章ptp4l を使用した PTP の設定 を参照してください。NTP
とは異なり、PTP
は、ネットワークスイッチおよびルーターの補助に依存しています。同期の精度を最高の状態にしたい場合は、PTP
をサポートしているスイッチやルーターがあるネットワークで PTP
を使用し、そのようなスイッチおよびルーターがないネットワークでは、NTP
を使用することが推奨されます。
18.6.2. ハードウェアタイムスタンプのサポートの確認
NTP
を使用したハードウェアのタイムスタンプがインターフェースでサポートされていることを確認するには、ethtool -T
コマンドを実行します。ethtool
がSOF_TIMESTAMPING_TX_HARDWARE
および SOF_TIMESTAMPING_TX_SOFTWARE
ケイパビリティーおよび HWTSTAMP_FILTER_ALL
フィルターモードを一覧表示した場合は、NTP
でハードウェアのタイムスタンプにインターフェースを使用できます。
例18.1 特定のインターフェースにおけるハードウェアのタイムスタンプのサポートの確認
~]# ethtool -T eth0
出力:
Timestamping parameters for eth0: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 0 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) all (HWTSTAMP_FILTER_ALL) ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC) ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) ptpv2-l2-sync (HWTSTAMP_FILTER_PTP_V2_L2_SYNC) ptpv2-l2-delay-req (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT) ptpv2-sync (HWTSTAMP_FILTER_PTP_V2_SYNC) ptpv2-delay-req (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
18.6.3. ハードウェアのタイムスタンプの有効化
ハードウェアのタイムスタンプを有効にするには、/etc/chrony.conf
ファイルで hwtimestamp
ディレクティブを使用します。ディレクティブは、個別のインターフェースを指定できますが、ワイルドカード文字 () を使用して、ハードウェアのタイムスタンプをサポートするすべてのインターフェースでハードウェアのタイムスタンプを有効にすることもできます。linuxptp パッケージの ptp4l などのアプリケーションが、ハードウェアのタイムスタンプを使用していない場合は、ワイルドカード仕様を使用してください。chrony 設定ファイルで、複数の hwtimestamp
ディレクティブが使用されます。
例18.2 hwtimestamp のディレクティブを使用したハードウェアのタイムスタンプの有効化
hwtimestamp eth0 hwtimestamp eth1 hwtimestamp *
18.6.4. クライアントポーリング間隔の設定
インターネット上のサーバーのポーリング間隔は、デフォルトの範囲である 64 秒から 1024 秒が推奨されています。ローカルサーバーおよびハードウェアのタイムスタンプでは、システムクロックのオフセットを最小限にとどめるため、ポーリング間隔は短く設定する必要があります。
/etc/chrony.conf
の以下のディレクティブは、1 秒のポーリング間隔を使用してローカル NTP
サーバーを指定します。
server ntp.local minpoll 0 maxpoll 0
18.6.5. インターリーブモードの有効化
ハードウェアの NTP
アプライアンスではなく、chrony など、ソフトウェアの NTP
実装を実行する汎用コンピューターの NTP
サーバーは、パケット送信後にのみハードウェア送信タイムスタンプを取得します。この動作により、サーバーは、対応するパケットのタイムスタンプを保存できません。NTP
クライアントが、送信後に生成された送信タイムスタンプを受け取るようにするには、/etc/chrony.conf
のサーバーディレクティブに xleave
オプションを追加し、クライアントが NTP
インターリーブモードを使用するように設定します。
server ntp.local minpoll 0 maxpoll 0 xleave
18.6.6. 多数のクライアント向けのサーバーの設定
デフォルトのサーバー設定では、最多で数千のクライアントが同時にインターリーブモードを使用できます。多数のクライアント向けにサーバーを設定するには、/etc/chrony.conf
の clientloglimit
のディレクティブを増やします。このディレクティブは、サーバーでクライアントのアクセスログに割り当てられるメモリーの最大サイズを指定します。
clientloglimit 100000000
18.6.7. ハードウェアのタイムスタンプの確認
インターフェースがハードウェアのタイムスタンプを有効にできたことを確認するには、システムログを確認してください。ログには、chronyd からの各インターフェース向けメッセージに、有効にしたハードウェアのタイムスタンプが追記されているはずです。
例18.3 ハードウェアのタイムスタンプが有効になったインターフェースのログメッセージ
chronyd[4081]: Enabled HW timestamping on eth0 chronyd[4081]: Enabled HW timestamping on eth1
chronyd が、NTP
クライアントまたはピアとして設定されている場合は、chronyc ntpdata
コマンドにより、送信先と受信先のタイムスタンプおよびインターリーブモードを、各 NTP
ソースに報告できます。
例18.4 各 NTP ソースの送信先および受信先のタイムスタンプおよびインターリーブモードの報告
~]# chronyc ntpdata
出力:
Remote address : 203.0.113.15 (CB00710F) Remote port : 123 Local address : 203.0.113.74 (CB00714A) Leap status : Normal Version : 4 Mode : Server Stratum : 1 Poll interval : 0 (1 seconds) Precision : -24 (0.000000060 seconds) Root delay : 0.000015 seconds Root dispersion : 0.000015 seconds Reference ID : 47505300 (GPS) Reference time : Wed May 03 13:47:45 2017 Offset : -0.000000134 seconds Peer delay : 0.000005396 seconds Peer dispersion : 0.000002329 seconds Response time : 0.000152073 seconds Jitter asymmetry: +0.00 NTP tests : 111 111 1111 Interleaved : Yes Authenticated : No TX timestamping : Hardware RX timestamping : Hardware Total TX : 27 Total RX : 27 Total valid RX : 27
例18.5 NTP 測定の安定性の報告
# chronyc sourcestats
ハードウェアのタイムスタンプを有効にすると、NTP
測定の安定性は、通常のロードにおいて数十ナノ秒または数百ナノ秒となります。この安定性は、chronyc sourcestats
コマンドの出力の Std Dev
コラムに報告されます。
出力:
210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ntp.local 12 7 11 +0.000 0.019 +0ns 49ns
18.6.8. PTP-NTP ブリッジの設定
非常に精度が高い PTP
(Precision Time Protocol) のグランドマスターが、PTP
サポートのあるスイッチまたはルーターを持たないネットワークで利用可能な場合、コンピューターは、PTP
スレーブおよび stratum-1 の NTP
サーバーとしての操作に専念する可能性があります。このようなコンピューターには、2 つ以上のネットワークインターフェースが必要なほか、グランドマスターに近いか、またはグランドマスターに直接接続されている必要があります。これにより、ネットワークで非常に精度の高い同期が確実に実行されます。
1 つのインターフェースを使用して、PTP
でシステムクロックを同期するように、linuxptp パッケージの ptp4l および phc2sys プログラムを設定します。この設定は、20章ptp4l を使用した PTP の設定 で説明しています。chronyd を設定して、その他のインターフェースを使用してシステム時間を提供するには、以下を行います。
例18.6 その他のインターフェースを使用してシステム時間を提供するように chronyd を設定
bindaddress 203.0.113.74 hwtimestamp eth1 local stratum 1
18.7. 関連資料
以下の資料は、chrony に関するその他の情報を提供します。
18.7.1. インストールされているドキュメント
-
chronyc(1)
の man ページ - chronyc コマンドラインインターフェースと、そのコマンドおよびコマンドオプションを説明します。 -
chronyd(8)
の man ページ: chronyd デーモンと、そのコマンドおよびコマンドオプションが説明されています。 -
chrony.conf(5)
の man ページ: chrony 設定ファイルが説明されています。
18.7.2. オンラインドキュメント
FAQ への回答は http://chrony.tuxfamily.org/faq.html を参照してください。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。