====== Zeitserver NTP ======
siehe auch: [[::international genormte Zeitangabe - ISO-8601]]
Deutsche Zeitserver:
* **[[https://www.pool.ntp.org/zone/de]]**
* [[https://www.ntp-server.de/ntp-server-deutschland/]]
* [[https://www.meinberg.de/german/glossary/oeffentliche-zeitserver.htm]]
* [[https://www.zeitserver.de/deutschland/deutsche-ntp-zeitserver/]]
* **[[https://www.zeitserver.de/deutschland/ptb-zeitserver-in-braunschweig/]]**
===== Ubuntu 22.04 =====
rm -f /etc/localtime ; ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime
apt purge ntp openntpd
apt install systemd-timesyncd
echo 'NTP="pool.ntp.org"' >> /etc/systemd/timesyncd.conf
timedatectl set-ntp 0
timedatectl set-ntp 1
journalctl --unit=systemd-timesyncd.service
timedatectl timesync-status
timedatectl status
tail /var/log/syslog
Man kann auch die Zeit-Server der Physikalisch-technischen Bundesanstalt (PTB) verwenden:
ptbtime1.ptb.de
ptbtime2.ptb.de
ptbtime3.ptb.de
===== openntpd =====
Ubuntu 18.04.5 LTS
[root@linux ~]# apt install ntpstat ntpdate openntpd
[root@linux ~]# service openntpd start
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:
> dpkg -l | grep -Fi ntp
> apt purge ntp openntpd
> apt install systemd-timesyncd
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
Status:
> service systemd-timesyncd stop
> service systemd-timesyncd start
> service systemd-timesyncd status
...
Status: "Synchronized to time server ...
...
> systemctl restart systemd-timesyncd.service
> journalctl --unit=systemd-timesyncd.service
Ü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.
sonstiges:
> timedatectl set-ntp false
> timedatectl set-time "2021-10-29 11:11:00"
> timedatectl set-ntp true
> journalctl --unit=systemd-timesyncd.service
> timedatectl status
> timedatectl timesync-status
> timedatectl show
> timedatectl show-timesync
**''timesyncd''** scheint zu einfach gestrickt zu sein, es scheint diesen automatischen Abgleich mit Drift-Kompensation nicht zu können:
[[https://unix.stackexchange.com/questions/305643/ntpd-vs-systemd-timesyncd-how-to-achieve-reliable-ntp-syncing/464729#464729]]
Dafür scheint [[https://wiki.ubuntuusers.de/chrony/|chrony]] wohl besser geeignet zu sein...
===== 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
> ntpdc -c sysinfo
auf Ubuntu die Zeitzone einstellen:
dpkg-reconfigure tzdata
* [[http://de.wikipedia.org/wiki/NTP-Pool]]
* [[http://www.pool.ntp.org/]]
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 ===
* [[https://techlr.de/dual-boot-windows-10-und-linux-falsche-uhrzeit/|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.
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 ===
* [[http://de.wikipedia.org/wiki/NTP-Pool]]
* [[http://doc.ntp.org/4.2.0/debug.html]]
* [[http://doc.ntp.org/4.2.0/miscopt.html]]
* [[http://www.ptb.de/de/wegweiser/infoszurzeit/fragen/08.html]]
* [[http://www.ptb.de/de/org/q/q4/q42/ntp/ntp_main.htm]]
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
* [[http://netsecure.alcpress.com/openntpd/]]
==== 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)."
...
> service systemd-timesyncd restart
> service systemd-timesyncd status
> timedatectl set-ntp 0 #deaktivieren
> timedatectl set-ntp 1 #aktivieren