Konfigurace Chrony Linux (Configure Chrony Linux)

By | 21/01/2023

Last Updated on 02/06/2023 by administrator

Konfigurace Chrony Linux (Configure Chrony Linux)

Konfigurace Chrony Linux

Motivace:

Chrony je NTP je sloužba pro synchronizaci vnitřních hodin počítačů. Funguje jako NTPv4 server zajišťující synchronizaci času všech počítačů v síti. Je např. již defaultní konfiguraci na distribuci Red Hat od verze 7.

Hlavní výhody Chrony:

Přesnost: Obecně se Chrony považuje za přesnější než NTPd, protože používá sofistikovanější algoritmy a má menší latenci.

Spolehlivost: Chrony a ntpd se také liší v jejich schopnosti odolat různým chybám, jako jsou výpadky sítě, chybné hodiny nebo vysoké latence. Chrony je obecně robustnější a dokáže se rychleji a spolehlivěji přizpůsobit těmto chybám.

Konfigurace: Chrony a NTPd mají různé konfigurační soubory a různé způsoby nastavení. Konfigurace Chrony linux je obecně jednodušší a intuitivnější než u NTPd.

Aktualizace: Chrony má častěji aktualizovaný kód a nové verze jsou vydávány pravidelně. NTPd je často stabilní a bez významných změn v kódu po mnoho let.

Další výhody Chrony vs NTPd jsou sepsány zde

OS:

Implementace byla prováděna na Ubuntu 22.04 LTS, postup může být podobně aplikovatelný na starší verze Ubuntu a distribuce Linuxu.

Implementace:

Aktualizace seznamu balíčků z repozitářů:

sudo apt update

Instalace služby Chrony:

sudo apt install chrony -y

Verze Chrony:

chronyc -v

Pokud je nakonfigurovaný firewall (lze zjistit příkazem sudo ufw status), je nutné povolit provoz UDP/123:

sudo ufw allow 123/udp

Konfigurace Chrony je uvedena v chrony.conf configu:

vi /etc/chrony/chrony.conf

Důležité je povolit z jakého subnetu je možné provést aktualizaci času. Pokud bez tohoto příkazu není možné aktualizovat NTP klienty. V tomto případě to bude subnet 192.168.0.0/24

allow 192.168.0.0/24

Částečný výpis příkazu configu chrony.conf, ukazuje defaultní konfiguraci, kterou je doporučenou nechat, tak jak je vidět níže, jelikož při dotazu obecně na pool.ntp.org (nebo 0.ubuntu.pool.ntp.org, 1.ubuntu.pool.ntp.org, ..) se hledají ty nejbližší NTP servery [1]. Tyto NTP servery se můžou měnit co hodinu [2]. Nastavení iburst vyšle místo jedno paketu dávku osmi paketů, pokud je nějaký server nedosažitelný. Součet max sources je 8, tudíž se v tabulce příkazem chronyc sources zobrazí 8 NTP serverů.

pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2

Pozn. je možné také přidat český pool serverů. Pozn. je nutné přidat za klíčové slovo “iburst”

Alternativně a nepovinně je možné provést manuální konfiguraci zakomentováním řádků pool a nastavením manuálních NTP serverů v chrony.conf:

vi /etc/chrony/chrony.conf
#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

A vložit ty české NTP servery do configu chrony.conf (NTP servery níže jsou stratum 1):

server tik.cesnet.cz iburst
server tak.cesnet.cz iburst 
server ntp.nic.cz iburst

Volitelně klíčovým slovem prefer mohu zvolit manuálně preferovaný NTP server např. server tik.cesnet.cz iburst prefer:

Další české NTP servery lze najít zde: http://phoenix.inf.upol.cz/~bazgierv/ntp.html

Jak již bylo uvedeno, je doporučené nechat původní nastavení v chrony.conf, nicméně pokud je konfigurovaný server v české republice, získá se českými servery tik.cesnet.cz, tak.cesnet.cz a ntp.nic.cz lepší časové synchronizace (stratum 1) a také je dosaženo menšího časový rozdílu v ms mezi NTP klientem a NTP zdrojem 9

Aby se aplikovaly změny provést restart služby Chrony:

sudo service chrony restart

Tímto je konfigurace Chrony Linux serveru hotova.

Ověření:

sudo service chrony status

Výpis příkazu sudo service chrony status:

ntp.service - Network Time Service
* chrony.service - chrony, an NTP client/server
     Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-01-17 19:08:12 UTC; 4min 58s ago
       Docs: man:chronyd(8)
             man:chronyc(1)
             man:chrony.conf(5)
    Process: 1926 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS)
   Main PID: 1935 (chronyd)
      Tasks: 2 (limit: 4413)
     Memory: 1.3M
        CPU: 98ms
     CGroup: /system.slice/chrony.service
             |-1935 /usr/sbin/chronyd -F 1 -x
             `-1936 /usr/sbin/chronyd -F 1 -x

Alternativní ověření pomocí pomocí zobrazení běžících procesů:

ps -A | grep chrony

Výpis příkazu ps -A | grep chrony:

1935 ? 00:00:00 chronyd
1936 ? 00:00:00 chronyd

Pozn. V chrony jsou zahrnuty dva programy, chronyd je daemon, který lze spustit při spouštění, a chronyc (c značí command line) je program rozhraní příkazového řádku.

Výpis nastavených NTP serverů s vysvětlivkami (-v verbose):

chronyc sources -v

Výpis příkazu chronyc sources -v ukazuje získané NTP servery defaulní konfigurací:

 
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- alphyn.canonical.com          2  10   377    95   -337us[ -337us] +/-  117ms
^+ prod-ntp-4.ntp4.ps5.cano>     2  10   377   661   -175us[ -519us] +/-   16ms
^+ prod-ntp-3.ntp4.ps5.cano>     2  10   377   748   +588us[ +299us] +/-   18ms
^- pugot.canonical.com           2  10   377   748  -2304us[-2593us] +/-   45ms
^+ lucy.thehomeofanime.de        3  10   377   464  +2128us[+1770us] +/-   57ms
^+ stratum2-4.NTP.TechFak.U>     2  10   377   880  -2998us[-3279us] +/-   21ms
^+ h2993030.stratoserver.net     2  10   377   471   -871us[-1229us] +/-   30ms
^* mail.klausen.dk               2   9   377   168   -645us[-1023us] +/-   15ms

Služba Chrony vybírá vhodné NTP servery podle dlouhodobých statistik. Vždy se preferuje synchronizace s NTP serverem mající menším stratum (st), protože je přesnější a tím je zrovna NTP server mail.klausen.dk.

Legenda:

MS [3]:

  • ^” je NTP server, který se synchronizuje s nizším stratum NTP serverem a poskytuje synchronizaci NTP serverum s vyssim stratum cislem, nebo klientum
  • =” je NTP peer, což je zařízení, které si vyměňuje informaci o čase z dalším NTP peer zařízením
  • #” jsou lokálně připojené referenční hodiny
  • *” je aktuální a preferovaný referenční zdroj.
  • +” je další kandidát považovaný za dobrý zdroj (tyto NTP servery jsou kombinovany s aktuálním preferovaným zdrojem
  • ” je další kandidát považovaný za dobrý zdroj (ale tyto NTP servery nejsou kombinovany s aktuálním preferovaným zdrojem)
  • ?” je zdroj, ke kterému došlo ke ztrátě připojení, zobrazuje se také při restartování služby Chrony
  • x” je zdroj o kterých si Chronyd myslí, že jsou falešné (čas je v rozporu z většinou jiných NTP zdrojů)
  • ~” je zdroj, jehož čas je příliš proměnlivý

Name/IP address – IP nebo hostname vzdáleného NTP serveru.

Last sample [3] – ukazuje posun mezi místními hodinami a zdrojem při posledním měření. Je ve formátu xxxx [ yyyy ] +/- zzzz:

  • xxxx – upravený offset času z poslední NTP odpovědi
  • yyyy – naměřený skutečný offset času z poslední NTP odpovědi
  • zzzz – +/- míra chyby v měření z poslední NTP odpovědi

LastRx – poslední přijaty NTP paket z daného NTP serveru defaultně sekundách (písmena m, h, d nebo y označují minuty, hodiny, dny nebo roky)

Stratum – Stratum, který udává vrstvu časového zdroje v hierarchii. Čím menší číslo, tím přesnější čas.

  • Stratum 1 značí NTP server s nejpřesnějším časem a jeho referečním externím časovým zařízení jsou atomové, nebo rádiové hodiny či GPS. Tato referenční časová zařízení jsou označena stratum 0 v hierarchii.
  • Stratum 16 znamená, že je zdroj nesynchronizovaný.

Poll – zobrazuje po jaké době se vyšle žádost o další synchronizaci, např. zde po 2^6 sekundách čili v tomto případě za 64sec, tímto timer LastRx začně opět od nuly

Reach – Stav synchronizace v hexa hodnotě, každá logická 1 níže reprezentuje nový přijatý paket (z prava).

  • 0x377 = (1111 1111)2 – synchronizace plně funkční, NTP proces přijal úspěšně posledních 8 paketů (to od restartu to může trvat desítek minut).
  • 0x0 = (0000 0000)2 – z posledních 8 paketů, NTP proces nepřijal zatím žádné.
  • 0x1 = (0000 0001)2 – NTP proces přijal poslední (nejnovější) paket z posledních 8 paketů.
  • a tak by se dalo pokračovat…

Příkaz níže detailní informace o aktuálním NTP zdroji (z výpisu chronyc sources):

chronyc tracking

Výpis příkazu chronyc tracking:

Reference ID    : 9D5A181D (mail.klausen.dk)
Stratum         : 3
Ref time (UTC)  : Sat Jan 21 14:43:18 2023
System time     : 0.001330460 seconds slow of NTP time
Last offset     : -0.000377918 seconds
RMS offset      : 0.000408742 seconds
Frequency       : 0.062 ppm slow
Residual freq   : -0.015 ppm
Skew            : 0.203 ppm
Root delay      : 0.028558470 seconds
Root dispersion : 0.001744010 seconds
Update interval : 516.5 seconds
Leap status     : Normal

Detailní informace nastavených NTP serverů (z výpisu chronyc sources), jako je NTP verze, autentizace, NTP port, …

sudo chronyc ntpdata

Částečný výpis příkazu sudo chronyc ntpdata:

Remote address  : 91.189.91.157 (5BBD5B9D)
Remote port     : 123
Local address   : 192.168.0.138 (C0A8008A)
Leap status     : Normal
Version         : 4
Mode            : Server
Stratum         : 2
Poll interval   : 10 (1024 seconds)
Precision       : -23 (0.000000119 seconds)
Root delay      : 0.076889 seconds
Root dispersion : 0.026321 seconds
Reference ID    : 91EECB0E ()
Reference time  : Sat Jan 21 14:32:47 2023
Offset          : +0.000336791 seconds
Peer delay      : 0.104693934 seconds
Peer dispersion : 0.000000192 seconds
Response time   : 0.000247488 seconds
Jitter asymmetry: +0.00
NTP tests       : 111 111 1111
Interleaved     : No
Authenticated   : No
TX timestamping : Kernel
RX timestamping : Kernel
Total TX        : 35
Total RX        : 35
Total valid RX  : 35

Zobrazí, které použité NTP servery (z výpisu chronyc sources) jsou online a offline:

chronyc activity

Výpis příkazu chronyc tracking, ukazuje, že 8 NTP zdroje jsou online:

200 OK
8 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

Vypíše všechny NTP klienty, kteří se synchronizuji s tímto chrony serverem.

sudo chronyc clients

Výpis příkazu chronyc clients ukazuje, že tento chrony server používá 5 NTP klientů:

Hostname                      NTP   Drop Int IntL Last     Cmd   Drop Int  Last
===============================================================================
gw.lan                       2114      0  10   -   51h       0      0   -     -
nas.lan                      1978      0  10   -   347       0      0   -     -
192.168.0.187                  10      0  11   -   22d       0      0   -     -
192.168.0.19                    9      0  11   -   22d       0      0   -     -
192.168.0.138                 117      0   6   -   26m       0      0   -     -

Logy:

grep "chrony" /var/log/syslog

Částečný výpis příkazu grep “chrony” /var/log/syslog:

Jan 21 12:46:55 chronny systemd[1]: Stopping chrony, an NTP client/server...
Jan 21 12:46:55 chronny systemd[1]: chrony.service: Deactivated successfully.
Jan 21 12:46:55 chronny systemd[1]: Stopped chrony, an NTP client/server.
Jan 21 12:46:55 chronny systemd[1]: Starting chrony, an NTP client/server...
Jan 21 12:46:55 chronny chronyd-starter.sh[4681]: Warning: Running in a container, likely impossible and unintended to sync system clock
Jan 21 12:46:55 chronny chronyd-starter.sh[4681]: Adding -x as fallback disabling control of the system clock, see /usr/share/doc/chrony/README.container to override this behavior
Jan 21 12:46:55 chronny chronyd[4690]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)
Jan 21 12:46:55 chronny chronyd[4690]: Disabled control of system clock
Jan 21 12:46:55 chronny chronyd[4690]: Frequency -0.057 +/- 0.067 ppm read from /var/lib/chrony/chrony.drift
Jan 21 12:46:55 chronny chronyd[4690]: Using right/UTC timezone to obtain leap second data
Jan 21 12:46:55 chronny chronyd[4690]: Loaded seccomp filter (level 1)
Jan 21 12:46:55 chronny systemd[1]: Started chrony, an NTP client/server.
Jan 21 12:47:02 chronny chronyd[4690]: Selected source 81.169.204.195 (2.ubuntu.pool.ntp.org)
Jan 21 12:47:03 chronny chronyd[4703]: chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)
Jan 21 12:47:03 chronny chronyd[4703]: Fatal error : Invalid directive at line 1
Jan 21 12:48:07 chronny chronyd[4690]: Selected source 185.125.190.57 (ntp.ubuntu.com)
Jan 21 13:03:14 chronny chronyd[4690]: Selected source 157.90.24.29 (2.ubuntu.pool.ntp.org)

Dodatečné logování lze zapnout v chrony.conf  souboru

vi /etc/chrony/chrony.conf

Přidat řádek nakonci souboru:

log measurements statistics tracking

Aby se aplikovaly změny provést restart služby Chrony:

sudo service chrony restart

Tímto se vytvoří ve složce /var/log/chrony/ tři soubory measurements.log, statistics.log a tracking.log

Další řešené problémy s Chrony:

https://chrony.tuxfamily.org/faq.html

Zdroje:

[1] https://www.ntppool.org/zone
[2] https://www.pool.ntp.org/en/use.html
[3] https://chrony.tuxfamily.org/doc/3.5/chronyc.html

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

Your email address will not be published. Required fields are marked *