Benutzer-Werkzeuge

Webseiten-Werkzeuge


zeitserver_ntp

Dies ist eine alte Version des Dokuments!


Zeitserver NTP

openntpd

Ubuntu 18.04.5 LTS

[root@linux ~]# apt install ntpstat ntpdate openntpd
[root@linux ~]# service openntpd start
/etc/openntpd/ntpd.conf
server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
> apt update ; apt install ntpstat ntpdate openntpd ; echo 'server 192.168.77.5' > /etc/openntpd/ntpd.conf ; service openntpd stop ; ntpdate 192.168.77.5 ; service openntpd start

timesyncd

https://wiki.ubuntuusers.de/systemd/timesyncd/

wenn ntp installiert ist, dann ist timesyncd automatisch deaktiviert; deshalb muss sichergestellt werden, dass ntp deinstalliert ist:

> apt purge ntp openntpd
/etc/systemd/timesyncd.conf
NTP=0.de.pool.ntp.org 1.de.pool.ntp.org 2.de.pool.ntp.org
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048

Start

> service systemd-timesyncd status

Über den folgenden Befehl kann der Status von timesyncd abgefragt werden:

> timedatectl status 

Mit folgenden Befehlen kann der Dienst gestoppt und wieder gestartet werden:

> timedatectl set-ntp 0 #deaktivieren
> timedatectl set-ntp 1 #aktivieren 

Den gleichen Effekt erreicht man auch, wenn man über systemctl die Service-Unit systemd-timesyncd.service deaktiviert bzw. aktiviert.

ntpd

> vi /etc/ntp.conf
...
pool ptbtime1.ptb.de iburst
pool ptbtime2.ptb.de iburst
pool ptbtime3.ptb.de iburst
pool 0.de.pool.ntp.org iburst
pool 1.de.pool.ntp.org iburst
pool 2.de.pool.ntp.org iburst
pool 3.de.pool.ntp.org iburst
pool ntp1.t-online.de iburst
pool ntp0.freenet.de iburst
pool 0.europe.pool.ntp.org iburst
pool 1.europe.pool.ntp.org iburst
pool 2.europe.pool.ntp.org iburst
pool 3.europe.pool.ntp.org iburst

> service ntpd restart
> ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ptbtime1.ptb.de .POOL.          16 p    -   64    0    0.000    0.000   0.001
 ptbtime2.ptb.de .POOL.          16 p    -   64    0    0.000    0.000   0.001
 ptbtime3.ptb.de .POOL.          16 p    -   64    0    0.000    0.000   0.001
 0.de.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 1.de.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 2.de.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 3.de.pool.ntp.o .POOL.          16 p    -   64    0    0.000    0.000   0.001
 ntp1.t-online.d .POOL.          16 p    -   64    0    0.000    0.000   0.001
 ntp0.freenet.de .POOL.          16 p    -   64    0    0.000    0.000   0.001
 0.europe.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 1.europe.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 2.europe.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001
 3.europe.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.001

auf Ubuntu die Zeitzone einstellen:

dpkg-reconfigure tzdata

Um die System-Uhr immer genau zu haben, braucht man jemanden, der sie immer im Auge hat und ggf. korrigiert. Dieser Jemand ist meistens das Programm NTP (Network Time Protocol).

detailierte Statusabfrage:

# echo sysinfo | ntpdc
# ntpdc -4c sysinfo
system peer:          zeitserver.net
system peer mode:     client
leap indicator:       00
stratum:              4
precision:            -22
root distance:        0.02536 s
root dispersion:      0.35634 s
reference ID:         [192.168.1.1]
reference time:       d44524b1.d0db5968  Wed, Nov  7 2012 19:19:29.815
system flags:         auth monitor ntp stats 
jitter:               0.035782 s
stability:            0.000 ppm
broadcastdelay:       0.000000 s
authdelay:            0.000000 s

locale Zeitzone einstellen (MET)

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/MET /etc/localtime

RTC vs. Soft-Clock

Die RTC ist die Uhr auf der Hauptplatine, das Betriebssystem dagegen verwendet eine eigene Uhr, die nur als Programm (Bestandteil der Betriebssystemkern's) existiert.

Beide Uhren können auf eine unterschiedliche Zeit gestellt sein.

RTC

Die RTC (Hardware-Uhr) kann mit dem Befehl "hwclock" abgefragt und gestellt werden.

Diese Kommandos wurden auf Linux Ubuntu 10.04 getestet.

RTC-Zeit anzeigen:

> hwclock -r

RTC auf die Zeit der Soft-Clock stellen (da die Soft-Clock ja vom NTP sehr genau gestellt werden kann):

> hwclock -w

Soft-Clock auf die Zeit der RTC stellen (die RTC kann man ja im BIOS selbst stellen):

> hwclock -f

Linux interpretiert die RTC-Zeit als "UTC":

> hwclock -u

Linux interpretiert die RTC-Zeit als "lokale Zeit" (z.B.: "/etc/localtime → /usr/share/zoneinfo/Europe/Berlin"):

> hwclock -l

Dual Boot: Windows 10 und Linux - falsche Uhrzeit

root@ubuntu2004:~# ls -lha /etc/localtime 
lrwxrwxrwx 1 root root 33 Jul 28 20:25 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

root@ubuntu2004:~# timedatectl
               Local time: Mi 2021-07-28 20:42:25 CEST
           Universal time: Mi 2021-07-28 18:42:25 UTC 
                 RTC time: Mi 2021-07-28 18:42:25     
                Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no                         

root@ubuntu2004:~# timedatectl set-local-rtc 1 --adjust-system-clock

root@ubuntu2004:~# timedatectl
               Local time: Mi 2021-07-28 20:43:55 CEST
           Universal time: Mi 2021-07-28 18:43:55 UTC 
                 RTC time: Mi 2021-07-28 18:43:55     
                Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: yes                        

Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

Besser, man stellt Windows so um, dass es die RTC in gleicher Weise behandelt wie Linux - also das die RTC als UTC interpretiert wird.

Wenn man in Windows die folgende Datei runterlädt und mit einem Doppelklick (als Administrator) ausführt, dann behandelt Windows die RTC-Zeit als UTC-Zeit.

RealTimeIsUniversal.reg
Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

Soft-Clock

Die Soft-Clock (Betriebssystem-Uhr) kann mit dem Befehl "date" abgefragt und gestellt werden.

Diese Kommandos wurden 2004 auf FreeBSD getestet.

Datum im Euro-Format (separate Angabe)

# date +%Y-%m-%d

oder

# date +%F
# 2004-05-10

Datum und Uhrzeit

# date '+%F um %T'
# 2004-05-10 um 15:41:28

Datum im Euro-Format (kompackter Parameter)

# date +%F
# 2004-05-10

Datum mit Monatsangabe als Wort

# date +%v
# 10-Mai-2004

Monat als Wort

# date +%h
# Mai

Wochentag

# date +%a
# Mo

Urzeit

# date +%H:%M:%S

oder

# date +%T
# 00:50:27

Zeitzonendifferenz zu Greamwitch

# date +%z
# +0200

Zeitzone

# date +%Z
# MEST

Datum+Uhrzeit aus einer Maschine auslesen (der 2004-05-10 um 01:02:33 Uhr)

# date "+%Y%m%d%H%M.%S"
# 200405100102.33

Datum+Uhrzeit auf einer anderen Maschine einstellen

# date 200405100102.33

Uhrzeit sekundengenau einstellen (01:02:33 Uhr)

# date 0102.33

Uhrzeit einstellen (01:02 Uhr)

# date 0102

NTP

installieren

In Ubuntu wird das dazugehörige Paket so installiert:

# aptitude install ntp

konfigurieren

Jetzt muss das Programm noch richtig konfiguriert werden.

Eigentlich soll es bei Ubuntu ja nicht nötig sein, da es schon vorkonfiguriert wurde, nur wird diese Standardkonfiguration für die ganze Welt vorgenommen und so ist es recht wahrscheinlich, dass man einen weit entfernten Zeitserver zugewiesen bekommt. Deshalb kann es nichts schaden, wenn man sich einen lokalen Pool einträgt um auch einen lokalen Zeitserver zugewiesen zu bekommen.

# vi /etc/ntp.conf
# FreeBSD
#driftfile /var/db/driftfile
#
# Ubuntu
driftfile /var/lib/ntp/ntp.drift
#
# Alle Betriebssysteme
server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
server 3.de.pool.ntp.org

Der Pool pool.ntp.org stellt die Zentrale dar, die *.de.pool.ntp.org stellen lokale (deutsche) Zeitserver dar.

# ntpq -np

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.189.94.4     .INIT.          16 u    -   64    0    0.000    0.000   0.000

Leider hat NTP eine große Schwäche! Ist der Zeitunterschied zwischen lokaler Uhr und Zeitserver zu groß (in der Größenordnung von mehr als 15 Sekunden), dann tut der NTPD nichts mehr!

Ausnahmeregelung

Es gibt bei neueren NTPD's weitere Möglichkeiten, die im folgenden gezeigt werden.

tinker muss die aller erste Option sein, die server-Optionen werden um "minpoll 4 maxpoll 4" erweitert:

# vi /etc/ntp.conf
tinker panic 0
tinker step 0
server ptbtime1.ptb.de minpoll 4 maxpoll 4
server ptbtime2.ptb.de minpoll 4 maxpoll 4
server ptbtime3.ptb.de minpoll 4 maxpoll 4
server 0.de.pool.ntp.org minpoll 4 maxpoll 4
server 1.de.pool.ntp.org minpoll 4 maxpoll 4
server 2.de.pool.ntp.org minpoll 4 maxpoll 4
server 3.de.pool.ntp.org minpoll 4 maxpoll 4

# /etc/init.d/ntp stop
# ntpdate 0.de.pool.ntp.org
# hwclock --systohc
# /etc/init.d/ntp start

Sollte das nicht helfen, dann kann man sich noch die Optionen -g, -q und -x für den ntpd ansehen (man ntpd).

In dem Fall müsste man, bei Ubuntu zum Beispiel, in der datei /etc/init.d/ntp die Variable NTPD_OPTS um die drei oben genannten Parameter ergänzen. Das könnte man zum Beispiel wie folgt machen:

Man öffnet die Datei /etc/init.d/ntp

# vi /etc/init.d/ntp

Dann geht man mit dem Cursor an die Stelle, an der die Variablen definiert werden:

NAME=ntp
DAEMON=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid

Dann wird der Variablenbereich um die Variable NTPD_OPTS erweitert:

NAME=ntp
DAEMON=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid
NTPD_OPTS="$NTPD_OPTS -g -q -x"

Zum Schluss muss der Dienst noch neu gestartet werden:

# /etc/init.d/ntp stop
# ntpdate 0.de.pool.ntp.org
# hwclock --systohc
# /etc/init.d/ntp start

andere

Das obige Beispiel wurde auf einem Ubuntu-Linux durchgeführt, bei anderen Distributionen können die Start-Stop-Scripte einen anderen Namen haben. Bei SUSE zum Beispiel heißt es nicht ntp sondern xntpd und bei FreeBSD liegt es in einem anderen Pfad und heißt ntpd.

FreeBSD:

# /etc/rc.d/ntpd restart

SUSE:

# /etc/init.d/xntpd restart

OpenNTPD

Der OpenNTPD ist in sicherheitsrelevanten Linux-Umgebungen dem klassischen NTP vorzuziehen, da nur hier der NTP-Server abgeschaltet werden kann!

Wenn es um Sicherheit geht, dann ist es man über jeden Port, der nicht offen sein muss froh!

In dieser Hinsicht ist der klassische NTPD aber sehr unflexibel.

Nur der openNTPD bietet die Möglichkeit, alle Ports zu schließen oder nur auf ausgewählten IP's zu lauschen.

Installation/Konfiguration NTP-Server

Zur Zeit gibt es noch einen Bug, deshalb sind diese beiden Befehle vor der Installation nötig:

# dpkg --purge ntp
# invoke-rc.d apparmor restart

Jetzt geht es los:

# aptitude update && aptitude install openntpd
# /etc/init.d/openntpd stop
# vi /etc/openntpd/ntpd.conf

braucht man eigentlich nichts zu ändern:

server 0.debian.pool.ntp.org
server 1.debian.pool.ntp.org
server 2.debian.pool.ntp.org
server 3.debian.pool.ntp.org

An sonsten reicht hier ein einziger Eintrag:

server pool.ntp.org

Kontrolle

Allerdings gibt es beim OpenNTPD keine weiteren Werkzeuge, wie zum Beispiel den ntpq!

Von älteren NTP-Versionen hat der ntpq noch beim openntpd funktioniert, der ntpq von neueren Versionen funktioniert nicht mehr.

So kann man nur noch die Meldungen im syslog und die Ausgaben von ntpdate als Informationsquellen zum Status von openntpd verwenden.

Man kann hier nur die lokale Uhrzeit mit der Zeit auf einem Zeitserver vergleichen:

# ntpdate -q pool.ntp.org

oder

# ntpdate -q ntp.ubuntu.com

oder

# ntpdate -q 0.debian.pool.ntp.org

NTP-Server

Will man auch einen Server betreiben, kann man ihn hier wie folgt aktivieren, dazu braucht man nur diese Zeile einzutragen:

listen on *

Es ist aber hier auch möglich (das kann der Standard-NTP auch nicht), dass man den OpenNTPD nur auf einer bestimmten IP lauschen lässt, wie zum Beispiel "localhost" (127.0.0.1):

listen on 127.0.0.1
listen on ::1

zyklischer NTP-Restart

das NTP - Problem

Der NTPD kann die Zeit nur in recht kleinen Schritten korrigieren. Diese Schritte sind so klein, dass eine Differenz von 300 Sekunden erst nach mehr als einer Woche korrigiert wäre!

Da manche RTCs eine so starke Ungenauigkeit haben, dass der NTPD diese nicht korrigieren kann und deshalb die Systemzeit immer wieder aus der Synkronität läuft, wird der NTPD immer sterben, wenn eine Zeitdifferenz von 15 Sekunden erreicht wurde.

Bei VMWare ist noch zu beachten, dass die Einstellung "Uhrzeit zwischen Host- und Gast-System syncronisieren" (oder so ähnlich) gesetzt ist und das im Gast-System die "VMWare-Tools" installiert sind. Sonst laufen NTP und RTC schon nach weniger als 30 Minuten so stark auseinander, das der NTP die Syncronisation nicht mehr aufrecht erhalten kann!

Holzhammermethode

Um die Zeit in regelmäßigen Abständen (z.B. immer um 00:00 Uhr) auf die harte Tour zu syncronisieren, kann man folgendes tun:

/etc/crontab

Hier stellen wir die täglichen Aufgaben von 6:25 auf 0:00 Uhr:

...
00 0     * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
...

/etc/cron.daily/uhr

Und hier legen wir eine weitere tägliche Aufgabe an:

#!/bin/bash

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

if [ -e /etc/init.d/ntp ] ; then
      /etc/init.d/ntp stop
elif [ -e /etc/init.d/ntpd ] ; then
        /etc/init.d/ntpd stop
elif [ -e /etc/init.d/openntpd ] ; then
      /etc/init.d/openntpd stop
fi

cat /etc/openntpd/ntpd.conf /etc/ntp.conf 2>/dev/null | awk '/^server/ {print $NF}' | while read NTPSERVER
do
        ntpdate ${NTPSERVER}
done

hwclock --systohc

if [ -e /etc/init.d/ntp ] ; then
      /etc/init.d/ntp start
elif [ -e /etc/init.d/ntpd ] ; then
        /etc/init.d/ntpd start
elif [ -e /etc/init.d/openntpd ] ; then
      /etc/init.d/openntpd start
fi
# chmod 0755 /etc/cron.daily/uhr

SystemD-TimeSyncD

> vi /etc/systemd/timesyncd.conf
[Time]
NTP=10.144.119.140
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048

> systemctl status systemd-timesyncd
...
   Status: "Synchronized to time server 10.144.119.140:123 (10.144.119.140)."
...
/home/http/wiki/data/attic/zeitserver_ntp.1633072232.txt · Zuletzt geändert: von manfred