Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:chrony_centos_7

chrony CentOS 7

Das NTP (Network Time Protocol) ist ein Protokoll, entwickelt um die einzelnen Uhren jedes an ein Netzwerk angeschlossenen Computers, synchron zu halten. Alle in diesem Netzwerk befindlichen Computer, haben dann eine einheitliche Zeit, wenn diese an der Verteilung der Zeitinformationen eines sogenannten „Zeitservers“, teilnehmen.

Es kann unter Umständen sehr wichtig sein, das alle Computer in einem Netzwerk die selbe Zeit zur Verfügung haben, da sonst z.B. der Austausch von DNS Informationen, bei einer zu hoher Zeitabweichung der einzelnen am DNS beteiligten Computer, nicht durchgeführt werden kann.

:!: HINWEIS - Nachfolgend soll die Installation eines „Zeitservers“ für eine privates Netzwerk beschrieben werden!

:!: HINWEIS - IPv6 soll NICHT genutzt werden!!!

Beschreibung Externer Link
Homepage Chrony Home
Dokumentation User guide for the chrony suite
RedHat Dokumentation Chapter 13. Configuring NTP Using the chrony Suite

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Installation

Zur Installation eines „Zeitservers“ wird nachfolgendes Paket benötigt:

  • chrony - ist im base-Repository von CentOS

Mit nachfolgendem Befehl, werden die benötigten Pakete installiert:

# yum install chrony
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package chrony.x86_64 0:1.29.1-1.el7.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package        Arch           Version                       Repository    Size
================================================================================
Installing:
 chrony         x86_64         1.29.1-1.el7.centos           base         253 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 253 k
Installed size: 554 k
Is this ok [y/d/N]: y
Downloading packages:
chrony-1.29.1-1.el7.centos.x86_64.rpm                      | 253 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : chrony-1.29.1-1.el7.centos.x86_64                            1/1 
  Verifying  : chrony-1.29.1-1.el7.centos.x86_64                            1/1 

Installed:
  chrony.x86_64 0:1.29.1-1.el7.centos                                           

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welcher Inhalt mit dem Paket installiert wurde.

Paket chrony:

# rpm -qil chrony
Name        : chrony
Version     : 1.29.1
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Thu 11 Sep 2014 10:28:36 AM CEST
Group       : System Environment/Daemons
Size        : 567017
License     : GPLv2
Signature   : RSA/SHA256, Fri 04 Jul 2014 02:57:41 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : chrony-1.29.1-1.el7.centos.src.rpm
Build Date  : Wed 18 Jun 2014 11:18:41 PM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://chrony.tuxfamily.org
Summary     : An NTP client/server
Description :
A client/server for the Network Time Protocol, this program keeps your
computer's clock accurate. It was specially designed to support
systems with intermittent internet connections, but it also works well
in permanently connected environments. It can use also hardware reference
clocks, system real-time clock or manual input as time references.
/etc/NetworkManager/dispatcher.d/20-chrony
/etc/chrony.conf
/etc/chrony.keys
/etc/dhcp/dhclient.d/chrony.sh
/etc/logrotate.d/chrony
/usr/bin/chronyc
/usr/lib/systemd/ntp-units.d/50-chronyd.list
/usr/lib/systemd/system/chrony-wait.service
/usr/lib/systemd/system/chronyd.service
/usr/libexec/chrony-helper
/usr/sbin/chronyd
/usr/share/doc/chrony-1.29.1
/usr/share/doc/chrony-1.29.1/COPYING
/usr/share/doc/chrony-1.29.1/NEWS
/usr/share/doc/chrony-1.29.1/README
/usr/share/doc/chrony-1.29.1/chrony.conf.example
/usr/share/doc/chrony-1.29.1/chrony.conf.example2
/usr/share/doc/chrony-1.29.1/chrony.keys.example
/usr/share/doc/chrony-1.29.1/chrony.txt
/usr/share/doc/chrony-1.29.1/faq.txt
/usr/share/info/chrony.info.gz
/usr/share/man/man1/chrony.1.gz
/usr/share/man/man1/chronyc.1.gz
/usr/share/man/man5/chrony.conf.5.gz
/usr/share/man/man8/chronyd.8.gz
/var/lib/chrony
/var/lib/chrony/drift
/var/lib/chrony/rtc
/var/log/chrony

Konfiguration

Um einen „Zeitserver“, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl überprüft werden kann:

# systemctl is-enabled chronyd
enabled
* Die Antwort sollte, wie dargestellt, enabled / eingeschaltet sein!

:!: HINWEIS - Falls die Antwort disabled sein sollte, kann nachfolgender Befehl dies beheben.

# systemctl enable chronyd
ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'

Der Dienst/Deamon chronyd.service sollte aktuelle nicht gestartet sein, was mit nachfolgendem Befehl überprüft werden kann:

# systemctl status chronyd
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: inactive (dead)

:!: HINWEIS - Ein Start des Dienstes/Deamons chronyd.service, sollte erst nach nachfolgender Konfiguration erfolgen!

/etc/chrony.conf - Server

In der Konfigurationsdatei

  • /etc/chrony.conf

wird der chronyd-Dienst/Daemon konfiguriert.

Änderungen und persönliche Anpassungen sind mit einem voranstehenden Kommentar, welche wie nachfolgend dargestellt aussieht

# Tachtler
gekennzeichnet.

Hier die komplette Konfigurationsdatei /etc/chrony.conf:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# Tachtler
# default: server 0.centos.pool.ntp.org iburst
# default: server 1.centos.pool.ntp.org iburst
# default: server 2.centos.pool.ntp.org iburst
# default: server 3.centos.pool.ntp.org iburst
server 0.de.pool.ntp.org iburst
server 1.de.pool.ntp.org iburst
server 2.de.pool.ntp.org iburst
server 3.de.pool.ntp.org iburs
 
# Ignore stratum in source selection.
stratumweight 0
 
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
 
# Enable kernel RTC synchronization.
rtcsync
 
# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3
 
# Allow NTP client access from local network.
# Tachtler
# default: #allow 192.168/16
allow 192.168.0.0/24
allow 192.168.1.0/24
 
# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
# Tachtler
# default: bindcmdaddress ::1
# bindcmdaddress ::1
 
# Tachtler - new -
# Listen for request only on following adresses.
bindaddress 0.0.0.0
 
# Tachtler - new -
# Deny access to chronyc from other computers.
cmddeny all
 
# Tachtler - new -
# Lock chronyd into RAM so that it will never be paged out.
lock_all
 
# Serve time even if not synchronized to any NTP server.
# Tachtler
# default: #local stratum 10
local stratum 8
 
keyfile /etc/chrony.keys
 
# Specify the key used as password for chronyc.
commandkey 1
 
# Generate command key if missing.
generatecommandkey
 
# Disable logging of client accesses.
# Tachtler
# default: noclientlog
# noclientlog
 
# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
# Tachtler
# default: logchange 0.5
logchange 1.0
 
#log measurements statistics tracking
logdir /var/log/chrony
 
# Tachtler - new -
# User to which will chronyd switch on initialisation to drop root privileges.
user chrony

Eine detaillierte Beschreibung der verwendeten Konfigurationseinträge und noch weitere, hier nicht verwendeter Konfigurationsmöglichkeiten, können unter nachfolgenden externen Links eingesehen werden:

/etc/chrony.conf - Client

In der Konfigurationsdatei

  • /etc/chrony.conf

wird der chronyd-Dienst/Daemon konfiguriert.

Änderungen und persönliche Anpassungen sind mit einem voranstehenden Kommentar, welche wie nachfolgend dargestellt aussieht

# Tachtler
gekennzeichnet.

Hier die komplette Konfigurationsdatei /etc/chrony.conf:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# Tachtler
# default: server 0.centos.pool.ntp.org iburst
# default: server 1.centos.pool.ntp.org iburst
# default: server 2.centos.pool.ntp.org iburst
# default: server 3.centos.pool.ntp.org iburst
server 192.168.0.20 iburst
 
# Ignore stratum in source selection.
stratumweight 0
 
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
 
# Enable kernel RTC synchronization.
rtcsync
 
# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3
 
# Allow NTP client access from local network.
# Tachtler
# default: #allow 192.168/16
allow 192.168.0.20
 
# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
# Tachtler
# default: bindcmdaddress ::1
# bindcmdaddress ::1
 
# Tachtler - new -
# Listen for request only on following adresses.
bindaddress 0.0.0.0
 
# Tachtler - new -
# Deny access to chronyc from other computers.
cmddeny all
 
# Tachtler - new -
# Lock chronyd into RAM so that it will never be paged out.
lock_all
 
# Serve time even if not synchronized to any NTP server.
# Tachtler
# default: #local stratum 10
local stratum 10
 
keyfile /etc/chrony.keys
 
# Specify the key used as password for chronyc.
commandkey 1
 
# Generate command key if missing.
generatecommandkey
 
# Disable logging of client accesses.
noclientlog
 
# Tachtler - new -
# This option allows you to configure the port on which chronyd will listen for NTP requests.
# The compiled in default is udp/123, the standard NTP port. If set to 0, chronyd will not open the server
# socket and will operate strictly in a client-only mode. 
port 0
 
# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
# Tachtler
# default: logchange 0.5
logchange 1.0
 
#log measurements statistics tracking
logdir /var/log/chrony
 
# Tachtler - new -
# User to which will chronyd switch on initialisation to drop root privileges.
user chrony

Eine detaillierte Beschreibung der verwendeten Konfigurationseinträge und noch weitere, hier nicht verwendeter Konfigurationsmöglichkeiten, können unter nachfolgenden externen Links eingesehen werden:

/etc/sysconfig/chronyd

Da der Einsatz von IPv6 nicht durchgeführt werden soll, kann durch die Neuerstellung einer Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen

  • /etc/sysconfig/chronyd

die Unterstützung für IPv6 deaktiviert werden und ein „lauschen“ auf ggf. definierten IPv6-Adressen findet nicht statt:

Mit nachfolgendem Befehl, kann die Konfigurationsdatei /etc/sysconfig/chronyd erstellt werden:

# touch /etc/sysconfig/chronyd

Der Inhalt sollte dann wie nachfolgend dargestellt sein, damit der Dienst/Deamon chrony, ohne IPv6-Unterstützung ausgeführt wird:

# Tachtler
# Resolve hostnames only to IPv4 addresses and create only IPv4 sockets.
OPTIONS="-4"

iptables Regel

:!: WICHTIG - Nur relevant, beim Einsatz von iptables als Firewall!

Damit der „Zeitserver“ auch erreichbar ist und nicht die Weitergab der Zeitinformationen via NTP vom Paketfilter iptables blockiert wird, muss nachfolgende Regel zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      141 10524 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5        1    32 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 79 packets, 9140 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Nachfolgender Befehl, fügt folgende iptables-Regel dem iptables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p udp --dport 123 -j ACCEPT

und hier der Befehl:

# iptables -I INPUT 5 -p udp --dport 123 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      435 32812 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:123 
6        4   128 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 12 packets, 1320 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Die neue Zeile ist an Position 5 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:123
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Zeitserver starten

Um einen „Zeitserver“ zu starten muss der chronyd-Dienst/Deamon mit nachfolgendem Befehl gestartete werden:

# systemctl start chronyd

Ob der „Zeitserver“, sprich der chronyd-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwwwf | grep chronyd
root     23918  0.0  0.0 112640   980 pts/0    S+   13:44   0:00          \_ grep --color=auto chronyd
chrony   23913  0.0  0.0  18444  4140 ?        SL   13:43   0:00 /usr/sbin/chronyd -u chrony

bzw. nachfolgendem Befehl überprüft werden:

# systemctl status chronyd
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: active (running) since Thu 2014-09-11 13:43:29 CEST; 1min 54s ago
  Process: 23914 ExecStartPost=/usr/libexec/chrony-helper add-dhclient-servers (code=exited, status=0/SUCCESS)
  Process: 23911 ExecStart=/usr/sbin/chronyd -u chrony $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 23913 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─23913 /usr/sbin/chronyd -u chrony -4

Sep 11 13:43:29 centos7.localdomain systemd[1]: Starting NTP client/server...
Sep 11 13:43:29 centos7.localdomain chronyd[23913]: chronyd version 1.29.1 starting
Sep 11 13:43:29 centos7.localdomain chronyd[23913]: Linux kernel major=3 minor=10 patch=0
Sep 11 13:43:29 centos7.localdomain chronyd[23913]: hz=100 shift_hz=7 freq_scale=1.00000000 nominal_ti...t_pll=2
Sep 11 13:43:29 centos7.localdomain chronyd[23913]: Generated key 1
Sep 11 13:43:29 centos7.localdomain systemd[1]: Started NTP client/server.
Sep 11 13:43:33 centos7.localdomain chronyd[23913]: Selected source 192.168.1.253
Sep 11 13:43:33 centos7.localdomain chronyd[23913]: System clock wrong by 3.285681 seconds, adjustment started
Hint: Some lines were ellipsized, use -l to show in full.

Auf welchen Ports der chronyd-Dienst/Deamon auch tatsächlich als Hintergrundprozess lauscht, kann mit nachfolgendem Befehl überprüft werden:

# netstat -tulpen | grep chronyd
udp        0      0 192.168.0.20:123         0.0.0.0:*              0          1147396457 23936/chronyd       
udp        0      0 127.0.0.1:323            0.0.0.0:*              0          1147396458 23936/chronyd

:!: HINWEIS - Falls der Befehl netstat nicht zur Verfügung stehen sollte, muss das rpm-Paket net-tools installiert werden.

Zeitserver Status

Um zu überprüfen in wie weit der offset bzw. die Abweichung zur aktuell gültigen Zeit ist, kann nachfolgende Abfrage genutzt werden:

# chronyc -4 sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.0.253                 2   6    17    44   +728ns[+6000ns] +/-   34ms

Um zu überprüfen welchen Status der angefragte Zeitserver (Zeitserverquelle) hat, kann nachfolgende Abfrage genutzt werden:

# chronyc -n -4 sourcestats
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
192.168.0.253              10   6   582     -0.003      0.170    -14ns    20us

Um zu überprüfen wie die aktuelle Systemzeit aufgebaut wird, kann nachfolgende Abfrage genutzt werden:

# chronyc -4 tracking
Reference ID    : 192.168.0.253 (timeserver.localdomain)
Stratum         : 3
Ref time (UTC)  : Thu Sep 11 13:35:29 2014
System time     : 0.000000350 seconds fast of NTP time
Last offset     : 0.000002115 seconds
RMS offset      : 0.000014358 seconds
Frequency       : 0.415 ppm slow
Residual freq   : -0.015 ppm
Skew            : 0.492 ppm
Root delay      : 0.000626 seconds
Root dispersion : 0.019811 seconds
Update interval : 64.9 seconds
Leap status     : Normal

:!: HINWEIS - Aufgrund der Beschränkung in der Konfigurationsdatei /etc/sysconfig/chronyd:

# Tachtler
# Resolve hostnames only to IPv4 addresses and create only IPv4 sockets.
OPTIONS="-4"
können Befehle nur ausgeführt werden, wenn

  1. IPv6 auf dem Server generell und komplett deaktiviert wurde, oder
  2. -4 als Parameter beim Befehl chronyc mit angegeben wird
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/chrony_centos_7.txt · Zuletzt geändert: 2014/10/16 10:48 von klaus