6 ネットワーク時間の構成
この章では、ntpの代替として、chronyをネットワーク・タイム・プロトコル(NTP)機能の実装として使用するようにシステムを構成する方法について説明します。この章では、システム時間の設定に使用する高精度時間プロトコル(PTP)デーモンについても説明します。
chrony Suiteについて
chronyは、ネットワーク上で時間記録を正確に保つために、NTPを実装する機能です。Oracle Linux 8では、NTPの管理については、chronyデーモン・サービスがntpdに置き換わります。
chronyには、chronyパッケージで提供される2つのコンポーネントがあります。
-
chronydサービス・デーモン -
chronycサービス・ユーティリティ
chronyの使用に関する実践的な演習については、Oracle LinuxでのChronyの構成を参照してください。
chronydサービス・デーモンについて
chronydサービス・デーモンは、モバイル・システムおよび仮想マシンのシステム・クロックを、一定期間一時停止されたかネットワークから切断された後に更新します。このサービスは、基本的なNTPクライアントまたはNTPサーバーを実装するためにも使用できます。NTPサーバーとしては、chronydは、グローバル・ポジショニング・システム(GPS)または無線放送(DCF77、MSF、WWVBなど)から受信した時間信号を使用して上位のstratum NTPサーバーと同期させることやstratum 1サーバーの機能を果たすことができます。
Oracle Linux 8システムでは、このサービス・デーモンはデフォルトで有効になっています
ノート:
chronydは、NTPバージョン4 (RFC 5905)と互換性のある機能を備えたNTPバージョン3 (RFC 1305)を使用します。ただし、chronydではNTPバージョン4のいくつかの重要な機能およびPTPの使用がサポートされていません。
詳細は、chrony(1)マニュアル・ページおよび/usr/share/doc/chrony/ディレクトリのファイルを参照してください。
chronycサービス・ユーティリティの使用
chronycユーティリティは、chronydサービスの管理、このサービスの操作に関する情報の表示、またはこのサービスの構成の変更のためのツールです。
このコマンドは、次の2つのモードで動作します。
-
非対話型モード: このモードでは、次の構文を使用します。
sudo chronyc subcommand -
対話型モード: コマンドを単独で入力すると、対話型モードがアクティブになり、
chronyc>プロンプトが表示されます。このプロンプトから、chronycサブコマンドを発行できます。sudo chronycchronyc>このプロンプトから、必要に応じて様々な
chronycサブコマンドを発行できます。次の例では、sourcesサブコマンドとsourcestatsサブコマンドで生成される情報を示します。chronyc> sources210 Number of sources = 4 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ service1-eth3.debrecen.hp 2 6 37 21 -2117us[-2302us] +/- 50ms ^* ns2.telecom.lt 2 6 37 21 -811us[ -997us] +/- 40ms ^+ strato-ssd.vpn0.de 2 6 37 21 +408us[ +223us] +/- 78ms ^+ kvm1.websters-computers.c 2 6 37 22 +2139us[+1956us] +/- 54mschronyc> sourcestats210 Number of sources = 4 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ============================================================================== service1-eth3.debrecen.hp 5 4 259 -0.394 41.803 -2706us 502us ns2.telecom.lt 5 4 260 -3.948 61.422 +822us 813us strato-ssd.vpn0.de 5 3 259 1.609 68.932 -581us 801us kvm1.websters-computers.c 5 5 258 -0.263 9.586 +2008us 118us chronyc> tracking Reference ID : 212.59.0.2 (ns2.telecom.lt) Stratum : 3 Ref time (UTC) : Tue Sep 30 12:33:16 2014 System time : 0.000354079 seconds slow of NTP time Last offset : -0.000186183 seconds RMS offset : 0.000186183 seconds Frequency : 28.734 ppm slow Residual freq : -0.489 ppm Skew : 11.013 ppm Root delay : 0.065965 seconds Root dispersion : 0.007010 seconds Update interval : 64.4 seconds Leap status : Normal対話型モードの使用を終了するには、exitと入力します。
ノート:
chronycコマンドで実装した変更は、chronydデーモンの次の再起動まで有効です。変更を永続的にするには、これらを/etc/chrony.confファイルに入力する必要があります。chronyd構成ファイルの編集を参照してください。
詳細は、chronyc(1)マニュアル・ページおよび/usr/share/doc/chrony/ディレクトリ内のファイルを参照してください。
chronydサービスの構成
システムでchronydサービスを構成するには:
-
chronyパッケージをインストールします。sudo dnf install chrony -
ローカルNTPサービスへのリモート・アクセスが必要な場合は、次のようにシステム・ファイアウォールを構成し、適切なゾーン上でNTPサービスへのアクセスを許可します。
sudo firewall-cmd --zone=zone --add-service=ntpsudo firewall-cmd --zone=zone --permanent --add-service=ntp -
chronydサービスを開始し、次のシステム再起動を開始するように構成します。デフォルトでは、
chronyはインストール後に有効になっています。sudo systemctl start chronydsudo systemctl enable chronyd
chronyd構成ファイルの編集
/etc/chrony.confファイルのデフォルトの構成では、システムが同期可能な公開NTPサーバーにネットワーク・アクセスできることを前提としています。
次の例では、3つのNTPサーバーにアクセスするようにシステムを構成します。
pool NTP_server_1
pool NTP_server_2
pool NTP_server_3
driftfile /var/lib/chrony/drift
keyfile /etc/chrony.keys
...
指定したクライアントまたはサブネットのNTPサーバーとして機能するようにchronydを構成するには、次の例で太字で示すように、allowディレクティブを使用します。
pool NTP_server_1
pool NTP_server_2
pool NTP_server_3
allow 192.168.2/24
driftfile /var/lib/chrony/drift
keyfile /etc/chrony.keys
...公開キー暗号化に基づく認証メカニズムのキーを作成するには、chronyc keygenコマンドを使用します。
ノート:
ntpでのAutokeyは、chronyでは機能しなくなりました。
システムがNTPサーバーに断続的にのみアクセスする場合、次の構成が適しています。
pool NTP_server_1 offline
pool NTP_server_2 offline
pool NTP_server_3 offline
driftfile /var/lib/chrony/drift
keyfile /etc/chrony.keys
... offlineキーワードを指定した場合、chronydでは、ネットワーク・アクセスが可能であるという通信を受信するまでNTPサーバーがポーリングされません。chronyc onlineおよびchronyc offlineコマンドを使用して、chronydにネットワーク・アクセスの状態を通知できます。
構成ファイルとそのディレクティブの詳細は、chrony.conf(5)マニュアル・ページを参照してください。
ntpからchronyへの変換
次の表に、ntpとchronyの間のファイル、コマンドおよび用語を示します。
| ntp | chrony |
|---|---|
/etc/ntp.conf
|
/etc/chrony.conf
|
/etc/ntp/keys
|
/etc/chrony.keys
|
ntpd
|
chronyd
|
ntpq command
|
chronyc command
|
ntpd.service
|
chronyd.service
|
ntp-wait.service
|
chrony-wait.service
|
ntpdateおよびsntpユーティリティ
|
chronyd -qおよびchronyd -tコマンド
|
ntpstatパッケージで使用可能なntpstatユーティリティは、chronydをサポートするようになりました。したがって、Oracle Linux 8でもこのユーティリティを使用できます。このコマンドでは、ntpでそれを使用した場合と同様の出力が生成されます。
/usr/share/doc/chrony/ntp2chrony.pyスクリプトは、既存のntp構成をchronyに変換するために利用できます。次に例を示します。
sudo python3 /usr/share/doc/chrony/ntp2chrony.py -b -v このスクリプトは、/etc/ntp.confの最も一般的なディレクティブからchronyへの変換をサポートしています。この例では、-bオプションによって、変換前にバックアップ構成ファイルを作成することを指定し、-vオプションによって、移行プロセスの間に詳細なメッセージを表示することを指定しています。
スクリプトで使用できる様々なオプションを表示するには、次のコマンドを入力します。
sudo python3 /usr/share/doc/chrony/ntp2chrony.py --helpPTPについて
PTPを使用すると、LAN上のシステム・クロックがNTPよりも正確に同期されます。ネットワーク・ドライバでハードウェアまたはソフトウェア・タイム・スタンプがサポートされている場合は、PTPクロックで、そのタイム・スタンプをPTPメッセージで使用してネットワーク全体で伝播遅延を解決できます。ソフトウェア・タイム・スタンプを使用する場合、PTPでは、数十ミリ秒以内の精度でシステムが同期されます。ハードウェア・タイム・スタンプを使用すると、PTPは数十分の1ミリ秒以内の精度でシステムを同期できます。システムの高精度時刻同期が必要な場合は、ハードウェア・タイム・スタンプを使用してください。
企業ローカル・エリア・ネットワークの標準のPTP構成は次のとおりです。
-
1つ以上のグランドマスター・クロック・システム。
グランドマスター・クロックは通常、高精度のGPS信号または低精度の符号分割多重接続(CDMA)信号、電波時計信号あるいはNTPを時間参照ソースとして使用できる特殊なハードウェアとして実装されます。複数のグランドマスター・クロックを使用できる場合は、ベスト・マスター・クロック(BMC)アルゴリズムが、それぞれの
priority1、clockClass、clockAccuracy、offsetScaledLogVarianceおよびpriority2の各パラメータ設定と一意のIDに(この順番で)基づいて、グランドマスター・クロックを選択します。 -
いくつかの境界クロック・システム。
各境界クロックは、1つのサブネットワーク上でグランドマスター・クロックにバックアップされ、PTPメッセージを1つ以上の追加サブネットワークに中継します。境界クロックは通常、ネットワーク・スイッチの機能として実装されます。
-
いくつかのセカンダリ・クロック・システム。
サブネットワーク上の各セカンダリ・クロックは、そのセカンダリ・クロックのマスター・クロックの機能を果たす境界クロックにバックアップされます。
基本構成の場合は、1つのグランドマスター・クロックと複数のセカンダリ・クロックを同じネットワーク・セグメントに配置することで、境界クロックの中間レイヤーが不要になります。
PTP用ネットワーク・インタフェースを1つのみ使用する、グランドマスター・クロックとセカンダリ・クロックのシステムは、通常のクロックと呼ばれます。
境界クロックには2つ以上のPTP用ネットワーク・インタフェースが必要であり、一方はグランドマスター・クロックまたは上位の境界クロックのセカンダリとして機能し、他方のインタフェースはセカンダリ・クロックまたは低位の境界クロックのマスターとして機能します。
境界クロックとセカンダリ・クロックのシステムの同期は、タイム・スタンプをPTPメッセージで送信することにより実現します。デフォルトでPTPメッセージはUDPv4データグラムで送信されます。UDPv6データグラムまたはイーサネット・フレームを転送方式として使用するようにPTPを構成することもできます。
システムでPTPを使用するには、システムの1つ以上のネットワーク・インタフェース用のドライバが、ソフトウェアまたはハードウェア・タイム・スタンプをサポートしている必要があります。ネットワーク・インタフェース用のドライバでタイム・スタンプがサポートされているかどうかを確認するには、ethtoolコマンドを使用します。
sudo ethtool -T en1Time stamping parameters for en1:
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)
...
この例の出力は、en1インタフェースがハードウェアとソフトウェアの両方のタイム・スタンプ機能をサポートしていることを示しています。
ptp4lは、ソフトウェア・タイム・スタンプを使用してシステム・クロックを外部のグランドマスター・クロックに同期します。
ハードウェア・タイム・スタンプが使用可能な場合、ptp4lはPTPハードウェア・クロックを外部のグランドマスター・クロックに同期できます。この場合は、phc2sysデーモンを使用してシステム・クロックをPTPハードウェア・クロックと同期します。
PTPサービスの構成
システムでPTPサービスを構成するには:
-
linuxptpパッケージをインストールします。sudo dnf install linuxptp -
/etc/sysconfig/ptp4lを編集して、ptp4lデーモン用の起動オプションを定義します。グランドマスター・クロックとセカンダリ・クロックには、1つのインタフェースのみを定義する必要があります。
たとえば、セカンダリ・クロックのインタフェース
en1でハードウェア・タイム・スタンプを使用する場合は次のようにします。OPTIONS="-f /etc/ptp4l.conf -i en1 -s"ハードウェア・タイム・スタンプのかわりにソフトウェア・タイム・スタンプを使用するには、-Sオプションを指定します。
OPTIONS="-f /etc/ptp4l.conf -i en1 -S -s"ノート:
-sオプションにより、クロックがセカンダリとしてのみ動作するように指定します(
slaveOnlyモード)。グランドマスター・クロックや境界クロックにはこのオプションを指定しないでください。グランドマスター・クロックでは、次のように-sオプションを省略します。
OPTIONS="-f /etc/ptp4l.conf -i en1"境界クロックでは、次のように2つ以上のインタフェースを定義する必要があります。
OPTIONS="-f /etc/ptp4l.conf -i en1 -i en2"次のような場合は、
/etc/ptp4l.confファイルを編集してptp4lをさらにカスタマイズする必要があります。-
グランドマスター・クロックの場合は、
priority1パラメータの値を0から127までの値に設定します(値が小さいほど、BMCアルゴリズムでグランドマスター・クロックが選択される際の優先度が高くなります)。1つのグランドマスター・クロックを使用する構成で推奨される値は127です。 -
summary_intervalの値を0ではなく整数値Nに設定した場合は、ptp4lで、クロック統計のサマリーが毎秒(20 = 1)ではなく2N秒ごとに/var/log/messagesに書き込まれます。たとえば、値10は210または1024秒間隔に相当します。 -
logging_levelパラメータは、ptp4lが記録するログ情報の量を制御します。logging_levelのデフォルト値は6で、これはLOG_INFOに相当します。ロギングを無効にするには、logging_levelの値を0に設定します。または、-qオプションをptp4lに指定することもできます。
ptp4l(8)マニュアル・ページを参照してください。 -
-
システム・ファイアウォールを、PTPイベント・メッセージと汎用メッセージによる適切なゾーン内のUDPポート319および320へのアクセスを受け入れるように構成します。次に例を示します。
sudo firewall-cmd --zone=zone --add-port=319/udp --add-port=320/udpsudo firewall-cmd --permanent --zone=zone --add-port=319/udp --add-port=320/udp -
ptp4lサービスを開始し、システムの再起動後に開始するように構成します。sudo systemctl start ptp4lsudo systemctl enable ptp4l -
ハードウェア・タイム・スタンプを使用するように、クロック・システムで
phc2sysを構成します。-
/etc/sysconfig/phc2sysファイルを編集して、phc2sysデーモン用の起動オプションを定義します。境界クロックまたはセカンダリ・クロックで、システム・クロックを、セカンダリ・ネットワーク・インタフェースに関連付けられているPTPハードウェア・クロックに同期させます。次に例を示します。
OPTIONS="-c CLOCK_REALTIME -s en1 -w"ノート:
境界クロック上のセカンダリ・ネットワーク・インタフェースは、境界クロックでグランドマスター・クロックとの通信に使用されるネットワーク・インタフェースです。
-wオプションにより、
ptp4lでPTPハードウェア・クロックが同期されるまで待ってからphc2sysでシステム・クロックが同期されるように指定します。次のように、システム時間を参照時間ソース(GPS、CDMA、NTP、ラジオ時報信号など)から取得するグランドマスター・クロック上で、ネットワーク・インタフェースのPTPハードウェア・クロックをシステム・クロックから同期します。
OPTIONS="-c en1 -s CLOCK_REALTIME -w"phc2sys(8)マニュアル・ページを参照してください。 -
phc2sysサービスを開始し、システムの再起動後に開始するように構成します。sudo systemctl start phc2syssudo systemctl enable phc2sys
-
ptp4l操作のステータスを問い合せるには、pmcコマンドを使用できます。次の例では、中間の境界クロックを介さずにグランドマスター・クロック・システムに直接接続しているスレーブ・クロック・システムでpmcを実行した結果を示します。
sudo pmc -u -b 0 'GET TIME_STATUS_NP'sending: GET TIME_STATUS_NP
080027.fffe.7f327b-0 seq 0 RESPONSE MANAGEMENT TIME_STATUS_NP
master_offset -98434
ingress_time 1412169090025854874
cumulativeScaledRateOffset +1.000000000
scaledLastGmPhaseChange 0
gmTimeBaseIndicator 0
lastGmPhaseChange 0x0000'0000000000000000.0000
gmPresent true
gmIdentity 080027.fffe.d9e453sudo pmc -u -b 0 'GET CURRENT_DATA_SET'sending: GET CURRENT_DATA_SET
080027.fffe.7f327b-0 seq 0 RESPONSE MANAGEMENT CURRENT_DATA_SET
stepsRemoved 1
offsetFromMaster 42787.0
meanPathDelay 289207.0この出力例には、次の有用な情報が含まれています。
-
gmIdentity -
グランドマスター・クロックの一意のID。ネットワーク・インタフェースのMACアドレスに基づきます。
-
gmPresent -
外部グランドマスター・クロックの使用の可否。グランドマスター・クロック自身に対しては、この値は
falseと表示されます。 -
meanPathDelay -
同期メッセージの推定遅延時間(ナノ秒単位)。
-
offsetFromMaster -
グランドマスター・クロックとの相対時間差の最新測定値(ナノ秒単位)。
-
stepsRemoved -
このシステムとグランドマスター・クロック間のネットワーク階層数。
詳細は、phc2sys(8)、pmc(8)およびptp4l(8)の各マニュアル・ページと、IEEE 1588を参照してください。