Ubuntu 16.04のNTPプールプロジェクトで使用するNTPを構成する方法

前書き

ほぼすべてのサービスまたはソフトウェアにとって、正確な時間管理は重要です。 電子メール、ロガー、イベントシステムとスケジューラ、ユーザー認証メカニズム、および分散プラットフォームで実行されているサービスはすべて、イベントを時系列で記録するために正確なタイムスタンプが必要です。 これらのサービスは、ネットワークタイムプロトコル(NTP)を使用して、システムクロックを信頼できる外部ソースと同期します。 このソースは、原子時計、GPS受信機、または既にNTPを使用している別のタイムサーバーです。

ここで、NTP Pool Projectプロジェクトが役立ちます。 世界中の数千万のクライアントに既知の「良い時間」に簡単にアクセスできる、タイムサーバーの巨大な世界的なクラスターです。 これは、Ubuntuおよびその他の主要なLinuxディストリビューションのほとんどのデフォルトのタイムサーバーであり、多くのネットワーク化されたアプライアンスおよびソフトウェアアプリケーションです。

このガイドでは、サーバーにNTPをセットアップし、NTPプールプロジェクトの一部として構成することで、NTPプールプロジェクトの他のユーザーに正確な時間を提供します。 予備のCPUサイクルと未使用の帯域幅を提供することは、コミュニティに何かを返すための完璧な方法です。

必要な帯域幅は比較的低く、提供できる量とサーバーの場所に応じて調整できます。 各クライアントは20分ごとに数個のUDPパケットのみを送信するため、ほとんどのサーバーは1秒間に約12個のNTPパケットを受信しますが、1日に数回、最大100個/秒のスパイクがあります。 これは、帯域幅使用量が10〜15 KB /秒で、スパイクが50〜120 KB /秒であることを意味します。

NTPプールプロジェクトに参加する前に満たす必要がある3つの基本的な要件があります。

  1. サーバーには静的IPアドレスが必要です。

  2. サーバーには、永続的で安定したインターネット接続が必要です。

  3. IPアドレスはほとんど変更されないか、まれにしか変更されません(1年に1回以下)。

ほとんどのクラウドベースのサーバーでは、通常、最初の2つの要件は自動的に満たされます。 3番目の要件は、NTPプールプロジェクトへの参加が長期的なコミットメントであることを強調しています。 もちろん、状況が変化した場合、サーバーをプールから取り出しても問題ありませんが、トラフィックが完全になくなるまでには長い時間がかかります(主に数週間、場合によっては数ヶ月、場合によっては数年)。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • IPv6ネットワークが構成された1つのUbuntu 16.04サーバー。 既存のドロップレットでIPv6ネットワークを構成する必要がある場合は、this tutorialに従うことができます。

  • sudo非rootユーザーとファイアウォール。Initial Server Setup with Ubuntu 16.04 tutorialをたどることで設定できます。

[[step-1 -—- installing-ntp]] ==ステップ1—NTPのインストール

NTPパッケージはデフォルトではインストールされないため、パッケージマネージャーを使用してインストールします。 まず、パッケージを更新します。

sudo apt-get update

次に、NTPをインストールします。

sudo apt-get install ntp

前提条件で指定されているようにファイアウォールを構成した場合、NTPプールと通信するには、ポート123でUDPトラフィックを許可する必要があります。

sudo ufw allow 123/udp

UFWの詳細については、How To Set Up a Firewall with UFW on Ubuntuを参照してください。

NTPがインストールされましたが、デフォルトのNTPプールタイムサーバーを使用するように構成されています。 代わりに特定のタイムサーバーを選択してみましょう。

[[step-2 -—- choosing-a-suitable-upstream-server]] ==ステップ2—適切なアップストリームサーバーの選択

NTPプールプロジェクトは、プールに参加したいオペレーターに、デフォルトのpool.ntp.orgサーバーを使用するのではなく、適切なネットワークローカルタイムサーバーを選択するように依頼します。 これにより、NTPプールプロジェクトの信頼性、高速性、および健全性が維持されます。 タイムソースを選択する際には、パケット損失がなく、サーバー間のホップ数が可能な限り少ない安定したネットワーク接続が必要です。

多層および階層NTPプロトコルは、関係者をプライマリサーバー、セカンダリサーバー、およびクライアントに分離します。 プライマリサーバーはStratum 1と呼ばれ、Stratum 0と呼ばれる時間のソースに直接接続されます。 このソースには、原子時計、GPS受信機、または無線ナビゲーションシステムを使用できます。 チェーン内のセカンダリサーバーは、Stratum 2Stratum 3などと呼ばれます。

各サーバーはクライアントでもあります。 Stratum 2クライアントは、アップストリームStratum 1サーバーから時間を受け取り、ダウンストリームStratum 3サーバーまたは他のクライアントに時間を提供します。 NTPプールプロジェクトメンバーが正しく機能するには、NTPデーモンに少なくとも3つのサーバーが構成されている必要があります。 プロジェクトでは、最低4つ、7つ以下のソースを推奨しています。

NTPプールプロジェクトは、パブリックStratum 1およびStartum 2タイムサーバーのリストを提供します。 リストは、指定された制限の下でパブリックアクセスに使用可能なNTPタイムサーバーを指定します。 次の3つのタイプがあります。

  • OpenAccess:このタイムサーバーは、NTPプールusage recommendationsに準拠するすべてのクライアントに対して開かれています。

  • RestrictedAccess:今回のサーバーには、NTPプールの使用に関する推奨事項に加えて、いくつかのアクセス制限があります。

  • ClosedAccess:このタイムサーバーは閉じているか、事前の手配が必要です。

[.warning]#Warning:承認を受けていない限り、OpenAccessとしてリストされていないサーバーを使用しないでください。

Stratum 1 Time Servers listにアクセスします。 次のようなリストが表示されます。

Stratum 1 servers

リストをISO code列で並べ替えて、サーバーのデータセンターに地理的に近い1つまたは2つのサーバーを見つけます。 サーバーのAccess Policy列にOpenAccessと表示されている場合は、問題なく使用できます。 「RestrictedAccess」と表示されている場合は、クリックしてエントリを開き、AccessDetailsフィールドに記載されている手順を読んでください。 多くの場合、NotificationMessageYesに設定されていることがわかります。つまり、ServerContactで指定されたアドレス宛ての非公式の電子メールを作成し、サーバーオペレーターに次のことを通知する必要があります。このタイムサーバーをNTPプールプロジェクトメンバーのタイムソースとして使用します。

使用するサーバーを特定したら、ISO列の各サーバーのリンクをクリックして、そのホスト名またはIPアドレスをコピーします。 これらのアドレスはステップ3で使用します。

次に、同じプロセスに従って、Stratum 2リストから3つまたは4つのサーバーを選択します。

タイムサーバーを選択したら、NTPクライアントを使用してそれらを使用するように設定します。

[[step-3 -—- configuring-ntp-to-join-the-pool]] ==ステップ3—プールに参加するためのNTPの構成

NTPプールでサーバーを使用し、新しいタイムサーバーを構成するには、NTPデーモンの構成にいくつかの変更を加える必要があります。 これを行うには、/etc/ntp.confファイルを編集します。

sudo nano /etc/ntp.conf

まず、driftfileが構成されていることを確認します。 ドリフトファイルには、公称周波数で動作するシステムクロックと、正しい時刻との同期を維持するために必要な周波数との間の周波数オフセットが保存されます。 安定した正確な時間を達成するのに役立ちます。 これは、デフォルトのインストールの構成ファイルの上部にあります。

/etc/ntp.conf

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift
...

次に、構成から既定のタイムソースエントリを削除します。 パターンpool [0-3].ubuntu.pool.ntp.org iburstまたはpool ntp.ubuntu.comのすべての行を探しています。 デフォルトの構成を使用している場合、強調表示されている行を削除します。

/etc/ntp.conf

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst

# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com

削除した行を、poolキーワードの代わりにserverキーワードを使用して、前の手順で選択した厳選されたサーバーに置き換えます。

/etc/ntp.conf

...
server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst
...

NTPプールの推奨事項に従って、サーバーごとにiburstオプションを使用します。 これにより、サーバーに到達できない場合、通常の1パケットではなく8パケットのバーストが送信されます。 NTPプールプロジェクトでburstオプションを使用すると、ポーリング間隔ごとに8つのパケットが送信されるため、不正使用と見なされますが、iburstは8つのパケットを初めて送信します。

次に、デフォルトの構成で管理クエリが許可されていないことを確認します。 そうしないと、サーバーがNTPリフレクション攻撃で使用されたり、サーバーの状態を変更しようとするntpqおよびntpdcクエリに対して脆弱になる可能性があります。 noqueryオプションがデフォルトのrestrict行に追加されていることを確認します。

/etc/ntp.conf

...
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

他のオプションの詳細については、official documentationを参照してください。

NTPデーモン構成ファイルは次のようになりますが、ファイルに追加のコメントが含まれている場合がありますが、これらは安全に無視できます。

/etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift

server ntp_server_hostname_1 iburst
server ntp_server_hostname_2 iburst
server ntp_server_hostname_3 iburst
server ntp_server_hostname_4 iburst
server ntp_server_hostname_5 iburst

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

ファイルを保存し、エディターを終了します。

次に、NTPサービスを再起動し、タイムサーバーでクロックをアップストリームサーバーに同期させます。

sudo systemctl restart ntp.service

数分後、ntpqコマンドを使用してタイムサーバーの状態を確認します。

ntpq -p

出力は次のようになります。

Output     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 mizbeaver.udel. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 montpelier.ilan .GPS.            1 u   25   64    7   55.190    2.121 130.492
+nist1-lnk.binar .ACTS.           1 u   28   64    7   52.728   23.860   3.247
*ntp.okstate.edu .GPS.            1 u   31   64    7   19.708   -8.344   6.853
+ntp.colby.edu   .GPS.            1 u   34   64    7   51.518   -5.914   6.669

remote列は、NTPデーモンが使用しているサーバーのホスト名を示し、refid列は、サーバーが使用しているソースを示します。 したがって、Stratum 1サーバーの場合、refidフィールドにはGPSPPSACTS、またはPTBが表示され、Stratum2以降のサーバーにはIPが表示されます。アップストリームサーバーのアドレス。 st列には階層が表示され、delayoffset、およびjitterはタイムソースの品質を示します。 これらの3つのフィールドでは、値が小さいほど優れています。

これで、タイムサーバーで時間を公開できます。 これは、別のホストからntpdateを呼び出すことで確認できます。

ntpdate -q your_server_ip

出力は次のようになり、タイムサーバーとオフセットを調整したことがわかります。

Outputserver your_server_ip, stratum 2, offset 0.001172, delay 0.16428
 2 Mar 23:06:44 ntpdate[18427]: adjust time server your_server_ip offset 0.001172 sec

これで、NTPサーバーをNTPプールプロジェクトに登録して、他のユーザーが使用できるようになりました。

[[step-4 -—- adding-the-server-to-the-ntp-pool]] ==ステップ4—サーバーをNTPプールに追加する

他の人が使用できるようにサーバーを追加するには、manage.ntppool.orgにアクセスしてアカウントにサインアップします。 アカウントの確認を求めるメールがNTP Pool [email protected]から届きます。 メールの指示に従ってアカウントを確認し、manage.ntppool.orgにログインします。

ログインすると、サーバーを追加するためのシンプルなインターフェースが表示されます。

Add a server

サーバーのIPアドレスを入力し、Submitをクリックします。

次の画面では、サーバーの領域を識別したことを確認するように求められます。 予想とは異なるリージョンにサーバーが表示されている場合は、Commentボックスを使用してサーバーに通知します。

The verification screen

よろしければ、Yes, this is my server, add it!をクリックしてエントリを確認してください

これで、サーバーはNTPプールプロジェクトの一部になりました。 http://www.pool.ntp.org/scores/your_server_ipにアクセスして、NTPプールの監視システムがサーバーに関して収集した情報を確認してください。 サーバーを1時間に数回チェックし、オフセットデータを表示し、システムのscoreとログを記録します。 サーバーが十分な時間を保ち、到達可能である限り、スコアは20ポイントに達するまで上昇します。 スコアが10を超えるサーバーのみがプールで使用されます。

接続の問題のトラブルシューティング

サーバーの同期に問題がある場合は、パケットファイアウォールを配置してoutgoingパケットをポート123にドロップしている可能性があります。 ファイアウォールのステータスを確認する方法については、How To Set Up a Firewall with UFW on Ubuntuを参照してください。

NTPプールプロジェクトの監視ステーションがNTPサーバーに到達できず、サーバースコアが低下している場合、またはサーバーを使用して他のクロックを同期できない場合は、パケットファイアウォールを配置してincomingをドロップしている可能性があります。 ■ポート123のトラフィック。 ファイアウォールの状態を確認してください。

ファイアウォールが設置されていないことが確実な場合、または着信トラフィックと発信トラフィックの両方に対してポート123を開いている場合は、サーバープロバイダーまたは別のトランジットプロバイダーが途中でパケットをドロップしている可能性があります。 これらの問題を自分で解決するための知識がない場合は、コミュニティに相談して助けを求めるのが最善です。 NTP Pool Projects forumから始めるのが良いでしょう。 mailing listまたはsend an emaillをNTPプールプロジェクト演算子に結合することもできます。 助けを求める前に、すでに問題を解決しようとしたすべての手順を表示できることを確認してください。

結論

このチュートリアルでは、独自のタイムサーバーを正常にセットアップし、NTPプールプロジェクトのメンバーにして、コミュニティに時間を提供しました。 計時コミュニティと連絡を取り合うため。 NTP Pool Projects forumまたはmailing listを結合します。 サーバーのスコアを監視し、必要な調整を行ってください。

Related