Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:ntp_c7 [23.06.2015 13:21. ] – [Tests] django | centos:ntp_c7 [22.07.2019 14:45. ] (aktuell) – django | ||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
Seit CentOS 7 wird neben dem altbekanntem NTP-Daemon **ntp** ein weiterer Daemon Namens **chrony** zur Verfügung gestellt. In Adminkreisen wurde dazu oft spekuliert und argumentiert, | Seit CentOS 7 wird neben dem altbekanntem NTP-Daemon **ntp** ein weiterer Daemon Namens **chrony** zur Verfügung gestellt. In Adminkreisen wurde dazu oft spekuliert und argumentiert, | ||
- | Im Kapitel **[[https:// | + | Im Kapitel **[[https:// |
+ | |||
+ | Eine detailierte Gegenüberstellung von **chronyd**, | ||
<WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
Zeile 15: | Zeile 17: | ||
* chronyd can adjust the rate of the clock on a Linux system in a larger range, which allows it to operate even on machines with a broken or unstable clock. For example, on some virtual machines. | * chronyd can adjust the rate of the clock on a Linux system in a larger range, which allows it to operate even on machines with a broken or unstable clock. For example, on some virtual machines. | ||
</ | </ | ||
- | |||
- | |||
Die nachfolgende Graphik zeigt exemplarisch den Offset mehrerer virtueller CentOS-Systeme. Der Offset wird dabei von einem **[[centos: | Die nachfolgende Graphik zeigt exemplarisch den Offset mehrerer virtueller CentOS-Systeme. Der Offset wird dabei von einem **[[centos: | ||
Zeile 24: | Zeile 24: | ||
Die Server vml000010 bis vml000050 benutzen für den Abgleich der Zeiten das Paket **ntp**; die Server vml000052 bis vml000117 hingegen nutzen den Daemon **chrony**. Bemerkenswert bei diesem Vergleich ist, dass der //Offset// der einzelnen virtuellen Maschinen bei der Verwendung von **chronyd** um den __//Faktor 10 - 100 geringer// | Die Server vml000010 bis vml000050 benutzen für den Abgleich der Zeiten das Paket **ntp**; die Server vml000052 bis vml000117 hingegen nutzen den Daemon **chrony**. Bemerkenswert bei diesem Vergleich ist, dass der //Offset// der einzelnen virtuellen Maschinen bei der Verwendung von **chronyd** um den __//Faktor 10 - 100 geringer// | ||
- | Dies und die Konfigurationsempfehlung von RedHat finden daher bei den Installation Rund um **[[start|Django' | + | Ähnliche Ergebnisse kann man auch beim direkten Vergleich der zur Verfügung stehenden Zeitquellen an einem Host mit Hilfe von **ntpq**. |
+ | # watch -d -n 1 "ntpq -pn4" | ||
+ | |||
+ | < | ||
+ | ============================================================================== | ||
+ | +10.0.0.20 | ||
+ | *10.0.0.57 | ||
+ | +10.0.0.127 | ||
+ | </ | ||
+ | |||
+ | In dem gezeigtem Beispiel wurde der Test auf einem CentOS 6 Host vorgenommen, | ||
+ | * 10.0.0.20 = CentOS 6 NTP-Server mit Hilfe von **ntpd**, | ||
+ | * 10.0.0.57 = CentOS 7 NTP-Server mit Hilfe von **chrony** und | ||
+ | * 10.0.0.127 = CentOS 7 NTP-Server mit Hilfe von **ntpd**. | ||
+ | * | ||
+ | Diese beiden Beispiele | ||
===== chronyd ===== | ===== chronyd ===== | ||
Zeile 4965: | Zeile 4980: | ||
== IPv6 Deaktivierung == | == IPv6 Deaktivierung == | ||
Hat man im eigenen Netz " | Hat man im eigenen Netz " | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | **WICHTIG**: | ||
+ | </ | ||
+ | |||
Das Deaktivieren erfolgt nun nicht, wie man vermutlich annehmen wird über die Konfigurationsdatei // | Das Deaktivieren erfolgt nun nicht, wie man vermutlich annehmen wird über die Konfigurationsdatei // | ||
Im Verzeichnis // | Im Verzeichnis // | ||
Zeile 4972: | Zeile 4992: | ||
OPTIONS=-4 | OPTIONS=-4 | ||
</ | </ | ||
+ | |||
=== Server === | === Server === | ||
== Daemon == | == Daemon == | ||
Zeile 5313: | Zeile 5334: | ||
== IPv6 Deaktivierung == | == IPv6 Deaktivierung == | ||
Hat man im eigenen Netz " | Hat man im eigenen Netz " | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | **WICHTIG**: | ||
+ | </ | ||
+ | |||
Das Deaktivieren erfolgt nun nicht, wie man vermutlich annehmen wird über die Konfigurationsdatei // | Das Deaktivieren erfolgt nun nicht, wie man vermutlich annehmen wird über die Konfigurationsdatei // | ||
Im Verzeichnis // | Im Verzeichnis // | ||
Zeile 5320: | Zeile 5346: | ||
OPTIONS=-4 | OPTIONS=-4 | ||
</ | </ | ||
+ | |||
+ | == Paketfilter - firewalld == | ||
+ | Damit unsere Clients Verbindungen zu dem geöffneten **UDP**-Port **ntp/123** chrony-Daemons aufbauen können müssen wir für diese noch Änderungen am Paketfilter **firewalld** vornehmen. | ||
+ | |||
+ | Unter **CentOS 7** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbindungen kurz getrennt werden. Sondern unsere Änderungen können **// | ||
+ | |||
+ | Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.57**, | ||
+ | |||
+ | # firewall-cmd --permanent --zone=public --add-rich-rule=" | ||
+ | |||
+ | | ||
+ | |||
+ | Anschließend können wir den Firewall-Daemon einmal durchstarten und anschließend überprüfen, | ||
+ | # firewall-cmd --reload | ||
+ | |||
+ | | ||
+ | |||
+ | Abschließend prüfen wir noch, ob die Erweiterung unseres Paketfilter aktiv ist. | ||
+ | # iptables -nvL IN_public_allow | ||
+ | < | ||
+ | pkts bytes target | ||
+ | 205 15580 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 2 112 ACCEPT | ||
+ | </ | ||
+ | |||
+ | == DHCP == | ||
+ | Damit unsere Cliens auch von [[centos: | ||
+ | |||
+ | Wir editieren also unsere **/ | ||
+ | | ||
+ | |||
+ | | ||
+ | Abschließend restarten wir unseren DHCP-Server. | ||
+ | | ||
+ | |||
==== Start des Daemon ==== | ==== Start des Daemon ==== | ||
Zeile 5340: | Zeile 5402: | ||
Damit der Daemon **chrony** automatisch bei jedem Systemstart startet, kann die Einrichtung eines Start-Scriptes über folgenden Befehl erreicht werden: | Damit der Daemon **chrony** automatisch bei jedem Systemstart startet, kann die Einrichtung eines Start-Scriptes über folgenden Befehl erreicht werden: | ||
# systemctl enable chronyd.service | # systemctl enable chronyd.service | ||
+ | |||
+ | ln -s '/ | ||
Ein Überprüfung ob der Dienst (Daemon)**chrony** | Ein Überprüfung ob der Dienst (Daemon)**chrony** | ||
Zeile 5348: | Zeile 5412: | ||
==== Tests ==== | ==== Tests ==== | ||
+ | === Daemon === | ||
Als ersten Test überprüfen wir, ob der Service **chronyd** geladen und ausgeführt wird. Hierzu benutzen wir folgenden Befehl. | Als ersten Test überprüfen wir, ob der Service **chronyd** geladen und ausgeführt wird. Hierzu benutzen wir folgenden Befehl. | ||
# systemctl status chronyd.service | # systemctl status chronyd.service | ||
Zeile 5364: | Zeile 5429: | ||
# netstat -paunt | grep 123 | # netstat -paunt | grep 123 | ||
+ | Betreiben wir unseren chrony Daemon im Servermode wird dann natürlich der Port **123** auf den konfigurierten Netzwerkadressen gebunden. | ||
+ | # netstat -paunt | grep 123 | ||
+ | udp 0 0 0.0.0.0: | ||
+ | udp6 | ||
+ | |||
+ | |||
+ | |||
+ | === Checking chrony Sources === | ||
+ | Welche Server vom lokalen Daemon benutzt werden kann mit Hilfe des Befehls **chronyc sources** abgefragt werden. | ||
+ | # chronyc sources | ||
+ | |||
+ | 210 Number of sources = 3 | ||
+ | MS Name/IP address | ||
+ | | ||
+ | ^- liste.cc | ||
+ | ^* stratum2-3.NTP.TechFak.NE | ||
+ | ^- alpha.linux.gq | ||
+ | |||
+ | |||
+ | Die einzelnen Spalten haben folgende Bedeutung: | ||
+ | * **M** \\ Zeigt den Modus der Angezeigten Quelle, | ||
+ | * **^** steht für einen NTP-Server, | ||
+ | * **=** steht für einen Peer-Rechner und | ||
+ | * **#** steht für eine lokal am Host angeschlossene Referenzuhr. | ||
+ | * **S** \\ Zeigt den Status der Zeitquelle an | ||
+ | * **%%*%%** bedeutet, der chrony-Daemon hat sich mit der Quelle synchronisiert. | ||
+ | * **+** die Quelle wird als akzeptabl gewertet, die mit der ausgewählten Quelle kombiniert wird. | ||
+ | * **-** steht für eine akzeptable Quelle, die aber durch die Kombinationsalgorithmus ausgeschlossen wird. | ||
+ | * **?** bedeutet, dass die Verbindung lückenhaft war bzw. abgebrochen ist oder dessen UDP-Pakete nicht alle Tests bestanden haben. | ||
+ | * **x** definiert eine fehlerhafte Quelle, deren Zeitangaben nicht mit den anderen Quellen nicht im Einklang gebracht werden können. | ||
+ | * **~** steht für eine Quelle mit großen Schwankungen und | ||
+ | * **?** Anzeige, dass der Daemon gerade erst gestartet wurde und weniger als 4 Datenpakete empfangen wurden. | ||
+ | * **Name/IP address** \\ Zeigt den Namen bzw. die IP-Adresse der Quelle, Referenz-ID oder der lokalen Referenz-Uhr. | ||
+ | * ** Stratum** \\ Anzeige des Stratum-Wertes von der Quelle an Hand der zuletzt empfangenen Datenpakete. | ||
+ | * **1** wird angezeigt, wenn der Server über eine lokal angeschlossene Referenzuhr verfügt. | ||
+ | * **2** wird angezeigt, wenn der Daemon sich mit einer Quelle synchronisiert hat, die den Wert Stratum 1 inne hat. | ||
+ | * **n** Jede weitere Erhöhung des Stratum-Wertes bedeutet, dass ein weiterer Host zwischen dem chrony-Daemon und dem Zeitnormal mit dem Stratum Wert 1 steht. | ||
+ | * **Poll** \\ Angabe in welchen Abständen die Uhrzeit turnusmäßig synchronisiert wird. Die Zeitspanne errechnet sich bei einem polling-Wert **n = 6** nach (< | ||
+ | * **Reach** \\ Registerwert (Oktalzahl) der empfangenen Datenpakete. Das Register hat hat 8 bit und wird jeweils beim Empfang bzw. etwaigen Verlusten von Datenpaketen angepasst. Ein Wert von 377 zeigt z.B. an, das die letzten acht empfangenen Datenpakete gültig waren. | ||
+ | * **LastRx** \\ In dieser Spalte wird angezeigt, wann zuletzt von der genannten Zeitquelle ein Datenpaket empfangen wurde. Ein reiner Zahlenwert steht für die Angabe in Sekunden, sowie die Buchstaben **m**, **h**, **d** oder **y** jeweils für **Minuten**, | ||
+ | * **Last sample** \\ Hier wird der Offset zwischen der lokalen Zeit und dem empfangenen NTP-UDP-Paket des Zeitservers angezeigt. Der Wert in den eckigen Klammern zeigt die tatsächlich gemessene Abweichung (Offset). Die Werte werden in den Einheiten **ns** für Nanosekunden, | ||
+ | |||
+ | Haben wir uns mit **chronyc** verbunden, können wir uns auch mit der Option **-v** eine Beschreibung der Spalten abrufen. | ||
+ | # chronyc -a | ||
+ | |||
+ | < | ||
+ | Copyright (C) 1997-2003, 2007, 2009-2013 Richard P. Curnow and others | ||
+ | chrony comes with ABSOLUTELY NO WARRANTY. | ||
+ | you are welcome to redistribute it under certain conditions. | ||
+ | GNU General Public License version 2 for details. | ||
+ | |||
+ | 200 OK | ||
+ | chronyc> | ||
+ | </ | ||
+ | |||
+ | | ||
+ | < | ||
+ | |||
+ | .-- Source mode ' | ||
+ | / .- Source state ' | ||
+ | | / '?' | ||
+ | || .- xxxx [ yyyy ] +/- zzzz | ||
+ | || / xxxx = adjusted offset, | ||
+ | || | ||
+ | || \ | zzzz = estimated error. | ||
+ | || | ||
+ | MS Name/IP address | ||
+ | =============================================================================== | ||
+ | ^* char-ntp-pool.charite.de | ||
+ | ^? s1.vlns.de | ||
+ | ^+ funky.fuchsi.de | ||
+ | ^- nandus.lf-net.org | ||
+ | ^+ xen1.hochstaetter.de | ||
+ | chronyc> | ||
+ | </ | ||
+ | === Checking chrony Source Statistics === | ||
+ | Den Status unserer Zeitserverquellen fragen wir mit dem Befehl **chronyc sourcestats** ab. | ||
+ | # chronyc sourcestats | ||
+ | |||
+ | 210 Number of sources = 3 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Die einzelnen Spalten haben folgende Bedeutung: | ||
+ | * **Name / IP-Adresse** \\ Name bzw. die IP-Adresse der Quelle, Referenz-ID oder der lokalen Referenz-Uhr auf den/die sich die folgenden Werte beziehen. | ||
+ | * **NP** \\ Anzahl der Abtastpunkte (sampling points), die derzeit vom Daemon verwendet werden. Die Driftrate und der Offset werden durch eine lineare Regression der Abtastpunkte geschätzt. | ||
+ | * **NR** \\ Anzahl der Durchläufe der Restwertberechnungen mit dem gleichen Vorzeichen nach der letzten Regression. Sobald dieser wert unter die Anzahl der Abtastpunkte (sampling points) ist dies ein Anzeichen, dass die Werte nicht mehr optimal linear berechnet werden können. Wird die Anzahl der Durchläufe zu klein, führt chronyd basieren auf alte bekannte Daten eine neu Regression durch, bis der wert wieder in einem akzeptablen Bereich liegt. | ||
+ | * **Span** \\ Abstand zwischen dem ältesten und neuesten Sample. Wird keine Einheit angegeben, werden Sekunden angezeigt; **m** steht für Minuten. | ||
+ | * **Frequency** \\ geschätzte Restfrequenz, | ||
+ | * **Freq Skew** \\ geschätzte Fehlergrenzen des Werts // | ||
+ | * **Offset** \\ geschätzter Offset der Quelle. | ||
+ | * **Std Dev** \\ geschätzte Standardabweichung der Stichprobe. | ||
+ | |||
+ | Haben wir uns mit **chronyc** verbunden, können wir uns auch mit der Option **-v** eine Beschreibung der Spalten abrufen. | ||
+ | # chronyc -a | ||
+ | |||
+ | < | ||
+ | Copyright (C) 1997-2003, 2007, 2009-2013 Richard P. Curnow and others | ||
+ | chrony comes with ABSOLUTELY NO WARRANTY. | ||
+ | you are welcome to redistribute it under certain conditions. | ||
+ | GNU General Public License version 2 for details. | ||
+ | |||
+ | 200 OK | ||
+ | chronyc> | ||
+ | </ | ||
+ | |||
+ | | ||
+ | < | ||
+ | .- Number of sample points in measurement set. | ||
+ | / .- Number of residual runs with same sign. | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Name/IP Address | ||
+ | ============================================================================== | ||
+ | char-ntp-pool.charite.de | ||
+ | s1.vlns.de | ||
+ | funky.fuchsi.de | ||
+ | nandus.lf-net.org | ||
+ | xen1.hochstaetter.de | ||
+ | </ | ||
+ | |||
+ | === Checking chrony Tracking === | ||
+ | Die Anzeige der System Zeit Informationen fragen wir mit dem Befehl **chronyc tracking** ab. | ||
+ | # chronyc tracking | ||
+ | |||
+ | < | ||
+ | Stratum | ||
+ | Ref time (UTC) : Thu Jun 25 12:11:40 2015 | ||
+ | System time : 0.000093731 seconds slow of NTP time | ||
+ | Last offset | ||
+ | RMS offset | ||
+ | Frequency | ||
+ | Residual freq : -0.001 ppm | ||
+ | Skew : 0.006 ppm | ||
+ | Root delay : 0.033234 seconds | ||
+ | Root dispersion : 0.002327 seconds | ||
+ | Update interval : 1043.2 seconds | ||
+ | Leap status | ||
+ | |||
+ | Die einzelnen Werte haben nachfolgend aufgeführte Bedeutungen: | ||
+ | * **Reference ID** \\ Referenz-ID bzw. Name und die IP-Adresse mit dem sich der chrony-Daemon synchronisiert hat. Der Wert **127.127.1.1** zeigt an, dass sich der Daemon __nicht__ mit einer externen NTP-server synchronisiert hat, sondern dass der Daemon im "lokal mode" befindet, da der Server über eine externe Signalquelle z.B. einer DCF 77 Funkuhr verfügt. | ||
+ | * ** Stratum** \\ Anzeige des Stratum-Wertes von der Quelle an Hand der zuletzt empfangenen Datenpakete. | ||
+ | * **1** wird angezeigt, wenn der Server über eine lokal angeschlossene Referenzuhr verfügt. | ||
+ | * **2** wird angezeigt, wenn der Daemon sich mit einer Quelle synchronisiert hat, die den Wert Stratum 1 inne hat. | ||
+ | * **n** Jede weitere Erhöhung des Stratum-Wertes bedeutet, dass ein weiterer Host zwischen dem chrony-Daemon und dem Zeitnormal mit dem Stratum Wert 1 steht. | ||
+ | * **Ref time (UTC)** \\ Uhrzeit ([[https:// | ||
+ | * **System time** \\ Im normalen Betrieb wird der chrony-Daemon die lokale Zeit nicht in einem Schritt neu stellen, da dies zu ungewollten Effekten führen würde. Chrony word daher zur Anpassung der lokalen Uhrzeit an das externe Ziel durch Veränderungen der Laufgeschwindigkeit der lokalen Uhr anpassen; d.h. die loakel Uhr wird mal schneller oder langsamer als die Uhr des Zeitquelle laufen. Diese Abweichung wird beim Punkt **Ref time (UTC)** angegeben. | ||
+ | * **Last offset** \\ Repräsentiert die geschätze Differenz der lokalen Uhr zur externen Quelle. | ||
+ | * **RMS offset** \\ Dies ist die Anzeige der durchschnittliche Abweichung der lokalen Uhr zur externen Quelle. | ||
+ | * **Frequency** \\ Abweichung der lokalen Uhrzeit vom Zeitnormal, in der Annahme chronyd würde die Zeit nicht anpassen. Der Wert wird in // | ||
+ | * **Residual freq** \\ Anzeige der Restfrequenz (residual frequency) für die aktuell ausgewählte Referenzquelle. Der angezeigte Wert spiegelt einen Unterschied zwischen dem, was die Messung von der Referenzquelle vorgibt un der aktuell von chrony-Daemon verwendeten Frequenz wieder. Der Wert wird dabei niemals den Wert 0 anzeigen, da bei der Berechnung der Frequenzwerte Rundungen verwendet werden. Jedes mal wenn der Frequenzwert des Zeitnormals empfangen wurde und die neue Restfrequenz berechnet wurde, wird die geschätzte Genauigkeit dieses neuen Restwertes mit den vorhandenen Werten verglichen und angezeigt. Je genauer die Messungen der Referenzquelle ist und je stabiler die lokale Uhr läuft um so geringer wird der angezeigte Wert und nähert sich im Idealfall dem Wert 0 an. | ||
+ | * **Skew** \\ Frequenzdrifft in // | ||
+ | * **Root delay** \\ Verzögerung durch Laufzeitunterschiede zwischen dem Straum 1 und dem lokalen Server, die durch Laufzeitunterschiede im Netzwerk aufgetreten sind. | ||
+ | * **Root dispersion** \\ Ungefähre Abweichung (Streuung), bedingt durch statistischen Messschwankungen oder Rundungsdifferenzen, | ||
+ | * **Update interval** \\ Intervall in Sekunden, in der der Daemon die Uhrzeit spätentens aktualisiert. | ||
+ | * **Leap status** \\ Sprungstatus der Uhrzeit, die einen der folgenden Werte aufweisen kann: | ||
+ | * **Normal** normaler Betrieb, also alles in Ordnung, | ||
+ | * **Insert second** Zeit wurde durch Einfügen einer Sekunde verlangsamt, | ||
+ | * **Delete second** Zeit wurde durch Löschen einer Sekunde beschleunigt, | ||
+ | * **Not synchronized** Zeit konnte noch nicht synchronisiert werden. | ||
+ | |||
+ | === Checking chrony Clients === | ||
+ | Betreiben wir unseren chrony-Daemon im Server-Mode, | ||
+ | # chronyc -a | ||
+ | |||
+ | < | ||
+ | Copyright (C) 1997-2003, 2007, 2009-2013 Richard P. Curnow and others | ||
+ | chrony comes with ABSOLUTELY NO WARRANTY. | ||
+ | you are welcome to redistribute it under certain conditions. | ||
+ | GNU General Public License version 2 for details. | ||
+ | |||
+ | 200 OK | ||
+ | chronyc> | ||
+ | </ | ||
+ | |||
+ | Anschließend fragen wir mit dem Befehl **clients** ab, welche Clients sich mit dem Server verbunden haben. | ||
+ | | ||
+ | |||
+ | < | ||
+ | Hostname | ||
+ | ========================= | ||
+ | localhost | ||
+ | 10.0.0.52 | ||
+ | </ | ||
+ | |||
+ | Die einzelnen Werte haben nachfolgend aufgeführte Bedeutungen: | ||
+ | * **Hostname** \\ Hostname oder IP-Adresse des Clients | ||
+ | * **Client** \\ Anzahl der Verbindungen des Clients im NTP client mode | ||
+ | * **Peer** \\ Anzahl der Verbindungen des Clients im NTP symmetric active mode | ||
+ | * **CmdAuth** \\ Anzahl der authentifizierten Steuerpakete die vom Client bis jetzt erfolgreich, | ||
+ | * **CmdNorm** \\ Anzahl der __nicht__ authentifizierten Steuerpakete die vom Client bis jetzt abgesetzt wurden. | ||
+ | * **CmdBad** \\ Anzahl der erfolglosen Versuche Steuerpakete die vom Client bis jetzt abgesetzt wurden. | ||
+ | * **LstN** \\ Zeit seit dem das letzte NTP Pakete empfangen wurde | ||
+ | * **LstC** \\ Zeit seit dem das letzte Steuerpaket/ | ||
+ | |||
+ | ==== Fazit ==== | ||
+ | <WRAP center round info 85%> | ||
+ | Betrachtet man nun abschließend die Konfigurationsmöglichkeiten von chrony, kann man unter anderem folgendes Resümee ziehen: | ||
+ | |||
+ | chronyd eignet sich hervorragend im Virtualisierungsumfeld, | ||
+ | </ | ||
===== ntpd ===== | ===== ntpd ===== | ||
+ | Als Alternative kann man natürlich auch auf den altbekannten NTP-Daemon **ntp** zurückgreifen. | ||
==== Installation ==== | ==== Installation ==== | ||
+ | Wurde bei der Erstinstallation der unter CentOS 7 standardmäßig vorgegebene NTP-Daemon noch nicht vom System entfernt, holen wir dies nun kurz nach. | ||
+ | # yum remove chrony -y | ||
+ | |||
+ | Nun installieren wir den NTP-Daemon **ntp** mit Hilfe des Paketverwaltungsprogramms **yum**. | ||
+ | # yum install ntp -y | ||
+ | |||
+ | |||
+ | |||
==== Dokumentation ==== | ==== Dokumentation ==== | ||
+ | Was uns das Paket alles mitgebracht hat, zeigt uns der Aufruf vom Befehl **rpm** mit der Option **// | ||
+ | # rpm -qil ntp | ||
+ | |||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Architecture: | ||
+ | Install Date: Fri 26 Jun 2015 09:48:07 AM CEST | ||
+ | Group : System Environment/ | ||
+ | Size : 1429916 | ||
+ | License | ||
+ | Signature | ||
+ | Source RPM : ntp-4.2.6p5-19.el7.centos.src.rpm | ||
+ | Build Date : Sat 20 Dec 2014 03:38:17 AM CET | ||
+ | Build Host : worker1.bsys.centos.org | ||
+ | Relocations : (not relocatable) | ||
+ | Packager | ||
+ | Vendor | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The Network Time Protocol (NTP) is used to synchronize a computer' | ||
+ | time with another reference time source. This package includes ntpd | ||
+ | (a daemon which continuously adjusts system time) and utilities used | ||
+ | to query and configure the ntpd daemon. | ||
+ | |||
+ | Perl scripts ntp-wait and ntptrace are in the ntp-perl package, | ||
+ | ntpdate is in the ntpdate package and sntp is in the sntp package. | ||
+ | The documentation is in the ntp-doc package. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Die Beschreibungen der einzelnen Befehle findet man in deren **manpage**' | ||
+ | |||
==== Konfiguration ==== | ==== Konfiguration ==== | ||
+ | === Client === | ||
+ | In diesem Konfigurationsbeispiel widmen wir uns einem CentOS 7 Client, der von einem bekannten NTP-Server die Uhrzeit holen und auch synchron halten soll. Ob ein eigener Zeitserver im eigenen **Netzwerk** oder ein **öffentlicher NTP-Server** genutzt werden soll, ist konfigurationstechnisch egal, unterschieden sich beide System i.d.R. nur im Namen oder der zugehörigen IP-Adresse. | ||
+ | |||
+ | Die Konfiguration unseres NTP-Daemon, oder genauer gesagt eines NTP-Clients **ntp**, erfolgt über die Datei // | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # ntp.conf(5), | ||
+ | |||
+ | driftfile / | ||
+ | |||
+ | # Permit time synchronization with our time source, but do not | ||
+ | # permit the source to query or modify the service on this system. | ||
+ | restrict default kod nomodify notrap nopeer noquery | ||
+ | restrict -6 default kod nomodify notrap nopeer noquery | ||
+ | |||
+ | # Permit all access over the loopback interface. | ||
+ | # be tightened as well, but to do so would effect some of | ||
+ | # the administrative functions. | ||
+ | restrict 127.0.0.1 | ||
+ | restrict -6 ::1 | ||
+ | |||
+ | # Hosts on local network are less restricted. | ||
+ | #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap | ||
+ | |||
+ | # Use public servers from the pool.ntp.org project. | ||
+ | # Please consider joining the pool (http:// | ||
+ | # Django : 2015-06-06 | ||
+ | # default: server 0.centos.pool.ntp.org iburst | ||
+ | # server 1.centos.pool.ntp.org iburst | ||
+ | # server 2.centos.pool.ntp.org iburst | ||
+ | # server 3.centos.pool.ntp.org iburst | ||
+ | server time.dmz.nausch.org iburst | ||
+ | server 10.0.0.57 iburst | ||
+ | server 10.0.0.127 iburst | ||
+ | |||
+ | #broadcast 192.168.1.255 autokey | ||
+ | # | ||
+ | #broadcast 224.0.1.1 autokey | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # Enable public key cryptography. | ||
+ | #crypto | ||
+ | |||
+ | includefile / | ||
+ | |||
+ | # Key file containing the keys and key identifiers used when operating | ||
+ | # with symmetric key cryptography. | ||
+ | keys / | ||
+ | |||
+ | # Specify the key identifiers which are trusted. | ||
+ | #trustedkey 4 8 42 | ||
+ | |||
+ | # Specify the key identifier to use with the ntpdc utility. | ||
+ | #requestkey 8 | ||
+ | |||
+ | # Specify the key identifier to use with the ntpq utility. | ||
+ | #controlkey 8 | ||
+ | |||
+ | # Enable writing of statistics records. | ||
+ | #statistics clockstats cryptostats loopstats peerstats | ||
+ | </ | ||
+ | |||
+ | In der sehr übersichtlichen Konfigurationsdatei ist für unserem Client hauptsächlich die Zeile **server time.dmz.nausch.org iburst** von Interesse. Hier haben wir angegeben, mit welchem oder welchen internen Zeitserver(n) sich der Client sich synchronisieren soll. | ||
+ | |||
+ | |||
=== Server === | === Server === | ||
- | === Clients === | + | == Daemon |
+ | Im zweiten Konfigurationsbeispiel widmen wir uns einem CentOS 7 Server, der von mehreren vertrauenswürdigen NTP-Server im Internet die Uhrzeit holen und auch synchron halten soll. | ||
+ | |||
+ | Die Konfiguration unseres NTP-Daemon, oder genauer gesagt unseres NTP-Servers mit Hilfe von **ntüp**, erfolgt über die Datei // | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # ntp.conf(5), | ||
+ | |||
+ | driftfile / | ||
+ | |||
+ | # 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 | ||
+ | |||
+ | # Permit all access over the loopback interface. | ||
+ | # be tightened as well, but to do so would effect some of | ||
+ | # the administrative functions. | ||
+ | restrict 127.0.0.1 | ||
+ | restrict ::1 | ||
+ | |||
+ | # Hosts on local network are less restricted. | ||
+ | # Django : 2015-06-26 | ||
+ | # interne Netze definiert, die den Zeitserver kontaktieren dürfen | ||
+ | # default: #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap | ||
+ | restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap | ||
+ | restrict 10.0.10.0 mask 255.255.255.192 nomodify notrap | ||
+ | |||
+ | # Use public servers from the pool.ntp.org project. | ||
+ | # Please consider joining the pool (http:// | ||
+ | server 0.centos.pool.ntp.org iburst | ||
+ | server 1.centos.pool.ntp.org iburst | ||
+ | server 2.centos.pool.ntp.org iburst | ||
+ | server 3.centos.pool.ntp.org iburst | ||
+ | |||
+ | #broadcast 192.168.1.255 autokey | ||
+ | # | ||
+ | #broadcast 224.0.1.1 autokey | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # Enable public key cryptography. | ||
+ | #crypto | ||
+ | |||
+ | includefile / | ||
+ | |||
+ | # Key file containing the keys and key identifiers used when operating | ||
+ | # with symmetric key cryptography. | ||
+ | keys / | ||
+ | |||
+ | # Specify the key identifiers which are trusted. | ||
+ | #trustedkey 4 8 42 | ||
+ | |||
+ | # Specify the key identifier to use with the ntpdc utility. | ||
+ | #requestkey 8 | ||
+ | |||
+ | # Specify the key identifier to use with the ntpq utility. | ||
+ | #controlkey 8 | ||
+ | |||
+ | # Enable writing of statistics records. | ||
+ | #statistics clockstats cryptostats loopstats peerstats | ||
+ | |||
+ | # Disable the monitoring facility to prevent amplification attacks using ntpdc | ||
+ | # monlist command when default restrict does not include the noquery flag. See | ||
+ | # CVE-2013-5211 for more details. | ||
+ | # Note: Monitoring will not be disabled with the limited restriction flag. | ||
+ | disable monitor | ||
+ | </ | ||
+ | |||
+ | /* | ||
+ | Jul 10 14:34:33 pml010002 kernel: usb 3-1: USB disconnect, device number 2 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: new full speed USB device number 12 using ohci_hcd | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: New USB device found, idVendor=0403, | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Product: Expert mouseCLOCK USB II | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Manufacturer: | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: SerialNumber: | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: configuration #1 chosen from 1 choice | ||
+ | Jul 10 14:34:37 pml010002 kernel: ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Detected FT232RL | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Number of endpoints 2 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Endpoint 1 MaxPacketSize 64 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Endpoint 2 MaxPacketSize 64 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: Setting MaxPacketSize 64 | ||
+ | Jul 10 14:34:37 pml010002 kernel: usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB1 | ||
+ | */ | ||
+ | == IPv6 Deaktivierung == | ||
+ | Hat man im eigenen Netz " | ||
+ | |||
+ | Das Deaktivieren erfolgt nun nicht, wie man vermutlich annehmen wird über die Konfigurationsdatei // | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # Django : 2015-06-26 | ||
+ | # disable IPv6 support | ||
+ | # default: OPTIONS=" | ||
+ | OPTIONS=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | == Paketfilter - firewalld == | ||
+ | Damit unsere | ||
+ | |||
+ | Unter **CentOS 7** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbindungen kurz getrennt werden. Sondern unsere Änderungen können **// | ||
+ | |||
+ | Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.57**, | ||
+ | |||
+ | # firewall-cmd --permanent --zone=public --add-rich-rule=" | ||
+ | |||
+ | | ||
+ | |||
+ | Anschließend können wir den Firewall-Daemon einmal durchstarten und anschließend überprüfen, | ||
+ | # firewall-cmd --reload | ||
+ | |||
+ | | ||
+ | |||
+ | Abschließend prüfen wir noch, ob die Erweiterung unseres Paketfilter aktiv ist. | ||
+ | # iptables -nvL IN_public_allow | ||
+ | < | ||
+ | pkts bytes target | ||
+ | 205 15580 ACCEPT | ||
+ | 0 0 ACCEPT | ||
+ | 2 112 ACCEPT | ||
+ | </ | ||
+ | |||
+ | == DHCP == | ||
+ | Damit unsere Cliens auch von [[centos: | ||
+ | |||
+ | Wir editieren also unsere **/ | ||
+ | | ||
+ | |||
+ | | ||
+ | Abschließend restarten wir unseren DHCP-Server. | ||
+ | | ||
==== Start des Daemon ==== | ==== Start des Daemon ==== | ||
+ | === manueller Start des Daemon === | ||
+ | Möchten wir unseren Daemon starten, benutzen wir den folgenden Befehlsaufruf. | ||
+ | # systemctl start ntpd | ||
+ | |||
+ | Im syslog unseres Servers wird uns der Start unseres NTP-Daemons entsprechend vermerkt. | ||
+ | # tail -f / | ||
+ | < | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28371]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127 systemd: Started Network Time Service. | ||
+ | Jun 26 10:53:10 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127 ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127 ntpd[28372]: | ||
+ | </ | ||
+ | |||
+ | === automatischer Start des Daemon === | ||
+ | Damit der Daemon **ntpd** automatisch bei jedem Systemstart startet, kann die Einrichtung eines Start-Scriptes über folgenden Befehl erreicht werden: | ||
+ | # systemctl enable ntpd.service | ||
+ | |||
+ | ln -s '/ | ||
+ | |||
+ | Ein Überprüfung ob der Dienst (Daemon)**ntpd** | ||
+ | # systemctl is-enabled ntpd.service | ||
+ | |||
+ | | ||
+ | |||
+ | |||
==== Tests ==== | ==== Tests ==== | ||
+ | === Daemon === | ||
+ | Als ersten Test überprüfen wir, ob der Service **ntpd** geladen und ausgeführt wird. Hierzu benutzen wir folgenden Befehl. | ||
+ | # systemctl status ntpd.service | ||
+ | < | ||
+ | | ||
+ | | ||
+ | Main PID: 28372 (ntpd) | ||
+ | | ||
+ | | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:09 vml000127.dmz.nausch.org systemd[1]: Started Network Time Service. | ||
+ | Jun 26 10:53:10 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | Jun 26 10:53:10 vml000127.dmz.nausch.org ntpd[28372]: | ||
+ | </ | ||
+ | Mit nachfolgendem Befehlsaufruf können wir überprüfen ob und ggf. auf welchen Netzwerkinterfaces der **ntpd** den **UDP** Port **123** geöffnet hat. | ||
+ | # netstat -paunt | grep 123 | ||
+ | |||
+ | udp 0 0 10.0.10.4: | ||
+ | udp 0 0 10.0.0.127: | ||
+ | udp 0 0 127.0.0.1: | ||
+ | udp 0 0 0.0.0.0: | ||
+ | udp6 | ||
+ | udp6 | ||
+ | udp6 | ||
+ | udp6 | ||
+ | |||
+ | |||
+ | Mit dem Befehl **watch ntpq -np** können wir uns abschließend den Status unseres Timeservers anzeigen lassen (Die Synchronisation unter Umständen bis zu 30 Minuten dauern - diese Zeit muss ggf. gewartet werden) | ||
+ | < | ||
+ | zeigt uns an: | ||
+ | < | ||
+ | |||
+ | | ||
+ | ============================================================================== | ||
+ | +81.169.180.23 | ||
+ | +88.198.23.16 | ||
+ | +88.198.8.101 | ||
+ | *193.175.73.151 | ||
+ | </ | ||
+ | |||
+ | An Hand des **%%*%%** am Zeilenanfang ist zu erkennen, dass Synchronisation erfolgt. Die Spalten haben folgende Bedeutung: | ||
+ | * **remote** \\ Mit welchen Servern ist mein Zeitserver verbunden? | ||
+ | * **refid** \\ Von welcher Zeitquelle stammt die Zeit? | ||
+ | * **st** \\ Anzeige des Stratum-Wertes von der Quelle an Hand der zuletzt empfangenen Datenpakete. | ||
+ | * **1** wird angezeigt, wenn der Server über eine lokal angeschlossene Referenzuhr verfügt. | ||
+ | * **2** wird angezeigt, wenn der Daemon sich mit einer Quelle synchronisiert hat, die den Wert Stratum 1 inne hat. | ||
+ | * **n** Jede weitere Erhöhung des Stratum-Wertes bedeutet, dass ein weiterer Host zwischen dem chrony-Daemon und dem Zeitnormal mit dem Stratum Wert 1 steht. | ||
+ | * **t** \\ Welchen Typs ist die Zeitquelle? | ||
+ | * **u** = unicast, | ||
+ | * **m** = multicast, | ||
+ | * **l** = lokal, | ||
+ | * **-** = unbekannt | ||
+ | * **when** \\ Vor wieviel Sekunden wurde beim Server zuletzt angefragt ? | ||
+ | * **poll** \\ Wie oft wird mit diesem Server syncronisiert? | ||
+ | * **reach** \\ Registerwert (Oktalzahl) der empfangenen Datenpakete. Das Register hat hat 8 bit und wird jeweils beim Empfang bzw. etwaigen Verlusten von Datenpaketen angepasst. Ein Wert von 377 zeigt z.B. an, das die letzten acht empfangenen Datenpakete gültig waren und somit alles bestens ist. | ||
+ | * **delay** \\ Verzögerung durch Laufzeitunterschiede zwischen dem externen Zeitserver und dem lokalen Server. | ||
+ | * **offset** \\ Repräsentiert die geschätze Differenz der lokalen Uhr zur externen Quelle. | ||
+ | * **jitter** \\ Abweichung in Millisekunden | ||
====== Links ====== | ====== Links ====== | ||
Zeile 5386: | Zeile 6041: | ||
* Zurück zur **[[http:// | * Zurück zur **[[http:// | ||
- | ~~DISCUSSION~~ | + | |