Dépannage Stratum 16
Corriger l'état NTP « non synchronisé » sur chrony, ntpd et w32tm
1. Ce que stratum 16 signifie vraiment
Dans le protocole NTP, le champ stratum est un entier 8 bits identifiant la distance à l'horloge atomique de référence. Les valeurs 1–15 sont des strates opérationnelles valides. Stratum 16 est une valeur sentinelle signifiant « non synchronisé » — le démon n'a pas de source temporelle de confiance. C'est à la fois :
- l'état initial au démarrage du démon, avant qu'un peer ne se stabilise, et
- l'état de repli quand toutes les sources configurées deviennent injoignables ou sont rejetées par les contrôles de cohérence.
La distinction importe pour le diagnostic. Stratum 16 au démarrage avec un countdown iburst visible est normal. Stratum 16 après 30 minutes d'uptime est une panne.
2. Diagnostic en 3 étapes sur chrony et ntpd
Lancez ces trois commandes dans l'ordre. Chacune pointe vers la cause suivante la plus probable.
chrony
$ chronyc tracking # état global de sync
$ chronyc sources -v # joignabilité et sélection par source
$ chronyc sourcestats -v # stabilité offset/jitter par source
ntpd / ntpsec
$ ntpq -p # table par source
$ ntpq -c rv # lire variables : stratum, offset, jitter, dispersion
$ ntpq -c 'rv 0 stratum,offset,frequency,sys_jitter'
Lisez la sortie à la lumière des trois causes racines ci-dessous.
3. Cause n°1 — aucune source joignable
Signature dans chronyc sources : chaque source affiche ? ou ~ dans la colonne sélection, et reach est 0. Signature dans ntpq -p : tous les peers affichent .INIT. comme refid.
Séquence de correction :
# 1. Tester la joignabilité UDP 123
$ nc -u -vz ntp.rdem-systems.com 123
# ou, si nc ne supporte pas UDP
$ ntpdate -q ntp.rdem-systems.com
# 2. Vérifier l'état du pare-feu
$ sudo iptables -L -n | grep 123
$ sudo firewall-cmd --list-all | grep ntp
$ sudo ufw status | grep 123
# 3. Si bloqué, ouvrir
$ sudo ufw allow 123/udp # ufw
$ sudo firewall-cmd --add-service=ntp --permanent && sudo firewall-cmd --reload
Plus en détail : le guide pare-feu couvre iptables, firewalld, ufw et Windows Firewall.
4. Cause n°2 — offset au-dessus du seuil panic
Signature : les sources sont joignables (reach > 0), mais le démon refuse de stepper l'horloge. Les logs mentionnent « panic sanity » (ntpd) ou « clock jump too large » (chrony).
Seuils par défaut :
| Démon | Seuil | Directive |
|---|---|---|
| ntpd | 1000 s | tinker panic 0 (désactiver) ou démarrer avec -g |
| chrony | Configurable (pas de panic strict) | makestep 1.0 3 dans chrony.conf |
| w32time | Variable (MaxPosPhaseCorrection / MaxNegPhaseCorrection) | Registre sous HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config |
Correction — chrony
# Step manuel ponctuel
$ sudo chronyc makestep
# Persister : autoriser step pour les 3 premières updates si offset > 1s
# dans /etc/chrony/chrony.conf
makestep 1.0 3
Correction — ntpd
# Step ponctuel au démarrage (au-delà du seuil panic)
$ sudo systemctl stop ntp
$ sudo ntpd -gq # query unique avec -g autorisé
$ sudo systemctl start ntp
5. Cause n°3 — toutes les sources rejetées par la sélection
Signature : sources joignables, offsets faibles, mais la colonne sélection affiche x (false ticker) ou - (outlyer) sur chaque peer. Le démon n'a pas de majorité pour s'accorder, donc reste en stratum 16.
Indique habituellement un nombre pair de sources qui se divisent 50/50, OU une source radicalement fausse qui tire la médiane. Correctifs :
- Configurez au moins 4 sources. Avec 3, un seul outlier crée une impasse ; avec 4 l'intersection est robuste.
- Diversifiez l'amont : n'utilisez pas 4 serveurs du même opérateur/ASN. Voir le comparatif de sources NTP pour de bonnes combinaisons dual-opérateur.
- Identifiez l'outlier avec
chronyc sourcestats -v— cherchez une source avec offset > 3× les autres — et traitez-la comme false ticker.
6. Équivalent Windows w32tm
Sous Windows, stratum 16 se manifeste comme l'état unsynchronized de w32time ou TimeState::StateNoSync.
:: Requête du statut
> w32tm /query /status
:: Forcer resync depuis peer faisant autorité
> w32tm /resync /force
:: Reconfigurer la liste de peers manuels
> w32tm /config /manualpeerlist:"ntp.rdem-systems.com time.cloudflare.com" /syncfromflags:manual /update
> net stop w32time && net start w32time
> w32tm /resync /force
Si la resync échoue, vérifiez que le Windows Firewall autorise UDP 123 en sortie.
7. Pièges VM et hyperviseur
La virtualisation ajoute une deuxième autorité temporelle en concurrence avec NTP. Désactivez-la dans les invités qui font tourner chronyd/ntpd :
- Hyper-V : décochez « Time synchronization » dans les Integration Services de chaque VM ; passez le service Hyper-V en démarrage manuel via PowerShell si vous voulez le garder seulement pour des VM imbriquées.
- VMware : open-vm-tools installe
vmtoolsdqui peut synchroniser l'invité sur l'hôte. Désactivez dans/etc/open-vm-tools/tools.confavectime.synchronize.tools.startup = falseet flags apparentés. - KVM / libvirt : évitez
<clock offset="host">avec sync périodique. Utilisez<clock offset="utc"/>et laissez chronyd gérer.
Après désactivation de la sync hôte-invité, redémarrez chronyd et attendez 1–3 intervalles de poll (64–256 s par défaut) pour que la sync se verrouille.
Pages de diagnostic liées :
Après correction — sites liés :
- Mesurer jitter, offset, latence → ntp-tester.eu
- Preuves d'audit NIS 2 / ISO 27001 → online-ntp-validator.com
- Architecture de référence entreprise → ntp.rdem-systems.com