Ubuntu16.04のNTPプールプロジェクトで使用するためにNTPを構成する方法
序章
正確な時間管理は、ほとんどすべてのサービスまたはソフトウェアにとって重要です。 電子メール、ロガー、イベントシステムとスケジューラ、ユーザー認証メカニズム、および分散プラットフォームで実行されるサービスはすべて、イベントを時系列で記録するために正確なタイムスタンプを必要とします。 これらのサービスは、ネットワークタイムプロトコル(NTP)を使用して、システムクロックを信頼できる外部ソースと同期します。 このソースは、原子時計、GPS受信機、またはすでにNTPを使用している別のタイムサーバーである可能性があります。
ここで、NTPプールプロジェクトプロジェクトが活躍します。 これは、世界中の数千万のクライアントに既知の「良い時間」への簡単なアクセスを提供するタイムサーバーの巨大な世界的なクラスターです。 これは、Ubuntuや他のほとんどの主要なLinuxディストリビューション、および多くのネットワークアプライアンスやソフトウェアアプリケーションのデフォルトのタイムサーバーです。
このガイドでは、サーバーにNTPをセットアップし、NTPプールプロジェクトの一部として構成して、NTPプールプロジェクトの他のユーザーに正確な時間を提供します。 予備のCPUサイクルと未使用の帯域幅を提供することは、コミュニティに何かを還元するのに最適な方法です。
必要な帯域幅は比較的低く、提供できる量とサーバーの場所に応じて調整できます。 各クライアントは20分ごとに2、3のUDPパケットしか送信しないため、ほとんどのサーバーは1秒あたり約12のNTPパケットしか受信せず、1日に2、3回、最大100パケット/秒のスパイクが発生します。 これは、50〜120Kb/秒のスパイクで10〜15Kb/秒の帯域幅使用量に相当します。
NTPプールプロジェクトに参加する前に満たす必要のある3つの基本的な要件があります。
- サーバーには静的IPアドレスが必要です。
- サーバーには、永続的で安定したインターネット接続が必要です。
- IPアドレスはほとんど変更されないか、まれにしか変更されません(1年に1回以下)。
ほとんどのクラウドベースのサーバーでは、通常、最初の2つの要件が自動的に満たされます。 3番目の要件は、NTPプールプロジェクトへの参加が長期的な取り組みを構成することを強調しています。 もちろん、状況が変化した場合は、サーバーをプールから削除することは問題ありませんが、トラフィックが完全になくなるまでには長い時間がかかります(ほとんどの場合、数週間、場合によっては数か月、場合によっては数年)。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- IPv6ネットワークが構成された1台のUbuntu16.04サーバー。 既存のドロップレットでIPv6ネットワークを構成する必要がある場合は、このチュートリアルに従うことができます。
- sudo非rootユーザーとファイアウォール。Ubuntu16.04チュートリアルを使用した初期サーバーセットアップに従ってセットアップできます。
ステップ1—NTPのインストール
NTPパッケージはデフォルトではインストールされないため、パッケージマネージャーを使用してインストールします。 まず、パッケージを更新します。
- sudo apt-get update
次に、NTPをインストールします。
- sudo apt-get install ntp
前提条件で指定されているようにファイアウォールを構成した場合、NTPプールと通信するには、ポート123
でUDPトラフィックを許可する必要があります。
- sudo ufw allow 123/udp
UFWの詳細については、UbuntuでUFWを使用してファイアウォールを設定する方法を参照してください。
これでNTPがインストールされましたが、デフォルトのNTPプールタイムサーバーを使用するように構成されています。 代わりに、特定のタイムサーバーを選択しましょう。
ステップ2—適切なアップストリームサーバーの選択
NTPプールプロジェクトは、プールに参加したいオペレーターに、デフォルトのpool.ntp.org
サーバーを使用するのではなく、適切なネットワークローカルタイムサーバーを選択するように依頼します。 これにより、NTPプールプロジェクトの信頼性、高速性、および健全性が維持されます。 タイムソースを選択するときは、パケット損失がなく、サーバー間のホップができるだけ少ない安定したネットワーク接続が必要です。
多層および階層型のNTPプロトコルは、関係者をプライマリサーバー、セカンダリサーバー、およびクライアントに分離します。 プライマリサーバーはStratum1 と呼ばれ、 Stratum0と呼ばれる時間のソースに直接接続されます。 このソースは、原子時計、GPS受信機、またはラジオナビゲーションシステムです。 チェーン内のセカンダリサーバーは、 Stratum 2 、 Stratum3などと呼ばれます。
各サーバーはクライアントでもあります。 Stratum 2クライアントは、アップストリームのStratum 1サーバーから時間を受け取り、ダウンストリームのStratum3サーバーまたは他のクライアントに時間を提供します。 NTPプールプロジェクトのメンバーが正しく機能するには、NTPデーモンに少なくとも3台のサーバーを構成する必要があります。 プロジェクトでは、4つ以上、7つ以下のソースを推奨しています。
NTPプールプロジェクトは、パブリックStratum1およびStartum2タイムサーバーのリストを提供します。 リストは、指定された制限の下でパブリックアクセスに使用できるNTPタイムサーバーを指定します。 次の3つのタイプがあります。
- OpenAccess :このタイムサーバーは、NTPプール使用法の推奨事項に準拠しているすべてのクライアントに対して開かれています。
- RestrictedAccess :今回のサーバーには、NTPプールの使用に関する推奨事項に加えて、いくつかのアクセス制限があります。
- ClosedAccess :このタイムサーバーは閉じているか、事前の手配が必要です。
警告:承認を受けていない限り、OpenAccessとしてリストされていないサーバーを使用しないでください。
Stratum1タイムサーバーリストにアクセスします。 次のようなリストが表示されます。
リストをISOコード列で並べ替えて、サーバーのデータセンターに地理的に近い1つまたは2つのサーバーを見つけます。 サーバーのアクセスポリシー列にOpenAccessと表示されている場合は、問題なく使用できます。 「RestrictedAccess」と表示されている場合は、クリックしてエントリを開き、AccessDetailsフィールドに記載されている手順をお読みください。 多くの場合、NotificationMessageがYesに設定されていることがわかります。これは、ServerContactで提供されたアドレス宛ての非公式の電子メールを作成してこのタイムサーバーをNTPプールプロジェクトメンバーのタイムソースとして使用したいというサーバーオペレーター。
使用するサーバーを特定したら、 ISO 列の各サーバーのリンクをクリックして、そのホスト名またはIPアドレスをコピーします。 これらのアドレスは、手順3で使用します。
次に、同じプロセスに従って、 Stratum2リストから3台または4台のサーバーを選択します。
タイムサーバーを選択したら、それらを使用するようにNTPクライアントを構成します。
ステップ3—プールに参加するようにNTPを設定する
サーバーをNTPプールで使用し、新しいタイムサーバーを構成するには、NTPデーモンの構成にいくつかの変更を加える必要があります。 これを行うには、/etc/ntp.conf
ファイルを編集します。
- sudo nano /etc/ntp.conf
まず、driftfileが構成されていることを確認します。 ドリフトファイルは、公称周波数で動作しているシステムクロックと、正しい時刻との同期を維持するために必要な周波数との間の周波数オフセットを格納します。 安定した正確な時間を達成するのに役立ちます。 これは、デフォルトのインストールの構成ファイルの先頭にあります。
# /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
のパターンのすべての行を探しています。 デフォルト構成を使用している場合は、強調表示された行を削除します。
# 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
キーワードを使用して、削除した行を前の手順で選択した厳選されたサーバーに置き換えます。
...
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
行に追加されていることを確認します。
...
# 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デーモン構成ファイルは次のようになりますが、ファイルに追加のコメントが含まれている場合がありますが、これは無視しても問題ありません。
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 フィールドには、 GPS 、 PPS 、 ACTS 、またはPTBが表示されます。 Stratum 2以降のサーバーには、アップストリームサーバーのIPアドレスが表示されます。 st 列には階層が表示され、 delay 、 offset 、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プールプロジェクトに登録して、他のユーザーが使用できるようにする準備が整いました。
ステップ4—サーバーをNTPプールに追加する
他の人が使用できるようにサーバーを追加するには、 manage.ntppool.org にアクセスして、アカウントにサインアップしてください。 NTPプール[email protected]から、アカウントの確認を求めるメールが届きます。 メールの指示に従ってアカウントを確認し、manage.ntppool.orgにログインしてください。
ログインすると、サーバーを追加するためのシンプルなインターフェイスが表示されます。
サーバーのIPアドレスを入力し、送信をクリックします。
次の画面では、サーバーのリージョンが識別されたことを確認するように求められます。 サーバーが予想とは異なるリージョンに表示されている場合は、コメントボックスを使用してサーバーに通知します。
よろしければ、をクリックしてエントリを確認してください。はい、これは私のサーバーです。追加してください!
これで、サーバーはNTPプールプロジェクトの一部になりました。 http://www.pool.ntp.org/scores/your_server_ip
にアクセスして、NTPプールの監視システムがサーバーに関して収集した情報を確認してください。 サーバーを1時間に数回チェックし、オフセットデータを表示し、システムのスコアと関連付けます。 サーバーが十分な時間を維持し、到達可能である限り、スコアは20ポイントに達するまで上昇します。 プールでは、スコアが10を超えるサーバーのみが使用されます。
接続の問題のトラブルシューティング
サーバーの同期に問題がある場合は、送信パケットをポート123
にドロップするパケットファイアウォールが設置されている可能性があります。 UbuntuでUFWを使用してファイアウォールを設定する方法を参照して、ファイアウォールのステータスを確認する方法を確認してください。
NTPプールプロジェクトの監視ステーションがNTPサーバーに到達できず、サーバースコアが低下している場合、またはサーバーを使用して他のクロックを同期できない場合は、着信をドロップするパケットファイアウォールが設置されている可能性があります。 ポート123
のトラフィック。 ファイアウォールのステータスを確認してください。
ファイアウォールが設置されていないことが確実な場合、または着信トラフィックと発信トラフィックの両方に対してポート123
を開いている場合は、サーバープロバイダーまたは別のトランジットプロバイダーが途中でパケットをドロップしている可能性があります。 これらの問題を自分で解決するための知識がない場合は、コミュニティに相談して支援を求めるのが最善です。 NTPプールプロジェクトフォーラムから始めるのが良いでしょう。 メーリングリストに参加するか、電子メールをNTPプールプロジェクトオペレーターに送信することもできます。 ヘルプを求める前に、問題を解決するためにすでに試みたすべてのステップを表示できることを確認してください。
結論
このチュートリアルでは、独自のタイムサーバーを正常にセットアップし、それをNTPプールプロジェクトのメンバーにして、コミュニティに時間を提供しました。 計時コミュニティと連絡を取り合うため。 NTPプールプロジェクトフォーラムまたはメーリングリストに参加してください。 サーバーのスコアを監視し、必要に応じて調整してください。