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 システムでは、このサービス・デーモンはデフォルトで有効になっています

注意:

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サービスを構成するには:

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

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

    sudo firewall-cmd --zone=zone --add-service=ntp
    sudo firewall-cmd --zone=zone --permanent --add-service=ntp
  3. 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への変換

次の表に、ntpchronyの間のファイル、コマンドおよび用語を示します。

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)アルゴリズムが、それぞれのpriority1clockClassclockAccuracyoffsetScaledLogVarianceおよび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サービスを構成するには:

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

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

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

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

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

    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)の各マニュアル・ページと、IEEE 1588を参照してください。

PTPをNTPの時間ソースとして使用する方法

NTPサーバー上のPTPで調整されたシステム時間をNTPクライアントが使用できるようにするには、NTPサーバーの/etc/chrony.confファイルに次のエントリを含めます。

server    127.127.1.0
fudge     127.127.1.0 stratum 0

これらのエントリは、ローカルのシステム・クロックを時間参照として定義します。

注意:

このファイルにその他のserver行を構成しないでください。