4 ネットワーク時間の構成
警告:
Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。
できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。
この章では、chronyデーモン、ネットワーク・タイム・プロトコル(NTP)デーモンまたは高精度時間プロトコル(PTP)デーモンを使用してシステム時間を設定するように、システムを構成する方法について説明します。
chronydデーモンについて
chrony
パッケージはchronyd
サービス・デーモンとchronycユーティリティを提供しています。モバイル・システムと仮想マシンを一定の時間一時停止、またはネットワークから切断した後で、システム・クロックの更新を可能にします。
chronyd
サービスは主に、モバイル・システムと仮想マシンが一定の期間一時停止、またはネットワークから切断した後、システム・クロックを更新するよう設計されています。ただし、これを使用して単一のNTPクライアントまたはNTPサーバーを実装することもできます。chronyd
はNTPサーバーとして使用すると、Global Positioning System (GPS)またはDCF77、MSF、WWVBなどのラジオ無線から受信した時間信号を使用して、上位stratum NTPサーバーと同期、またはstratum 1サーバーとして機能します。
chronycコマンドを使用して、chronyd
サービスを管理できます。
chronydサービスの構成
システムでchronyd
サービスを構成するには:
-
chrony
パッケージをインストールします。sudo yum install chrony
-
/etc/chrony.conf
を編集してchronyd
の構成を設定します。ノート:
デフォルトの構成では、システムが同期可能な公開NTPサーバーにネットワーク・アクセスできることを前提としています。内部ネットワークのファイアウォール・ルールによっては、これらのサーバーへはアクセスできないかわりに、ローカルNTPサーバーへのアクセスが許可されている場合があります。
次の例では、3つのNTPサーバーにアクセス可能なシステムの構成例を示します。
server NTP_server_1 server NTP_server_2 server NTP_server_3 driftfile /var/lib/chrony/drift keyfile /etc/chrony.keys commandkey 1 generatecommandkey
commandkey
ディレクティブは、chronyd
がchronycコマンドとNTPパケットの両方の認証に使用するkeyfile
エントリを指定します。generatecommandkey
ディレクティブにより、サービスを開始すると、chronyd
からSHA1ベースのパスワードが自動的に生成されます。たとえば、指定したクライアントまたはサブネットのNTPサーバーとして機能するように
chronyd
を構成するには、allow
ディレクティブを使用します。server NTP_server_1 server NTP_server_2 server NTP_server_3 allow 192.168.2/24 driftfile /var/lib/chrony/drift keyfile /etc/chrony.keys commandkey 1 generatecommandkey
システムがNTPサーバーに断続的にのみアクセスする場合、次の構成が適しています。
server NTP_server_1 offline server NTP_server_2 offline server NTP_server_3 offline driftfile /var/lib/chrony/drift keyfile /etc/chrony.keys commandkey 1 generatecommandkey
offline
キーワードを指定すると、chronyd
はネットワーク・アクセスが可能であると通知されないかぎり、NTPサーバーをポーリングしません。chronyc -a onlineおよびchronyc -a offlineコマンドを使用して、chronyd
にネットワーク・アクセスの状態を通知できます。 -
ローカルNTPサービスへのリモート・アクセスが必要な場合は、次のようにシステム・ファイアウォールを構成し、適切なゾーン上でNTPサービスへのアクセスを許可します。
sudo firewall-cmd --zone=zone --add-service=ntp
success
sudo firewall-cmd --zone=zone --permanent --add-service=ntp
success
-
chronyd
サービスを開始し、次のシステム再起動を開始するように構成します。sudo systemctl start chronyd sudo systemctl enable chronyd
たとえば、chronycコマンドを使用して、chronyd
の操作に関する情報を表示でき、またその構成を変更できます。
sudo chronyc -a
chrony version version
...
200 OK
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 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 chronyc> exit
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
chronyc> exit
-aオプションをchronycに使用することは、authhashおよびpasswordサブコマンドを入力することと同じ意味を持ち、毎回のchronycの使用にハッシュ・タイプとパスワードの指定が不要になります。
sudo cat /etc/chrony.keys
1 SHA1 HEX:4701E4D70E44B8D0736C8A862CFB6B8919FE340E # chronyc ... chronyc> authhash SHA1 chronyc> password HEX:4701E4D70E44B8D0736C8A862CFB6B8919FE340E 200 OK
詳細は、chrony(1)
およびchronyc(1)
の各マニュアル・ページまたは/usr/share/doc/chrony-version/chrony.txt
を参照するか、info chronyコマンドを使用してください。
NTPデーモンについて
ntpd
デーモンは、システム・クロックをリモートのNTPサーバー、ローカルのリファレンス・クロック、またはGPS信号やラジオ時報信号に同期できます。ntpd
は、NTPバージョン4 (RFC 5905)の完全な実装を提供し、またバージョン3 (RFC 1305)、2 (RFC 1119)および1 (RFC 1059)との互換性もあります。
ntpd
は、http://doc.ntp.org/4.2.6p5/authopt.htmlで説明されているように対称キー暗号化と公開キー暗号化の両方を使用して、複数の異なるモードで実行するように構成できます(http://doc.ntp.org/4.2.6p5/assoc.htmlを参照)。
ntpdサービスの構成
システムでntpd
サービスを構成するには:
-
ntp
パッケージをインストールします。sudo yum install ntp
-
/etc/ntp.conf
を編集して、ntpd
の構成を設定します。ノート:
デフォルトの構成では、システムが同期可能な公開NTPサーバーにネットワーク・アクセスできることを前提としています。内部ネットワークのファイアウォール・ルールによっては、これらのサーバーへはアクセスできないかわりに、ローカルNTPサーバーへのアクセスが許可されている場合があります。
次の例では、3つのNTPサーバーにアクセス可能なシステムのNTP構成例を示します。
server NTP_server_1 server NTP_server_2 server NTP_server_3 server 127.127.1.0 fudge 127.127.1.0 stratum 10 driftfile /var/lib/ntp/drift restrict default nomodify notrap nopeer noquery
server
およびfudge
エントリで127.127.1.0を指定すると、ntpd
はリモートのNTPサーバーが利用できない場合にローカルのシステム・クロックを使用します。restrict
エントリでは、ローカルNTPサービスとの時間同期のみをリモート・システムに許可します。ntpd
の構成の詳細は、http://doc.ntp.org/4.2.6p5/manyopt.htmlを参照してください。 -
driftファイルを作成します。
touch /var/lib/ntp/drift
-
ローカルNTPサービスへのリモート・アクセスが必要な場合は、次のようにシステム・ファイアウォールを構成し、適切なゾーン上でNTPサービスへのアクセスを許可します。
sudo firewall-cmd --zone=zone --add-service=ntp
success
sudo firewall-cmd --zone=zone --permanent --add-service=ntp
success
-
ntpd
サービスを開始し、システムの再起動後に開始するように構成します。sudo systemctl start ntpd sudo systemctl enable ntpd
ntpqコマンドとntpstatコマンドを使用して、次のようなntpd
の操作に関する情報を表示できます。
sudo ntpq -p
remote refid st t when poll reach delay offset jitter ============================================================================== *ns1.proserve.nl 193.67.79.202 2 u 21 64 377 31.420 10.742 3.689 -pomaz.hu 84.2.46.19 3 u 22 64 377 59.133 13.719 5.958 +server.104media 193.67.79.202 2 u 24 64 377 32.110 13.436 5.222 +public-timehost 193.11.166.20 2 u 28 64 377 57.214 9.304 6.311
sudo ntpstat
synchronised to NTP server (80.84.224.85) at stratum 3 time correct to within 76 ms polling server every 64
詳細は、ntpd(8)
、ntpd.conf(5)
、ntpq(8)
およびntpstat(8)
の各マニュアル・ページとhttp://doc.ntp.org/4.2.6p5/を参照してください。
PTPについて
PTPを使用すると、ローカル・エリア・ネットワーク上のシステム・クロックをNTPよりも高い精度で同期できます。ネットワーク・ドライバがハードウェアまたはソフトウェア・タイム・スタンプをサポートしている場合、PTPクロックはそのタイム・スタンプをPTPメッセージで使用し、ネットワーク全体で伝播遅延を調整できます。ソフトウェア・タイム・スタンプを使用すると、PTPは数十ミリ秒以内の精度でシステムを同期できます。ハードウェア・タイム・スタンプを使用すると、PTPは数十分の1ミリ秒以内の精度でシステムを同期できます。システムの高精度時刻同期が必要な場合は、ハードウェア・タイム・スタンプを使用してください。UEK R3およびRHCKのカーネルはいずれも、IEEE 1588で定義されているPTPバージョン2をサポートしています。
企業ローカル・エリア・ネットワークの標準のPTP構成は次のとおりです。
-
1つ以上のグランドマスター・クロック・システム。
グランドマスター・クロックは通常、高精度のGPS信号または低精度の符号分割多重接続(CDMA)信号、電波時計信号あるいはNTPを時間参照ソースとして使用できる特殊なハードウェアとして実装されます。複数のグランドマスター・クロックを使用できる場合は、ベスト・マスター・クロック(BMC)アルゴリズムが、それぞれの
priority1
、clockClass
、clockAccuracy
、offsetScaledLogVariance
およびpriority2
の各パラメータ設定と一意のIDに(この順番で)基づいて、グランドマスター・クロックを選択します。 -
いくつかの境界クロック・システム。
各境界クロックは、1つのサブネットワーク上でグランドマスター・クロックにバックアップされ、PTPメッセージをその他の1つ以上のサブネットワークに中継します。境界クロックは通常、ネットワーク・スイッチの機能として実装されます。
-
複数のスレーブ・クロック・システム。
サブネットワーク上の各スレーブ・クロックは、そのスレーブ・クロックのマスター・クロックとして機能する、境界クロックにバックアップされます。
より簡単な構成は、1つのグランドマスター・クロックと複数のスレーブ・クロックを同じネットワーク・セグメント上に配置し、境界クロックの中間層を必要としない設定にすることです。
PTP用ネットワーク・インタフェースを1つのみ使用しているグランドマスターとスレーブ・クロックのシステムは通常のクロックと呼ばれます。
境界クロックには2つ以上のPTP用ネットワーク・インタフェースが必要で、そのうち1つはグランドマスター・クロックまたは上位の境界クロックのスレーブとして機能し、その他のインタフェースはスレーブ・クロックまたは低位の境界クロックのマスターとして機能します。
境界クロックとスレーブ・クロックのシステムの同期は、タイム・スタンプをPTPメッセージで送信することにより実現します。デフォルトでPTPメッセージはUDPv4データグラムで送信されます。UDPv6データグラムまたはイーサネット・フレームを転送方式として使用するようにPTPを構成することも可能です。
システムでPTPを使用可能にするには、システムの1つ以上のネットワーク・インタフェース用のドライバが、ソフトウェアまたはハードウェア・タイム・スタンプをサポートしている必要があります。ネットワーク・インタフェース用のドライバがタイム・スタンプをサポートしているかどうか確認するには、次の例で示したようにethtoolコマンドを使用します。
sudo ethtool -T em1
Time stamping parameters for em1: 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) ...
この例のethtoolの出力から、em1
インタフェースがハードウェアとソフトウェアの両方のタイム・スタンプ機能をサポートしていることがわかります。
ptp4l
は、ソフトウェア・タイム・スタンプを使用してシステム・クロックを外部のグランドマスター・クロックに同期します。
ハードウェア・タイム・スタンプが使用可能な場合、ptp4l
はPTPハードウェア・クロックを外部のグランドマスター・クロックに同期できます。この場合は、phc2sys
デーモンを使用してシステム・クロックをPTPハードウェア・クロックと同期します。
PTPサービスの構成
システムでPTPサービスを構成するには:
-
linuxptp
パッケージをインストールします。sudo yum install linuxptp
-
/etc/sysconfig/ptp4l
を編集して、ptp4l
デーモンの起動オプションを定義します。グランドマスター・クロックとスレーブ・クロックには1つのインタフェースのみを定義する必要があります。
たとえば、スレーブ・クロックのインタフェース
em1
でハードウェア・タイム・スタンプを使用する場合は次のようにします。OPTIONS="-f /etc/ptp4l.conf -i em1 -s"
ハードウェア・タイム・スタンプのかわりにソフトウェア・タイム・スタンプを使用するには、-Sオプションを指定します。
OPTIONS="-f /etc/ptp4l.conf -i em1 -S -s"
ノート:
-sオプションは、クロックがスレーブとしてのみ動作するように指定します(
slaveOnly
モード)。このオプションをグランドマスター・クロックや境界クロックには指定しないでください。グランドマスター・クロックでは、次のように-sオプションを省略します。
OPTIONS="-f /etc/ptp4l.conf -i em1"
境界クロックでは、次のように2つ以上のインタフェースを定義する必要があります。
OPTIONS="-f /etc/ptp4l.conf -i em1 -i em2"
次のような場合は、ファイル
/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
success
sudo firewall-cmd --permanent --zone=zone --add-port=319/udp --add-port=320/udp
success
-
ptp4l
サービスを開始し、システムの再起動後に開始するように構成します。sudo systemctl start ptp4l sudo systemctl enable ptp4l
-
ハードウェア・タイム・スタンプを使用するように、クロック・システムで
phc2sys
を構成します。-
/etc/sysconfig/phc2sys
を編集して、phc2sys
デーモンの起動オプションを定義します。次のように、境界クロックまたはスレーブ・クロック上で、スレーブ・ネットワーク・インタフェースに関連付けられているPTPハードウェア・クロックに、システム・クロックを同期します。
OPTIONS="-c CLOCK_REALTIME -s em1 -w"
ノート:
境界クロック上のスレーブ・ネットワーク・インタフェースは、境界クロックがグランドマスター・クロックとの通信で使用するインタフェースです。
-wオプションは、
ptp4l
がPTPハードウェア・クロックを同期するまで待ってから、phc2sys
がシステム・クロックを同期するように指定します。次のように、システム時間を参照時間ソース(GPS、CDMA、NTP、ラジオ時報信号など)から取得するグランドマスター・クロック上で、ネットワーク・インタフェースのPTPハードウェア・クロックをシステム・クロックから同期します。
OPTIONS="-c em1 -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)
マニュアル・ページ、https://www.zhaw.ch/en/engineering/institutes-centres/ines/downloads/documents.htmlおよびIEEE 1588を参照してください。
PTPをNTPの時間ソースとして使用する方法
NTPサーバー上のPTPで調整されたシステム時間をNTPクライアントが使用できるようにするには、NTPサーバーの/etc/ntp.conf
に次のエントリを含めて、ローカルのシステム・クロックを時間参照として定義します。
server 127.127.1.0 fudge 127.127.1.0 stratum 0
ノート:
このファイルでは、その他のserver
行を構成しないでください。
詳細は、ntpdサービスの構成を参照してください。