インフラエンジニア勉強雑記

インフラ技術に関して勉強したメモを残したものです。誤っている内容があればコメントもしくはメッセージでお知らせいただけると助かります。

Linux Chronyd(旧ntpd)に関して 概要・設定方法に関して

1.概要

1.1.NTPとは

NTP(Network Time Protocol)とはサーバやPCの時間を上位のNTPサーバと同期するためのプロトコルです。UDPを使用し、ポート番号は123です。
stratumと呼ばれる階層構造を撮っており、0~16で設定可能です。stratum 0は原子時計GPSなどを使用しており、誤差はほぼ無いと言っても問題ありません。最下層のstratum 16から時刻を同期することはできません。基本的にstratum 0から個人が取得することはできません。
以下が公開されているNTPサーバの例となります。

1.2.NTPの利用目的

サーバやPCなどはハードウェアクロックを参照して、時間が設定されます。仮想マシンの場合はハイパーバイザの時間と同期することが多いです。(設定で変更が可能です)
ただし、ハードウェアクロックを使用していると次第にズレが生じてきます。サーバ間の連携時に時刻が同期されていないとシステムが正常に動作しない可能性もあるため、導入はほぼ必須となります。
以下がインフラシステムにおけるNTPが必須な環境の例です。

  • HAを構成しているBIG-IP:HA機器間で時間がずれているとHAが構成できません。

  • ADサーバとクライアントPC:ドメインに参加しているPCは基本的にNTPの同期先がADサーバとなりますが、NTPの導入は行いましょう。クライアントPCとAD間で5分以上の差があるとLDAP認証に失敗します。

  • ログサーバ:ログを保管している場合、各機器のタイムスタンプがずれていると切り分けに時間を要する可能性があります。

1.3.動作

NTPの動作する時の時間計算の方法などは別の記事で説明します。
NTPでは時刻を同期する際にstepモードとslewモードで動作します。

  • stepモード:NTPサーバーから取得した時刻情報でシステム時刻を即時補正

  • slewモード:NTPサーバーから取得した時刻情報でシステム時刻を徐々に補正

1.4.閏秒の対策

閏秒とは協定世界時UTCに対して、世界時UT1との差が0.9秒以内に収まるように挿入される1秒のことを指します。
UT1は地球の自転を基準にした時刻系です。実際の1日と原子時計の1日を修正するための秒となります。
この1秒で毎回世界中のシステム管理者たちは事前に調査を行います。自身のシステムのNTPが変動することでシステムの再起動などが発生する可能性があるからです。また、事前にベンダからパッチなどが提供されることもあります。
一番最近閏秒が挿入されたのは2017年1月1日0:00(UTC)です。日本時間だと午前9時となります。

  • Windowsの場合:閏秒が挿入されても次の時刻同期時にstepモードで修正します。

*RHELの場合:閏秒を処理しますが、カーネルによってはバグがあり、システムハングアップなどの可能性があります。

1.5.クローズドなネットワークの場合

インターネットと通信できない場合は通常のNTPサーバを上位と同期しないで設置したり、専用のアプライアンス製品を導入することがあります。
例としてセイコーがあります。電話線を使用して時刻同期を行えたり、GPSを使用して時刻同期を行うことが可能です。
タイムサーバー | セイコーソリューションズ

2.Chronydの概要・設定方法について

2.1.概要

ChronydはLinuxのバージョン7から標準となったデーモンで、NTPクライアントおよびNTPサーバの機能を有していますとなります。Linuxのバージョン6まで使用されていたntpdはyumを使えばインストールできますが、Chronydの方が改善されているので、こちらを優先して使用しましょう。
ntpdより時間をより高速に、より高い精度で動機が可能です。

2.2.設定方法

設定ファイルは/etc/chrony.confです。以下はデフォルトの/etc/chrony.confです。
主要そうな部分だけ説明していきます。

2.2.1. server

問い合わせ先のNTPサーバを設定できます。

server ntp.nict.jp
server 192.168.0.1

2.2.2.allow

NTPサーバとして動作する際に、アクセスを許可するクライアントを指定します。

allow all #全て許可する場合
allow 192.168.0.0/24 #特定のネットワークからのみアクセスを許可する場合

2.2.3.cmdallow

上記のallowと似ていますが、chronycコマンドを実行できるネットワークを指定可能です。
デフォルトだとローカルホストのみ有効になっているので、この設定は基本的にいじらなくても問題ないです。
使用する場合はbindcmdaddressコマンドと併用する必要があります。

cmdallow all #全て許可する場合
cmdallow 192.168.0.0/24 #特定のネットワークからのみアクセスを許可する場合

2.2.4.dumpdir

時刻の変動割合を計算するためにchronydでは測定履歴を保存する必要があります。設定ファイル内のdumponexitやchronycのdumpコマンドを使用して測定履歴を保存したい場合は本設定で保存先のディレクトリを設定する必要があります。

dumpdir /var/log/chrony

上記設定を入れてダンプを取得すると、NTPのソースIPアドレスが1.2.3.4の場合は/var/log/chrony/1.2.3.4.datに保存されます。

2.2.5.dumponexit

本記述があると、プログラムの終了時に記録された時間ソースの測定履歴をdumpdirで定義したファイルに保存します。

dumponexit

2.2.6.local

上位のNTPサーバと同期していなくても、同期しているように振る舞います。インターネットと通信できない環境でNTPサーバが必要となった場合などに使用します。

local stratum 10 #このNTPサーバは上位NTPサーバと同期していなくてもstratum 10としてクライアントからは確認できます。

2.2.7.log

本設定項目では、特定の情報を記録することを示します。ログファイルは、logdirで指定されたディレクトリに書き込まれます。列の意味を示すためにバナーがファイルに定期的に書き込まれます。 rawmeasurements、measurements、statistics、tracking、rtc、refclocks、tempcompなどが設定可能です。

log measurements statistics tracking

2.2.8.logdir

ログが出力されるディレクトリを指定することができます。

logdir /var/log/chrony

2.2.9.makestep

通常chronydは、必要に応じてクロックを遅くしたり速くしたりすることで、システムに時間オフセットを徐々に修正させます。 状況によっては、システムクロックが大幅にずれているために、このスルー処理にシステムクロックを修正するのに非常に長い時間がかかることがあります。
chronydでは起動してからしばらくstepモードでシステム時間を修正することができます。
起動してから①何秒のズレが生じているか、②起動してから何回目の同期までstepモードにするかを設定できます。

makestep ① ②
makestep 1.0 3 #起動してから1秒以上のズレが生じている場合、3回までstepモードで時刻補正を行います。

2.2.10.maxupdateskew

Chronydは自身が時刻ソースに対してどのくらい早いまたは遅いかを調べます。またその値の誤差範囲を推定します。誤差の範囲が大きすぎる場合は、測定値がまだ安定していない、もしくは 推定利得または損失率があまり信用出来ないことを示している可能性があります。 本設定ではこの推定値が信頼できるかできないかのしきい値を設定します。 一般的に電話回線を介したサーバへのダイアルアップ接続の場合は100、LAN上のコンピューターの場合は5または10です。なおデフォルトだと1000です。

maxupdateskew 10

2.2.11.rtcsync

rtcsyncディレクティブは、システム時刻が定期的にRTCにコピーされます。
Linuxでは、RTCコピーはカーネルによって11分ごとに実行されます。
macOSでは、システムクロックが同期状態にあるとき、chronydは60分ごとにRTCコピーを実行します。

他のシステムではこのディレクティブは何もしません。

2.3.確認用コマンド

時刻同期ができているかは基本的にchronydを使用して確認を行います。

2.3.1.時刻同期状態の確認

$ chronyc sources

2.3.2.chrony トラッキングの確認

$ chronyc tracking

2.3.3.クライアントの情報の確認

$ chronyc -a clients

2.3.4.RTCなどの同期状況

$ timedatectl