Chrony

Chrony és una implementació del protocol NTP (Network Time Protocol) dissenyada per sincronitzar el rellotge del sistema en entorns moderns. És la solució de sincronització horària per defecte a la majoria de distribucions Linux actuals (RHEL/Fedora des del 2014, Ubuntu des de la versió 22.04, Debian des de la versió 12).

1. Història i origen

2. Chrony vs. ntpd vs. systemd-timesyncd

Característica Chrony ntpd systemd-timesyncd
Precisió Molt alta Alta Baixa/mitjana
Adaptació a xarxes inestables Excel·lent Bona Limitada
Servidor NTP No
Client NTP
Ús en portàtils/VM Excel·lent Regular Acceptable
Consum de recursos Baix Mitjà Molt baix
Suport NTPv4 Parcial
Suport NTS (NTP Segur) Sí (>= 4.0) No No
Hardware timestamping No
Complexitat de configuració Mitjana Alta Mínima

3. Components principals

Component Descripció
chronyd Dimoni principal que s’executa en segon pla
chronyc Client CLI per interactuar amb chronyd
chrony.conf Fitxer de configuració principal

4. Instal·lació

Debian / Ubuntu

sudo apt install chrony

Fedora / RHEL / CentOS

sudo dnf install chrony

Arch Linux / Manjaro

sudo pacman -S chrony

Gestió del servei

# Iniciar i habilitar a l'arrencada
sudo systemctl enable --now chronyd

# Estat del servei
sudo systemctl status chronyd

# Reiniciar
sudo systemctl restart chronyd
💡
Nota

A Ubuntu, el servei pot anomenar-se chrony en lloc de chronyd.

5. Fitxer de configuració

5.1. Ubicació per distribució

Distribució Ruta
Debian / Ubuntu /etc/chrony/chrony.conf
Fedora / RHEL /etc/chrony.conf
Arch Linux /etc/chrony.conf

5.2. Estructura bàsica

# Servidors NTP
pool 2.debian.pool.ntp.org iburst

# Fitxer de deriva del rellotge
driftfile /var/lib/chrony/drift

# Permet correccions grans d'hora a l'inici (< 3 segons, màx 3 vegades)
makestep 1.0 3

# Activa el rellotge de temps real del hardware
rtcsync

# Fitxer de log
logdir /var/log/chrony

6. Directives de configuració principals

6.1. Fonts de temps

# Servidor NTP individual
server ntp.example.com iburst

# Pool de servidors (recomanat; es connecta a múltiples)
pool pool.ntp.org iburst

# Peer (igual rang, sincronització mútua)
peer ntp2.example.com

# Rellotge de referència local (GPS, PPS, etc.)
refclock SHM 0 refid GPS precision 1e-1 offset 0.9999

Opcions comunes per a server i pool:

Opció Descripció
iburst Envia una ràfega de paquets a l’inici per sincronitzar ràpidament
burst Envia ràfegues periòdiques (no recomanat en servidors públics)
minpoll N Interval mínim de consulta (2^N segons, per defecte 6 = 64s)
maxpoll N Interval màxim de consulta (2^N segons, per defecte 10 = 1024s)
prefer Prefereix aquesta font sobre les altres
noselect Monitora, però no usa per sincronitzar
offline Marca la font com a fora de línia inicialment
maxdelay N Rebutja mostres amb latència superior a N segons
key ID Usa autenticació NTP simètrica amb la clau indicada

6.2. Control d’accés

# Permet a una xarxa consultar l'hora (mode client)
allow 192.168.1.0/24

# Permet a tothom
allow all

# Denega accés
deny 10.0.0.5

# Permet però no serveix com a servidor de temps
noserve 192.168.2.0/24

# Permet ordres des de localhost
cmdallow 127.0.0.1

6.3. Correcció i estabilitat

# Correcció automàtica al principi (recomanat)
# Si la diferència és < 1s, corregeix fins a 3 cops
makestep 1.0 3

# Fitxer de deriva (guarda la freqüència de correcció)
driftfile /var/lib/chrony/drift

# Sincronitza el rellotge hardware (RTC) amb el del sistema
rtcsync

# Temps màxim de desviació permès (en segons)
maxdistance 1.5

# Correccions suaus d'hora (slewing) en lloc de salts bruscos
# (per defecte activat)

6.4. Logs

logdir /var/log/chrony

# Tipus de logs (es poden combinar)
log tracking measurements statistics

# Fitxer de seguiment (resum de l'estat actual)
# tracking: desviació, font seleccionada, deriva
# measurements: mostres de cada font NTP
# statistics: estadístiques de cada font

6.5. Configuració com a servidor NTP

# Permetre que clients de la xarxa local sincronitzin
allow 10.0.0.0/8

# Estratum local (si no hi ha accés a internet)
local stratum 10

6.6. NTS (Network Time Security) — NTPv4 segur

# Client NTS
server time.cloudflare.com iburst nts

# Servidor NTS (requereix certificat TLS)
ntsserverkey /etc/chrony/server.key
ntsservercert /etc/chrony/server.crt
ntsdumpdir /var/lib/chrony

7. Ús de chronyc

chronyc és la interfície de línia d’ordres per consultar i controlar chronyd.

7.1. Ordres d’estat

# Resum de l'estat de sincronització
chronyc tracking

# Llista de fonts NTP i la seva qualitat
chronyc sources

# Llista de fonts amb estadístiques detallades
chronyc sourcestats

# Informació sobre l'activitat del dimoni
chronyc activity

# Informació del servidor NTP (si actuem com a tal)
chronyc serverstats

7.2. Exemple de sortida de chronyc tracking

Reference ID    : C0A80101 (192.168.1.1)
Stratum         : 3
Ref time (UTC)  : Mon Jun 08 10:00:00 2026
System time     : 0.000012345 seconds fast of NTP time
Last offset     : +0.000010234 seconds
RMS offset      : 0.000015678 seconds
Frequency       : 12.345 ppm fast
Residual freq   : +0.001 ppm
Skew            : 0.234 ppm
Root delay      : 0.023456789 seconds
Root dispersion : 0.001234567 seconds
Update interval : 64.3 seconds
Leap status     : Normal

7.3. Exemple de sortida de chronyc sources

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.example.com              2   6   377    45   +123us[ +456us] +/- 5678us
^- ntp2.example.com              2   6   377    46   -234us[ -567us] +/- 6789us
^? ntp3.example.com              0   8     0     -     +0ns[   +0ns] +/-    0ns

Llegenda de la columna MS:

Símbol Significat
* Font seleccionada actualment
+ Font acceptable, no seleccionada
- Font descartada per l’algorisme
? Font no accessible
x Font falsa (fals ticker)
~ Font amb variació massa alta

7.4. Ordres de control

# Forçar sincronització immediata
chronyc makestep

# Afegir una font NTP en temps real
chronyc add server ntp.example.com iburst

# Eliminar una font
chronyc delete ntp.example.com

# Posar una font en mode offline/online
chronyc offline
chronyc online

# Recarregar la configuració
chronyc reload sources

# Forçar escriptura del fitxer de deriva
chronyc writertc

# Mode interactiu
chronyc

7.5. Mode interactiu

chronyc
chronyc> tracking
chronyc> sources -v
chronyc> sourcestats -v
chronyc> quit

8. Estrats NTP (Stratum)

El concepte d’estrat indica la distància a la font de temps primària:

Estrat Descripció
0 Rellotge de referència de maquinari (GPS, atòmic, ràdio)
1 Servidor directament connectat a un rellotge estrat 0
2 Servidor sincronitzat amb un estrat 1
3 Servidor sincronitzat amb un estrat 2
15 Màxim permès (estrats >= 16 = no sincronitzat)
16 No sincronitzat / no disponible

9. Casos d’ús habituals

9.1. Client NTP bàsic (configuració mínima)

pool pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

9.2. Servidor NTP per a la xarxa local

pool pool.ntp.org iburst
allow 192.168.0.0/16
local stratum 10
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
log tracking measurements statistics

9.3. Integració amb Samba AD DC

pool pool.ntp.org iburst
allow 10.0.2.0/24
local stratum 10
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
# Samba necessita el socket NTP per signar paquets als clients del domini
ntpsigndsocket /var/lib/samba/ntp_signd
# Permisos necessaris per al socket de Samba
sudo chown root:_chrony /var/lib/samba/ntp_signd
sudo chmod 750 /var/lib/samba/ntp_signd
sudo systemctl restart chrony

9.4. Client en entorn sense internet (servidor intern)

server 10.0.0.1 iburst prefer
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

9.5. Màquina virtual (amb temps inestable)

pool pool.ntp.org iburst
# Correccions més agressives per compensar derives de la VM
makestep 0.1 -1
driftfile /var/lib/chrony/drift
maxdistance 16.0

9.6. Sincronització segura amb NTS

server time.cloudflare.com iburst nts
server nts.netnod.se iburst nts
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
ntsdumpdir /var/lib/chrony

10. Rellotges de referència de maquinari

Chrony pot sincronitzar directament amb dispositius de maquinari com GPS o PPS:

# GPS via shared memory (gpsd)
refclock SHM 0 refid GPS precision 1e-1 offset 0.9999 noselect

# PPS (Pulse Per Second) via kernel
refclock PPS /dev/pps0 refid PPS lock GPS

# GPS via socket (gpsd >= 3.x)
refclock SOCK /var/run/chrony.ttyS0.sock refid GPS

11. Autenticació NTP simètrica

# /etc/chrony/chrony.conf
server ntp.example.com key 1

# /etc/chrony/chrony.keys
1 SHA256 HEX:70C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9
# Generar una clau aleatòria
chronyc keygen 1 SHA256 256

12. Diagnosi i resolució de problemes

12.1. Verificar l’estat general

# Estat de sincronització
chronyc tracking

# Fonts disponibles
chronyc sources -v

# El dimoni corre?
systemctl status chronyd

# Logs del sistema
journalctl -u chronyd -f

# Logs de Chrony
tail -f /var/log/chrony/tracking.log

12.2. Problemes habituals

Chrony no sincronitza:

# Verificar connectivitat amb el servidor NTP
chronyc sources
# Si apareix '?' a la columna M, no hi ha connectivitat

# Forçar sincronització immediata
sudo chronyc makestep

# Verificar si el firewall bloqueja el port UDP 123
sudo ss -ulnp | grep 123
sudo ufw allow 123/udp   # si cal

Diferència d’hora massa gran:

# Chrony rebutja diferències > 1000s per defecte
# Solució temporal: sincronització manual
sudo systemctl stop chronyd
sudo ntpdate pool.ntp.org   # o date --set="..."
sudo systemctl start chronyd

Conflicte amb systemd-timesyncd:

# Desactivar systemd-timesyncd si s'usa Chrony
sudo systemctl disable --now systemd-timesyncd
sudo systemctl mask systemd-timesyncd

Verificar que el port 123/UDP és accessible:

# Des del client
sudo chronyc -a 'burst 4/4'
# O amb netcat (si disponible)
nc -zuv servidor.ntp.local 123

13. Seguretat

13.1. Bones pràctiques

# Limita consultes per evitar amplificació DDoS
ratelimit interval 3 burst 8 leak 2

13.2. Firewall

# Obrir port NTP (si actua com a servidor)
sudo ufw allow 123/udp

# Amb firewalld (Fedora/RHEL)
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload

14. Fitxers i directoris importants

Ruta Descripció
/etc/chrony/chrony.conf Configuració principal (Debian/Ubuntu)
/etc/chrony.conf Configuració principal (Fedora/RHEL)
/var/lib/chrony/drift Fitxer de deriva del rellotge
/var/lib/chrony/ Dades persistents de Chrony
/var/log/chrony/ Logs de Chrony
/run/chrony/ Sockets i PID en temps d’execució
/etc/chrony/chrony.keys Claus d’autenticació NTP

15. Recursos oficials

Versions d’aquest document

Domini Públic (CC0)