6 ネットワーク時間の構成
この章では、ntp
の代替として、chrony
をネットワーク・タイム・プロトコル(NTP)機能の実装として使用するようにシステムを構成する方法について説明します。この章では、システム時間の設定に使用する高精度時間プロトコル(PTP)デーモンについても説明します。
chrony Suiteについて
chrony
は、ネットワーク上で時間記録を正確に保つために、NTPを実装する機能です。Oracle Linux 8では、NTPの管理については、chrony
デーモン・サービスがntpd
に置き換わります。
chrony
には、chrony
パッケージで提供される2つのコンポーネントがあります。
-
chronyd
サービス・デーモン -
chornyc
サービス・ユーティリティ
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 chronyc
chronyc>
このプロンプトから、必要に応じて様々な
chronyc
サブコマンドを発行できます。次の例では、sources
サブコマンドとsourcestats
サブコマンドで生成される情報を示します。chronyc> sources
210 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] +/- 54ms
chronyc> sourcestats
210 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=ntp
sudo firewall-cmd --zone=zone --permanent --add-service=ntp
-
chronyd
サービスを開始し、次のシステム再起動を開始するように構成します。デフォルトでは、
chrony
はインストール後に有効になっています。sudo systemctl start chronyd
sudo 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 --help
PTPについて
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 en1
Time 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/udp
sudo firewall-cmd --permanent --zone=zone --add-port=319/udp --add-port=320/udp
-
ptp4l
サービスを開始し、システムの再起動後に開始するように構成します。sudo systemctl start ptp4l
sudo 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 phc2sys
sudo 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.d9e453
sudo 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を参照してください。