Identifier la source fautive, la remplacer, garder la majorité véridique
Dans le jargon NTP, un truechimer est une source dont le temps reporté s'accorde avec la majorité des autres sources dans la tolérance de correction du protocole. Un false ticker est une source qui diverge — soit parce qu'elle est fausse, soit parce que le chemin est si asymétrique que la mesure ment sur elle.
Ce qu'un false ticker N'EST PAS :
~ ou marginal).Pour chaque peer, NTP construit un intervalle de correction : [offset − root_distance, offset + root_distance] où root_distance = root_delay/2 + root_dispersion. Cet intervalle exprime « le temps vrai est quelque part dedans, et je suis au moins aussi large à son sujet ».
L'algorithme Marzullo-Mills (RFC 5905 §11.2.1) trouve le plus grand sous-ensemble de peers dont les intervalles partagent un point commun. Les peers dans cette intersection sont des truechimers ; les peers hors intersection sont des false tickers.
ntpq préfixe chaque peer d'un flag d'état 1 caractère. Ceux pertinents pour le diagnostic false-ticker :
| Préfixe ntpq | Signification |
|---|---|
* | System peer — la source sélectionnée |
+ | Candidat — dans le set combine |
- | Outlyer — rejeté par l'algorithme de clustering |
x | False ticker — rejeté par intersection |
. | Rejet « too-many-survivors » |
# | Bon mais non utilisé (trop de candidats) |
(espace) | Rejet (injoignable, mauvaise cohérence, stratum élevé) |
chronyc utilise deux colonnes : M (mode : ^ serveur, = peer) et S (état) :
MS Name/IP address
^* ntp.rdem-systems.com sync, source actuelle
^+ time.cloudflare.com combinée
^- time.google.com rejetée par cluster
^x rogue-server.example.com FALSE TICKER
^? down-server.example.com connectivité perdue
^~ jittery.example.com trop variable
La cause la plus courante. Un Stratum 2 dont l'amont est passé en stratum 16, un serveur sous systemd-timesyncd sans backup, un membre de pool avec GPS cassé — tous peuvent produire des secondes d'offset réel. Vérifiez le chronyc tracking / ntpq -c rv propre à la source côté opérateur, ou interrogez-la depuis un point de vue indépendant avec ntpdate -q.
Si le chemin vers un peer passe par un tunnel (IPsec, VPN, GRE) alors que les autres peers sont directs, les latences aller simples sont radicalement différentes. NTP suppose la symétrie ; l'asymétrie apparaît comme offset et peut faire passer une source par ailleurs correcte pour un menteur.
Un peer qui reporte un root_delay ou root_dispersion élevé a un intervalle de correction large. Si son offset est proche du correct mais son intervalle est plus large que le chevauchement des autres, Marzullo-Mills peut quand même l'exclure par sécurité (il ne peut pas affiner le chevauchement, donc est rejeté comme non-contributif).
Avec seulement 3 peers, tout désaccord réel crée une division paire. Deux peers d'accord ne suffisent pas à Marzullo-Mills pour sereinement écarter le troisième — donc les trois peuvent finir marqués ou la sélection échoue entièrement. Correctif : configurez toujours 4+ peers en production.
Avant d'éditer ntp.conf, confirmez qui dit la vérité.
# Obtenir les offsets pour chaque source configurée
$ chronyc sourcestats -v
# Interroger chaque source indépendamment
$ for s in ntp.rdem-systems.com time.cloudflare.com ntp1.ptb.de suspect.example.com; do
echo -n "$s: "
ntpdate -q "$s" 2>&1 | grep offset
done
# Recouper contre ce validateur en direct
$ curl -s https://ntp.rdem-systems.com/time-api.php
Comparez les offsets. Celui qui diverge est votre false ticker.
Une fois identifié :
# Exemple chrony.conf avec 4 sources diversifiées (3 NTS, 1 pool)
server ntp.rdem-systems.com iburst nts # FR, AS206014
server time.cloudflare.com iburst nts # anycast
server nts.netnod.se iburst nts # SE, Netnod
pool 2.pool.ntp.org iburst
makestep 1.0 3
rtcsync
Sans NTS, UDP 123 n'est pas authentifié. Un attaquant sur le chemin peut :
pool.ntp.org et substituer un serveur fautif.Signes qu'un false ticker est une attaque plutôt qu'un bug :
Après correction — sites liés :