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はNTPバージョン3 (RFC 1305)を使用しており、その機能はNTPバージョン4 (RFC 5905)と互換性があります。ただし、chronydではNTPバージョン4のいくつかの重要な機能、またはPTPの使用がサポートされていません。

chronydサービスの構成

システムでchronydサービスを構成するには:

  1. chronyパッケージをインストールします。

    sudo yum install chrony
  2. /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ディレクティブは、chronydchronycコマンドと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にネットワーク・アクセスの状態を通知できます。

  3. ローカルNTPサービスへのリモート・アクセスが必要な場合は、次のようにシステム・ファイアウォールを構成し、適切なゾーン上でNTPサービスへのアクセスを許可します。

    sudo firewall-cmd --zone=zone --add-service=ntp
    success
    sudo firewall-cmd --zone=zone --permanent --add-service=ntp
    success
  4. 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サービスを構成するには:

  1. ntpパッケージをインストールします。

    sudo yum install ntp
  2. /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を参照してください。

  3. driftファイルを作成します。

    touch /var/lib/ntp/drift
  4. ローカルNTPサービスへのリモート・アクセスが必要な場合は、次のようにシステム・ファイアウォールを構成し、適切なゾーン上でNTPサービスへのアクセスを許可します。

    sudo firewall-cmd --zone=zone --add-service=ntp
    success
    sudo firewall-cmd --zone=zone --permanent --add-service=ntp
    success
  5. 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)アルゴリズムが、それぞれのpriority1clockClassclockAccuracyoffsetScaledLogVarianceおよび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サービスを構成するには:

  1. linuxptpパッケージをインストールします。

    sudo yum install linuxptp
  2. /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)マニュアル・ページを参照してください。

  3. 次のようにシステム・ファイアウォールを構成し、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
  4. ptp4lサービスを開始し、システムの再起動後に開始するように構成します。

    sudo systemctl start ptp4l
    sudo systemctl enable ptp4l
  5. ハードウェア・タイム・スタンプを使用するように、クロック・システムでphc2sysを構成します。

    1. /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)マニュアル・ページを参照してください。

    2. 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サービスの構成を参照してください。