Eigenen NTP-Server unter Linux installieren und betreiben

Vorwort zur Anleitung:
Diese Anleitung hat einen einfachen Schwierigkeitsgrad.
Installation von Linux und Kenntnisse in der Befehlszeile sind vorausgesetzt.
Ein NTP-Server (Network Time Protocol-Server) ist ein Server, der die genaue Zeit aus einer verlässlichen Quelle bezieht und diese über das Netzwerk an andere Geräte verteilt. NTP dient dazu, die Systemzeit von Computern, Servern, Routern und anderen Geräten zu synchronisieren, um sicherzustellen, dass alle Geräte innerhalb eines Netzwerks die gleiche Zeit anzeigen.
NTP-Server können die Zeit von verschiedenen Quellen beziehen, wie z.B.:
• Atomuhren: Hochpräzise Uhren, die als Referenzquelle für die genaue Zeit dienen.
• GPS-Satelliten: Viele NTP-Server synchronisieren sich mit GPS-Systemen, die präzise Zeitinformationen liefern.
• Andere NTP-Server: Ein NTP-Server kann auch die Zeit von einem anderen, verlässlichen NTP-Server beziehen, der als «Stratum 1»-Server bekannt ist, und diese Zeit an weitere Server weitergeben.
Das Ziel von NTP ist es, die Uhrzeiten auf allen Geräten in einem Netzwerk so genau wie möglich abzugleichen, was für viele Anwendungen wichtig ist, wie etwa für die korrekte Zeitstempelung von Log-Dateien, die Synchronisation von Datenbanken und die Sicherheit (z.B. bei der Validierung von Zertifikaten).

Vorbereitungen / Anforderungen:

Anforderungen
Schwierigkeitsgrad-Installation: Einfach
Schwierigkeitsgrad-Anwendung: Einfach
Erforderliche Kenntnisse: Linux-Befehlszeile
Systemvoraussetzungen:
Basis: Debian
Betriebssystem: Ubuntu Server (Headless)
Festplattenspeicher: Mindestens 10 GB
CPU: Mindestens 1 CPU
RAM: Mindestens 512 MB
Internetverbindung: Verfügbar
Die Systemanforderungen wurden in einer virtualisierten Umgebung getestet.
Tipp:
Wenn du mit Virtualisierung, z.B. ProxMox, vertraut bist, kannst du deine eigenen Server effizient und stromsparend betreiben!
Getestet auf:
  • Ubuntu-Server 22.04
  • Ubuntu-Server 24.10
Installationsablauf:
1. Durchführung von System-Upgrade
2. Statische IP-Adresse festlegen und anwenden
3. (Optional) Hostnamen festlegen
4. Installation und Einstellungen
5. Systembedienung
6. Resümee
Optionale Schritte können weggelassen werden, da sie lediglich unterstützende Funktionen bieten, wie zum Beispiel die Zusammenfassung von Servern in einem Rechenzentrum.
Für den Betrieb in einem Rechenzentrum sollten die optionalen Abläufe jedoch aus Gründen des beruflichen Stolzes in Betracht gezogen werden.

1. Durchführung von System-Upgrade

Vor jeder Installation ist ein System-Update erforderlich:
$> ssh DEINUSER@192.168.1.X
# Stelle eine SSH-Verbindung zu deinem Server her
$> sudo apt update
# Aktualisiere die Paketquellen
$> sudo apt upgrade -y
# Starte das System-Upgrade
$> sudo apt autoclean
# Optional: Entferne überflüssige Pakete
$> sudo apt autoremove
# Optional: Bereinige das System von Abhängigkeiten

2. Statische IP-Adresse festlegen und anwenden

Ein NTP-Server benötigt eine statische IP-Adresse. Alternativ kann auch eine per DHCP zugewiesene feste Adresse verwendet werden, jedoch sollte diese niemals geändert werden.
Es besteht die Möglichkeit, sich selbst vom Server auszuschließen, wenn die IP-Adresse nicht korrekt konfiguriert ist.
$> ip addr
# Liste alle Netzwerkadapter und Informationen auf
$> sudo su
# Wechsel in die Super-User-Shell
$> cd /etc/netplan
# Wechsle ins Netplan-Verzeichnis
$> ls -l
# Zeige alle Dateien im Netplan-Verzeichnis an
$> for i in $( ls ); do mv $i $i.bak; done
# Sichere alle bestehenden Konfigurationen als Backup
$> touch /etc/netplan/01_static_ip.yaml
# Erstelle eine neue Konfigurations-Datei
$> nano /etc/netplan/01_static_ip.yaml
# Öffne die neue Konfigurations-Datei
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18: #Edit this line according to your network interface name.
      dhcp4: no
      addresses:
        - 192.168.1.150/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# Öffne die Datei mit einem Texteditor (Copy-Paste)
# Ersetze ens18 durch den Namen deines Netzwerk-Adapters (siehe Ausgabe von ip addr).
# Ändere die IP-Adresse und die Netzmaske nach Bedarf.
# Passen die DNS-Adressen an, falls erforderlich.
# Überprüfe und passe ggf. die Routen (Gateway) an.
Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> netplan generate && netplan apply
# Wende die neuen Netzwerkeinstellungen an
🚨 Der Server wechselt nun zu einer neuen IP-Adresse, was dazu führt, dass deine SSH-Sitzung unterbrochen wird.

3. (Optional) Hostnamen festlegen

Durch das Ändern des Hostnamens der Server-Station vergibst du einen eindeutigen Namen für das System.
In unserem Fall könnte der Hostname beispielsweise „S4-NTP-Server“ lauten.
Die Hosts-Datei wird verwendet, um auf Server-Ebene IP-Adressen Namen zuzuordnen, die intern genutzt werden. Wenn du den Hostnamen änderst, muss auch der entsprechende Eintrag in der Hosts-Datei aktualisiert werden. Bei produktiven Systemen sollte diese Kleinigkeit unbedingt beachtet werden, da sie ein Zeichen von Berufsethos und Professionalität ist. Für Tests und Experimente ist dies jedoch nicht zwingend erforderlich.
Der neue Hostname muss zwingen der gleiche sein wie auch im Hosts-File.
$> ssh DEINUSER@192.168.1.X
# Wiederherstellen der SSH-Verbindung
$> sudo hostnamectl set-hostname DEINHOSTNAME
# Einen neuen Host-Namen setzen
$> sudo nano /etc/hosts 
# Hosts-Datei öffnen und ändere den markierten Bereich

127.0.0.1 localhost
127.0.1.1 DEINHOSTNAME

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ……..

# Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> sudo reboot
# Server neu starten, damit die Änderungen wirksam werden

4. Installation und Einstellungen

$> ssh DEINUSER@192.168.1.x
# Wiederherstellen der SSH-Verbindung
$> sudo apt install ntp -y
# System installieren
$> sudo systemctl enable ntp.service
# Autostart aktivieren 
$> sudo systemctl restart ntp.service
# System starten

5. Systembedienung

$> sudo systemctl start ntp.service
# Dienst starten
$> sudo systemctl restart ntp.service
# Dienst neustarten 
$> sudo systemctl stop ntp.service
# Dienst stoppen 
$> sudo nano /etc/ntp.conf
# Konfigurationsdatei bearbeiten
$> cat /usr/share/zoneinfo/leap-seconds.list
# Datei der Schaltsekunden
$> cat /var/lib/ntp/ntp.drift
# Drift-Datei
$> sudo apt install nmap -y && nmap localhost
# Ports des Server auflisten
$> man ntp.conf
# Hilfedatei des Dienstes
$> date
# Systemdatum anzeigen
$> sudo apt install ntpdate
# NTP-Date installieren
$> sudo ntpdate 192.168.x.x
# Client-Seite: Zeit aktualisieren
$> sudo ntpdate -u 192.168.x.x
# Server-Seite: Zeit aktualisieren, auf Alternativ-Port
$> sudo apt install ntpstat && ntpstat
# Zusätzliche NTP-Informationen
$> ntpq -p
# Peer-Report
$> ntpq
ntpq> sysinfo
# Detailierte NTP-Informationen

6. Störungsanalyse

Statische IP-Adresse wird nicht gesetzt:
Beachte, dass die Netzwerk-Konfiguration im YAML-Stil erfolgt. Die „Incidents“ (Einschübe des Textes) sind essenziell.
Einige CLI-Befehle benötigen ungewöhnlich lange…
Wenn du den optionalen Teil dieser Anleitung befolgt hast, überprüfe, ob der Hostname des Servers mit der Hosts-Datei übereinstimmt!
Der NTP-Dienst braucht ungewöhnlich lange bis die Zeit aktualisiert wird
Wenn der NTP-Server nicht sofort funktioniert, liegt das meist daran, dass der Dienst nicht besonders schnell ist. Die Zeit-Synchronisation benötigt nach der Installation eine gewisse Zeit, bis sie abgeschlossen ist – das sollte man als ersten wichtigen Punkt berücksichtigen.
Der Zeitabgleich auf einem Client schlägt fehl
Fehler beim Zeitabgleich können sowohl auf der Client-Seite als auch auf dem Host selbst auftreten und haben unterschiedliche Ursachen. Der interne Zeitabgleich des Hosts ist eigentlich nicht zwingend erforderlich, aber viele Anwender versuchen, die Zeit-Synchronisation über genau diesen Server durchzuführen – unter anderem, weil sie sich bereits per SSH auf dem Host eingeloggt haben. 
Auch der durchschnittliche Linux-Nutzer möchte verständlicherweise nicht auf diese Möglichkeit verzichten. In diesem Fall kann die Synchronisation über einen „unprivileged“ Port erfolgen. Diese Option löst häufig auch Firewall-
Probleme und andere Hürden.
Der NTP-Server ist nicht erreichbar oder die Zeit kann nicht synchronisiert werden
Ein wichtiger Hinweis dazu: Es kommt vor, dass auf dem Betriebssystem bereits andere Zeit-
Synchronisationsdienste vorinstalliert sind, die denselben Port und dieselben Ressourcen
verwenden. Eine gezielte Deinstallation dieser Dienste kann oft das Problem lösen.

Für den Client, also auch den NTP-Server, gilt oft dasselbe – allerdings kann die Synchronisation in der Regel lokal
durchgeführt werden. Es ist nicht ungewöhnlich, dass diese Stationen dies nicht automatisch
erledigen. Ein Eintrag in die Cron-Job-Datei kann dieses Problem jedoch auf einfache Weise
lösen.
Was ist der seltene Time-Warb Fehler?
Einige haben auch schon die „Time-Warp“-Meldung erlebt, die darauf hinweist, wie wichtig eine
korrekte Zeit für viele Dienste ist, die wir oft gar nicht bemerken. Diese Meldung verdeutlicht,
dass ein zuverlässiger Zeit-Server ein unverzichtbares „Must-Have“ ist.
Um diesen seltenen Fehler zu beheben, kann es schon genügen die lokale System-Zeit
abzugleichen
Fazit: Systemfehler, die mit der lokalen Zeit zusammenhängen, äußern sich häufig durch
unerwartete Fehlermeldungen, die tiefere Probleme in den Programmen anzeigen.