Einführung
Genaue Zeitmessung ist für fast jeden Dienst oder jede Software von entscheidender Bedeutung. E-Mails, Logger, Ereignissysteme und Scheduler, Benutzerauthentifizierungsmechanismen und Dienste, die auf verteilten Plattformen ausgeführt werden, benötigen genaue Zeitstempel, um Ereignisse in chronologischer Reihenfolge aufzuzeichnen. Diese Dienste verwenden das Network Time Protocol (NTP), um die Systemuhr mit einer vertrauenswürdigen externen Quelle zu synchronisieren. Diese Quelle kann eine Atomuhr, ein GPS-Empfänger oder ein anderer Zeitserver sein, der bereits NTP verwendet.
Hier kommt das Projekt NTP Pool Project ins Spiel. Es ist ein riesiger weltweiter Cluster von Zeitservern, der zig Millionen von Kunden auf der ganzen Welt einfachen Zugriff auf bekannte „gute Zeiten“ bietet. Es ist der Standard-Zeitserver für Ubuntu und die meisten anderen großen Linux-Distributionen sowie für viele vernetzte Appliances und Softwareanwendungen.
In diesem Handbuch richten Sie NTP auf Ihrem Server ein und konfigurieren ihn als Teil des NTP-Poolprojekts, damit andere Benutzer des NTP-Poolprojekts genaue Zeit erhalten. Die Bereitstellung Ihrer freien CPU-Zyklen und ungenutzter Bandbreite ist eine perfekte Möglichkeit, der Community etwas zurückzugeben.
Die erforderliche Bandbreite ist relativ gering und kann je nach bereitgestellter Menge und Standort Ihres Servers angepasst werden. Jeder Client sendet nur alle 20 Minuten ein paar UDP-Pakete, sodass die meisten Server nur etwa ein Dutzend NTP-Pakete pro Sekunde empfangen, wobei einige Male am Tag Spitzen von bis zu hundert Paketen pro Sekunde auftreten. Dies führt zu einer Bandbreitennutzung von 10-15Kb / sec mit Spitzen von 50-120Kb / sec.
Es gibt drei grundlegende Anforderungen, die Sie erfüllen müssen, bevor Sie dem NTP-Poolprojekt beitreten:
- Ihr Server muss eine statische IP-Adresse haben.
- Ihr Server muss über eine permanente und stabile Internetverbindung verfügen.
- Ihre IP-Adresse ändert sich nicht oder nur selten (einmal pro Jahr oder weniger).
Bei den meisten cloudbasierten Servern werden die ersten beiden Anforderungen in der Regel automatisch erfüllt. Die dritte Anforderung betont, dass der Beitritt zum NTP-Pool-Projekt eine langfristige Verpflichtung darstellt. Wenn sich Ihre Umstände ändern, ist es natürlich in Ordnung, einen Server aus dem Pool zu nehmen, aber es wird lange dauern (meistens Wochen, aber manchmal Monate oder sogar Jahre), bis der Datenverkehr vollständig verschwindet.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie:
- Ein Centos 7-Server mit konfiguriertem IPv6-Netzwerk. Wenn Sie IPv6-Netzwerke auf einem vorhandenen Droplet konfigurieren müssen, können Sie diesem Lernprogramm folgen.
- Ein sudo-Nicht-Root-Benutzer und eine Firewall, die Sie einrichten können, indem Sie dem Tutorial „Initial Server Setup with CentOS 7“ und dem Abschnitt „Configuring a Basic Firewall“ im Tutorial „Additional Recommended Steps for New CentOS 7 Servers“ folgen.
Schritt 1 — Installieren von NTP
Das NTP-Paket ist standardmäßig nicht installiert. Aktualisieren Sie zuerst Ihre Pakete:
- sudo yum update
Installieren Sie dann NTP:
- sudo yum install ntp
Starten Sie nach Abschluss der Installation den Dienst und konfigurieren Sie ihn so, dass er bei jedem Start des Servers automatisch gestartet wird:
- sudo systemctl start ntpd
- sudo systemctl enable ntpd
Wenn Sie die Firewall wie in den Voraussetzungen angegeben konfiguriert haben, müssen Sie UDP-Datenverkehr für den NTP-Dienst zulassen, um mit dem NTP-Pool kommunizieren zu können:
- sudo firewall-cmd --permanent --add-service=ntp
- sudo firewall-cmd --reload
Weitere Informationen zu FirewallD finden Sie unter Einrichten einer Firewall mit FirewallD unter CentOS 7.
NTP ist jetzt installiert, aber für die Verwendung der Standard-NTP-Poolzeitserver konfiguriert. Lassen Sie uns stattdessen einige bestimmte Zeitserver auswählen.
Schritt 2 – Auswahl eines geeigneten Upstream-Servers
Das NTP-Poolprojekt fordert Betreiber, die dem Pool beitreten möchten, auf, gute lokale Netzwerkzeitserver auszuwählen, anstatt die Standardserver pool.ntp.org
zu verwenden. Dies stellt sicher, dass das NTP-Poolprojekt zuverlässig, schnell und fehlerfrei bleibt. Wenn Sie Ihre Zeitquelle auswählen, möchten Sie eine stabile Netzwerkverbindung ohne Paketverlust und so wenig Hops wie möglich zwischen den Servern.
Das mehrstufige und hierarchische NTP-Protokoll trennt die beteiligten Parteien in Primärserver, Sekundärserver und Clients. Die primären Server heißen Stratum 1 und sind direkt mit der Zeitquelle verbunden, die Stratum 0 genannt wird. Diese Quelle kann eine Atomuhr, ein GPS-Empfänger oder ein Funknavigationssystem sein. Sekundäre Server in der Kette heißen Stratum 2, Stratum 3 und so weiter.
Jeder Server ist auch ein Client. Ein Stratum 2-Client empfängt Zeit von einem vorgelagerten Stratum 1-Server und stellt Zeit für nachgelagerte Stratum 3-Server oder andere Clients bereit. Damit NTP-Pool-Projektmitglieder ordnungsgemäß funktionieren, muss der NTP-Daemon mindestens drei Server konfiguriert haben. Das Projekt empfiehlt mindestens vier und nicht mehr als sieben Quellen.
Das NTP-Pool-Projekt bietet eine Liste der öffentlichen Stratum 1- und Stratum 2-Zeitserver. Die Listen bezeichnen die NTP-Zeitserver, die unter den angegebenen Einschränkungen für den öffentlichen Zugriff verfügbar sind. Sie finden drei Arten:
- OpenAccess: Dieser Zeitserver steht jedem Client offen, der die NTP-Poolnutzungsempfehlungen einhält.
- RestrictedAccess: Dieser Zeitserver hat zusätzlich zu den Empfehlungen zur Verwendung des NTP-Pools einige Zugriffsbeschränkungen.
- GESCHLOSSENZUGANG: Dieser Zeitserver ist geschlossen oder bedarf einer vorherigen Absprache.
Warnung: Verwenden Sie keine Server, die nicht als OpenAccess aufgeführt sind, es sei denn, Sie haben eine entsprechende Genehmigung erhalten.
Besuchen Sie die Stratum 1 Zeitserver Liste. Sie sehen eine Liste wie die folgende:
Sortieren Sie die Liste nach der ISO-Code-Spalte und suchen Sie einen oder zwei Server, die sich geografisch in der Nähe des Rechenzentrums Ihres Servers befinden. Wenn in der Spalte Zugriffsrichtlinie des Servers OpenAccess angegeben ist, können Sie es ohne Probleme verwenden. Wenn „Eingeschränkter Zugriff“ angezeigt wird, klicken Sie auf, um den Eintrag zu öffnen, und lesen Sie die Anweisungen im Feld AccessDetails. Dies bedeutet, dass Sie eine informelle E-Mail an die in ServerContact angegebene Adresse senden müssen, um den Serverbetreiber über Ihren Wunsch zu informieren, diesen Zeitserver als Zeitquelle für Ihr NTP-Pool-Projektmitglied zu verwenden.
Wenn Sie die Server identifiziert haben, die Sie verwenden möchten, klicken Sie auf den Link für jeden Server in der Spalte ISO und kopieren Sie den Hostnamen oder die IP-Adresse. Sie verwenden diese Adressen in Schritt 3.
Wählen Sie als nächstes drei oder vier Server aus der Stratum 2-Liste aus.
Sobald Sie Ihre Zeitserver ausgewählt haben, müssen Sie Ihren NTP-Client für die Verwendung konfigurieren.
Schritt 3 – Konfigurieren von NTP für den Beitritt zum Pool
Um Ihren Server mit dem NTP-Pool zu verwenden und Ihre neuen Zeitserver zu konfigurieren, müssen Sie einige Änderungen an der Konfiguration Ihres NTP-Daemons vornehmen. Bearbeiten Sie dazu die Datei /etc/ntp.conf
:
- sudo vi /etc/ntp.conf
Stellen Sie zunächst sicher, dass eine Driftdatei konfiguriert ist. Eine Driftdatei speichert den Frequenzversatz zwischen der Systemuhr, die mit ihrer Nennfrequenz läuft, und der Frequenz, die erforderlich ist, um mit der korrekten Zeit synchron zu bleiben. Es hilft, eine stabile und genaue Zeit zu erreichen. Sie sollten dies oben in Ihrer Konfigurationsdatei bei einer Standardinstallation finden:
# For more information about this file, see the man pages# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).driftfile /var/lib/ntp/drift...
Entfernen Sie als Nächstes die Standard-Zeitquelleneinträge aus der Konfiguration. Sie suchen nach allen Linien, die das Muster server 0.centos.pool.ntp.org iburst
haben. Wenn Sie eine Standardkonfiguration verwenden, entfernen Sie die hervorgehobenen Zeilen wie im folgenden Beispiel gezeigt:
...# Use public servers from the pool.ntp.org project.# Please consider joining the pool (http://www.pool.ntp.org/join.html).server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst
Ersetzen Sie die Zeilen, die Sie entfernt haben, durch die handverlesenen Server, die Sie im vorherigen Schritt ausgewählt haben.
...server ntp_server_hostname_1 iburstserver ntp_server_hostname_2 iburstserver ntp_server_hostname_3 iburstserver ntp_server_hostname_4 iburstserver ntp_server_hostname_5 iburst...
Wir verwenden die Option iburst
für jeden Server gemäß den Empfehlungen des NTP-Pools. Auf diese Weise wird, wenn der Server nicht erreichbar ist, ein Burst von acht Paketen anstelle des üblichen Pakets gesendet. Die Verwendung der Option burst
im NTP-Poolprojekt wird als Missbrauch angesehen, da diese acht Pakete in jedem Abfrageintervall gesendet werden, während iburst
die acht Pakete nur beim ersten Mal sendet.
Stellen Sie als Nächstes sicher, dass die Standardkonfiguration keine Verwaltungsabfragen zulässt. Wenn Sie dies nicht tun, kann Ihr Server für NTP-Reflection-Angriffe verwendet werden oder für ntpq
– und ntpdc
-Abfragen anfällig sein, die versuchen, den Status des Servers zu ändern. Überprüfen Sie, ob die Option noquery
zu den Standardzeilen restrict
hinzugefügt wurde. Stellen Sie außerdem sicher, dass Sie die Optionen kod
und limited
hinzufügen, da diese zu eifrige Anfragen von Clients einschränken und eine Ratenbegrenzung erzwingen.
...# Permit time synchronization with our time source, but do not# permit the source to query or modify the service on this system.restrict default nomodify notrap nopeer noquery kod limited# Permit all access over the loopback interface. This could# be tightened as well, but to do so would effect some of# the administrative functions.restrict 127.0.0.1restrict ::1
Weitere Informationen zu den anderen Optionen finden Sie in der offiziellen Dokumentation.
Ihre NTP-Daemon-Konfigurationsdatei sollte jetzt wie folgt aussehen, obwohl Ihre Datei möglicherweise zusätzliche Kommentare enthält, die Sie sicher ignorieren können:
driftfile /var/lib/ntp/ntp.driftrestrict default nomodify notrap nopeer noquery kod limitedrestrict 127.0.0.1restrict ::1server ntp_server_hostname_1 iburstserver ntp_server_hostname_2 iburstserver ntp_server_hostname_3 iburstserver ntp_server_hostname_4 iburstserver ntp_server_hostname_5 iburst
Speichern Sie die Datei und beenden Sie den Editor.
Starten Sie nun den NTP-Dienst neu und lassen Sie Ihren Zeitserver seine Uhr mit den vorgelagerten Servern synchronisieren.
- sudo systemctl restart ntpd
Überprüfen Sie nach einigen Minuten den Zustand Ihres Zeitservers mit dem Befehl ntpq
:
- ntpq -p
Die Ausgabe sollte ähnlich aussehen:
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
Die Spalte remote gibt den Hostnamen der Server an, die der NTP-Daemon verwendet, und die Spalte refid gibt die Quelle an, die die Server verwenden. Für Stratum 1-Server sollte das Refid-Feld GPS, PPS, ACTS oder PTB anzeigen, und Stratum 2 und höhere Server zeigen die IP-Adresse des Upstream-Servers an. Die st-Spalte zeigt die Schicht, und Delay, Offset und Jitter geben Auskunft über die Qualität der Zeitquelle. Niedrigere Werte sind für diese drei Felder besser.
Ihr Zeitserver kann nun Zeit für die Öffentlichkeit bereitstellen. Sie können dies überprüfen, indem Sie ntpdate
von einem anderen Host aus aufrufen:
- ntpdate -q your_server_ip
Die Ausgabe sollte ähnlich aussehen und Ihnen mitteilen, dass der Zeitserver und der Offset angepasst wurden:
Outputserver your_server_ip, stratum 2, offset 0.001172, delay 0.16428 2 Mar 23:06:44 ntpdate: adjust time server your_server_ip offset 0.001172 sec
Sie sind jetzt bereit, Ihren NTP-Server beim NTP-Pool-Projekt zu registrieren, damit andere ihn verwenden können.
Schritt 4 – Hinzufügen des Servers zum NTP-Pool
Um Ihren Server hinzuzufügen, damit andere ihn verwenden können, besuchen Sie manage.ntppool.org und melden Sie sich für ein Konto an. Sie erhalten eine E-Mail von NTP Pool [email protected] sie werden aufgefordert, Ihr Konto zu verifizieren. Bestätigen Sie Ihr Konto, indem Sie den Anweisungen in der E-Mail folgen, und melden Sie sich dann bei manage.ntppool.org .
Sobald Sie angemeldet sind, sehen Sie die einfache Oberfläche zum Hinzufügen von Servern:
Geben Sie die IP-Adresse Ihres Servers ein und klicken Sie auf Senden.
Im nächsten Bildschirm werden Sie aufgefordert, zu überprüfen, ob die Region Ihres Servers identifiziert wurde. Wenn Ihr Server in einer anderen Region als erwartet angezeigt wird, verwenden Sie das Kommentarfeld, um ihn darüber zu informieren.
Wenn Sie zufrieden sind, bestätigen Sie die Eingabe, indem Sie auf Ja klicken, dies ist mein Server, fügen Sie ihn hinzu!
Ihr Server ist jetzt Teil des NTP-Pool-Projekts. Besuchen Sie http://www.pool.ntp.org/scores/your_server_ip
, um Informationen anzuzeigen, die das Überwachungssystem des NTP-Pools über Ihren Server gesammelt hat. Es überprüft Ihren Server einige Male pro Stunde und zeigt Offset-Daten zusammen mit der Punktzahl Ihres Systems an. Solange Ihr Server hält gute Zeit und erreichbar ist, wird die Punktzahl steigen, bis es 20 Punkte erreicht. Im Pool werden nur Server mit einer Punktzahl von mehr als 10 verwendet.
Fehlerbehebung bei Verbindungsproblemen
Wenn Sie Probleme haben, Ihren Server zu synchronisieren, haben Sie möglicherweise eine Paketfirewall eingerichtet, die Ihre ausgehenden Pakete auf Port 123
ablegt. Sehen Sie sich an, wie Sie eine Firewall mit FirewallD unter CentOS 7 einrichten, um zu erfahren, wie Sie den Status der Firewall überprüfen.
Wenn die Überwachungsstation des NTP-Poolprojekts Ihren NTP-Server nicht erreichen kann und Ihr Server-Score sinkt oder Sie Ihren Server nicht verwenden können, um eine andere Uhr zu synchronisieren, haben Sie möglicherweise eine Paketfirewall, die Ihren eingehenden Datenverkehr auf Port 123
ablegt. Überprüfen Sie Ihren Firewall-Status.
Wenn Sie sicher sind, dass keine Firewall vorhanden ist oder Sie Port 123
für eingehenden und ausgehenden Datenverkehr geöffnet haben, werden Ihre Pakete möglicherweise von Ihrem Serveranbieter oder einem anderen Transitanbieter verworfen. Wenn Sie nicht über das Wissen verfügen, um diese Probleme selbst zu lösen, wenden Sie sich am besten an die Community und holen Sie Hilfe ein. Das NTP Pool Projects Forum ist ein guter Anfang. Sie können auch der Mailingliste beitreten oder eine E-Mail an den NTP-Pool-Projektbetreiber senden. Stellen Sie nur sicher, dass Sie alle Schritte anzeigen können, die Sie bereits versucht haben, das Problem zu beheben, bevor Sie um Hilfe bitten.
Fazit
In diesem Tutorial haben Sie erfolgreich Ihren eigenen Zeitserver eingerichtet und ihn zu einem Mitglied des NTP-Poolprojekts gemacht, das der Community Zeit zur Verfügung stellt. Um mit der Zeitmessgemeinschaft in Kontakt zu bleiben. treten Sie dem NTP Pool Projects Forum oder der Mailingliste bei. Achten Sie darauf, die Punktzahl Ihres Servers zu überwachen und alle erforderlichen Anpassungen vorzunehmen.