Notre serveur NTP Stratum 1 : un Raspberry Pi avec module GPS et signal PPS, au coeur de l'infrastructure RDEM Systems.
Au coeur de notre infrastructure de synchronisation temporelle se trouve un petit appareil aux capacites remarquables : un Raspberry Pi equipe d'un recepteur GPS qui fournit l'heure avec une precision de l'ordre de la microseconde. Ce serveur de strate 1 constitue la reference absolue pour tous les autres serveurs NTP de notre reseau.
Le Network Time Protocol (NTP) est un protocole concu pour synchroniser les horloges des systemes informatiques a travers un reseau. Developpe par David L. Mills a l'Universite du Delaware dans les annees 1980, NTP est l'un des plus anciens protocoles encore en usage sur Internet.
Le concept fondamental de NTP repose sur une hierarchie de strates (stratum en anglais). Cette architecture garantit que le temps se propage de maniere ordonnee, depuis les sources les plus fiables jusqu'aux clients finaux.
Les sources de Strate 0 ne sont pas des serveurs NTP a proprement parler. Ce sont des dispositifs physiques qui fournissent une reference de temps absolue :
Notre serveur Stratum 1 est construit autour d'un Raspberry Pi equipe d'un module GPS avec sortie PPS. Voici comment fonctionne cette configuration :
Le module GPS fournit deux types d'informations :
Sortie de la commande cgps : 12+ satellites en vue, position fixee avec precision de +/- 8 metres,
offset temporel de 0.257ms.
La combinaison des deux est essentielle : NMEA donne la seconde courante (mais avec un delai variable), tandis que PPS donne l'instant exact du changement de seconde. Le daemon NTP utilise NMEA pour "savoir quelle heure il est" et PPS pour "savoir exactement quand la seconde change".
Dans notre configuration, le daemon ntpd utilise les drivers de memoire partagee (SHM) pour
communiquer avec gpsd :
# /etc/ntp.conf - Configuration Stratum 1 GPS
driftfile /var/lib/ntp/ntp.drift
# Statistiques pour analyse
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# Source NMEA via gpsd (SHM 0) - noselect car moins precis
server 127.127.28.0 minpoll 8 noselect
fudge 127.127.28.0 time1 0.304 time2 0.280 refid NMEA
# Source PPS via gpsd (SHM 1) - REFERENCE PRINCIPALE
server 127.127.28.1 minpoll 1 maxpoll 2 prefer iburst
fudge 127.127.28.1 refid PPS stratum 0
# Serveurs Stratum 1 de validation (non publics)
# Configuration avec plusieurs instituts metrologiques
# pour validation croisee du signal GPS
server [serveur-stratum-1-A] iburst
server [serveur-stratum-1-B] iburst
server [serveur-stratum-1-C] iburst
# ...
# Serveurs RDEM Stratum 2 (validation croisee)
server ntp1.rdem-systems.com iburst
server ntp2.rdem-systems.com iburst
# ... jusqu'a ntp10
NTP n'utilise pas simplement "la premiere source disponible". Il implemente un algorithme sophistique pour selectionner la meilleure source de temps parmi toutes celles configurees.
Pour chaque source, NTP calcule plusieurs metriques :
| Metrique | Description | Ideal |
|---|---|---|
| Stratum | Niveau dans la hierarchie NTP | Le plus bas possible |
| Delay | Temps aller-retour vers le serveur | < 50ms |
| Offset | Difference entre l'horloge locale et le serveur | < 10ms |
| Jitter | Variation de l'offset dans le temps | < 5ms |
| Reach | Historique de reponses (octal, 377 = 8/8 succes) | 377 |
Sortie de ntpq -c peers : le caractere * indique la source selectionnee (ici PPS),
+ les candidats valides, - les outliers rejetes.
Les caracteres en debut de ligne ont une signification precise :
| Symbole | Signification |
|---|---|
* |
sys.peer - Source actuellement selectionnee pour la synchronisation |
+ |
candidate - Source valide, candidate au remplacement si la principale echoue |
- |
outlier - Source rejetee par l'algorithme de selection (ecart trop important) |
# |
selected - Distance trop grande, mais sinon acceptable |
x |
falseticker - Source consideree comme fournissant un temps incorrect |
NTP utilise un algorithme d'intersection (Marzullo's algorithm) pour determiner quelles sources sont coherentes entre elles. Le principe est simple : si la majorite des sources s'accordent sur une plage de temps, les sources qui s'en ecartent sont considerees comme "falsetickers" et exclues.
*SHM(1) .PPS. est selectionnee comme reference principale avec un offset de 0.000ms
et un jitter de 0.008ms - une precision remarquable. Les serveurs PTB et OBSPM servent de validation
et confirment que notre GPS fournit un temps correct.
Pour une infrastructure NTP robuste, il est essentiel de connaitre les sources de temps les plus fiables. Voici les principales references mondiales :
| Organisme | Pays | Acces |
|---|---|---|
| PTB (Physikalisch-Technische Bundesanstalt) | Allemagne | Acces restreint / sur demande |
| Observatoire de Paris (LNE-SYRTE) | France | Acces restreint / sur demande |
| NIST (National Institute of Standards) | USA | Acces restreint / sur demande |
| NPL (National Physical Laboratory) | UK | Acces restreint / sur demande |
| Fournisseur | Serveurs | Particularite |
|---|---|---|
| Google Public NTP | time.google.com |
Leap smearing (lissage des secondes intercalaires) |
| Cloudflare Time | time.cloudflare.com |
NTS (Network Time Security) disponible |
| Apple | time.apple.com |
Utilise pour les appareils Apple |
| Meta | time.facebook.com |
Leap smearing |
La seconde intercalaire est un ajustement d'une seconde applique au temps UTC pour compenser le ralentissement progressif de la rotation terrestre. Contrairement au temps atomique (TAI) qui s'ecoule de maniere parfaitement reguliere, le temps UTC doit rester synchronise avec la rotation de la Terre (temps astronomique).
23:59:58 → 23:59:59 → 23:59:60 → 00:00:0023:59:60 pendant une seconde supplementaire.
23:59:58 → 00:00:0023:59:60 n'existe pas dans la plupart des logiciels. Beaucoup de programmes considerent
que les secondes vont de 0 a 59, et plantent ou se comportent de maniere imprevisible
lorsqu'ils rencontrent la valeur 60. Des incidents majeurs ont ete causes par les secondes intercalaires :
crash de serveurs Linux (bug du kernel en 2012), dysfonctionnements de bases de donnees, pannes d'applications.
Pour NTP, la seconde intercalaire est annoncee via le leap indicator dans les paquets NTP.
Les serveurs Stratum 1 connectes aux horloges atomiques recoivent cette information et la propagent
a leurs clients. Le daemon ntpd gere automatiquement l'insertion de la seconde supplementaire.
Le NTP Pool Project est une initiative collaborative qui regroupe des milliers de serveurs NTP
volontaires a travers le monde. Les adresses 0.pool.ntp.org a 3.pool.ntp.org
(ou leurs variantes regionales comme fr.pool.ntp.org) redirigent automatiquement vers
des serveurs proches et disponibles.
RDEM Systems contribue activement au pool NTP francais avec une dizaine de serveurs Stratum 2. Vous pouvez consulter notre score de fiabilite sur notre page officielle NTP Pool.
[Satellites GPS]
|
[Signal PPS + NMEA]
|
[Raspberry Pi - Stratum 1]
ntp-0.hq.rdem-systems.com
|
+-------------+-------------+
| | |
[Stratum 2] [Stratum 2] [Stratum 2]
ntp1.rdem ntp2.rdem ntp3.rdem ...
| | |
+-------------+-------------+
|
[Pool NTP FR]
|
[Vos serveurs]
Verifiez que votre systeme est correctement synchronise avec notre infrastructure Stratum 1.
Tester maintenant