Serveur NTP Stratum 1 : Raspberry Pi, GPS et Temps Atomique

Par Richard DEMONGEOT | 14 janvier 2026 | Temps de lecture : 12 min
Raspberry Pi avec module GPS pour serveur NTP Stratum 1

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.

Sommaire

Comprendre le protocole NTP et les strates

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.

Hierarchie des Strates NTP

Stratum 0
Horloges atomiques, GPS, signaux radio
Sources de reference absolue - non accessibles directement via NTP
Stratum 1
Serveurs directement connectes a Stratum 0
Notre Raspberry Pi GPS - Precision : < 10 microsecondes
Stratum 2
Serveurs synchronises sur Stratum 1
Nos serveurs publics ntp1-11.rdem-systems.com
Stratum 3+
Clients et serveurs downstream
Vos serveurs, postes de travail, equipements reseau...
Precision et degradation
A chaque niveau de strate, la precision se degrade legerement en raison des delais reseau et des imprecisions de traitement. Un serveur Stratum 1 offre typiquement une precision de quelques microsecondes, tandis qu'un Stratum 2 atteint quelques dizaines de microsecondes, et un Stratum 3 quelques millisecondes.

Strate 0 : Les references de temps atomique

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 :

Pourquoi le GPS est-il si precis ?
Chaque satellite GPS embarque plusieurs horloges atomiques (cesium et rubidium). Le systeme GPS necessite une precision temporelle extreme car une erreur d'1 microseconde se traduit par une erreur de position de 300 metres. Le signal PPS fourni par les recepteurs GPS est synchronise directement sur cette reference atomique.

Strate 1 : Notre serveur GPS

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 recepteur GPS et le signal PPS

Le module GPS fournit deux types d'informations :

  1. Donnees NMEA : Trames textuelles contenant la position, la date et l'heure (precision ~1 seconde)
  2. Signal PPS : Une impulsion electrique precisement au debut de chaque seconde (precision < 1 microseconde)
Sortie cgps montrant les satellites GPS et la precision

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".

Configuration ntpd avec GPS

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
Pourquoi des pairs de validation ?
Meme avec un GPS, il est recommande de configurer des serveurs NTP externes de confiance. L'algorithme NTP les utilise pour valider que notre source GPS fonctionne correctement et pour detecter d'eventuelles anomalies (spoofing GPS, defaillance materielle, etc.).

L'algorithme de selection des pairs NTP

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.

Les metriques de selection

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

Interpretation de ntpq -c peers

Sortie ntpq -c peers montrant les sources NTP

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

L'algorithme d'intersection

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.

Dans notre configuration
La source *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.

Les grandes sources de temps fiables dans le monde

Pour une infrastructure NTP robuste, il est essentiel de connaitre les sources de temps les plus fiables. Voici les principales references mondiales :

Instituts metrologiques nationaux (Stratum 1)

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
Serveurs Stratum 1 non publics
Les serveurs NTP de strate 1 des instituts metrologiques nationaux ne sont generalement pas accessibles au public. L'acces est reserve aux operateurs d'infrastructure (fournisseurs d'acces, datacenters, projets de recherche) sur demande justifiee. Pour les utilisateurs finaux, les serveurs Stratum 2 du pool NTP ou des grands fournisseurs (Google, Cloudflare) offrent une precision largement suffisante.

Services NTP des geants du web

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 (Leap Second)

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).

Comment ca fonctionne ?
Lorsque l'ecart entre TAI et la rotation terrestre depasse 0.9 seconde, l'IERS (International Earth Rotation Service) annonce une seconde intercalaire, inseree le 30 juin ou le 31 decembre a minuit UTC. Deux cas possibles :

Ajout d'une seconde (seconde positive) :
23:59:58 → 23:59:59 → 23:59:60 → 00:00:00
L'horloge affiche 23:59:60 pendant une seconde supplementaire.

Suppression d'une seconde (seconde negative) :
23:59:58 → 00:00:00
La seconde 23:59:59 est simplement sautee. (Ce cas ne s'est jamais produit jusqu'a present.)

Depuis 1972, 27 secondes intercalaires positives ont ete ajoutees. La derniere date du 31 decembre 2016. En 2022, il a ete decide de supprimer les secondes intercalaires d'ici 2035.
Pourquoi les secondes intercalaires posent probleme ?
La valeur 23: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.

C'est precisement pour eviter ces problemes que Google et d'autres ont invente le leap smearing : plutot que d'inserer brutalement une seconde "impossible", ils etalent l'ajustement sur plusieurs heures en ralentissant legerement l'horloge.

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.

Conseil pratique
Si vous utilisez des sources avec leap smearing (Google, Meta, Cloudflare), utilisez-les exclusivement. Ne les melangez jamais avec des serveurs NTP traditionnels dans une meme configuration, sous peine d'avoir des ecarts de temps pendant les evenements de seconde intercalaire.

Le projet pool.ntp.org

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.

Notre configuration en detail

Materiel utilise

Logiciels

Architecture de notre infrastructure

                    [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]

Testez votre synchronisation

Verifiez que votre systeme est correctement synchronise avec notre infrastructure Stratum 1.

Tester maintenant

Retour a l'accueil | Notre score NTP Pool