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