{"id":4765,"date":"2026-10-01T10:00:00","date_gmt":"2026-10-01T08:00:00","guid":{"rendered":"https:\/\/sophie-matthieu.eu\/?p=4765"},"modified":"2026-10-01T15:49:10","modified_gmt":"2026-10-01T13:49:10","slug":"un-serveur-ntp-maison-precis-au-gps-et-blinde-contre-la-panne","status":"publish","type":"post","link":"https:\/\/sophie-matthieu.eu\/index.php\/2026\/10\/01\/un-serveur-ntp-maison-precis-au-gps-et-blinde-contre-la-panne\/","title":{"rendered":"Un serveur NTP maison pr\u00e9cis au GPS, et blind\u00e9 contre la panne"},"content":{"rendered":"<p>Parmi tous les services qui tournent \u00e0 la maison, il y en a un qu&rsquo;on ne voit jamais, qu&rsquo;on ne consulte jamais par un navigateur, mais dont absolument tout le reste d\u00e9pend en silence : l&rsquo;heure. Chez moi, c&rsquo;est un petit <strong>Raspberry Pi 4<\/strong> (4 Go de RAM, adresse fixe <code>192.168.1.3<\/code>) qui s&rsquo;en occupe, avec un r\u00e9cepteur <strong>GPS en USB<\/strong> comme r\u00e9f\u00e9rence de temps \u2014 et quelques garde-fous pour qu&rsquo;il ne soit jamais, lui, la cause d&rsquo;une coupure.<\/p>\n<h2>Pourquoi un serveur NTP maison plut\u00f4t qu&rsquo;Internet<\/h2>\n<p>Par d\u00e9faut, \u00e0 peu pr\u00e8s toutes mes machines pourraient se synchroniser directement sur des serveurs NTP publics, sur Internet. \u00c7a marche tr\u00e8s bien dans l&rsquo;immense majorit\u00e9 des cas \u2014 mais \u00e7a veut dire que l&rsquo;heure de tout mon r\u00e9seau local d\u00e9pend d&rsquo;une connexion ext\u00e9rieure, avec la pr\u00e9cision (et la latence) que \u00e7a implique. Avoir un serveur de temps local, lui-m\u00eame synchronis\u00e9 sur une r\u00e9f\u00e9rence tr\u00e8s pr\u00e9cise, change la donne sur deux points : la hi\u00e9rarchie NTP du r\u00e9seau local reste fonctionnelle m\u00eame si la liaison Internet tombe, et la pr\u00e9cision obtenue d\u00e9passe largement ce qu&rsquo;offre un simple serveur public au bout de plusieurs sauts r\u00e9seau.<\/p>\n<h2>Le GPS comme horloge atomique \u00e0 30 \u20ac<\/h2>\n<p>Le c\u0153ur du dispositif, c&rsquo;est le petit r\u00e9cepteur <strong>GPS USB<\/strong> branch\u00e9 sur le Raspberry Pi. Ce qui en fait une r\u00e9f\u00e9rence de temps int\u00e9ressante n&rsquo;a rien \u00e0 voir avec la localisation : chaque satellite GPS embarque une <strong>horloge atomique<\/strong>, et le syst\u00e8me diffuse en permanence un signal de temps extr\u00eamement pr\u00e9cis, d\u00e9riv\u00e9 de ces horloges. Un r\u00e9cepteur GPS grand public, une fois qu&rsquo;il a un nombre suffisant de satellites en vue, peut donc servir de r\u00e9f\u00e9rence de temps \u00e0 la pr\u00e9cision redoutable \u2014 pour une poign\u00e9e d&rsquo;euros, bien loin du prix d&rsquo;une horloge atomique ou d&rsquo;un r\u00e9cepteur GPS professionnel d\u00e9di\u00e9 au time-keeping.<\/p>\n<p>C\u00f4t\u00e9 logiciel, le r\u00e9cepteur GPS est g\u00e9n\u00e9ralement pilot\u00e9 par <strong>gpsd<\/strong>, qui d\u00e9code \u00e0 la fois les trames NMEA (contenant la date et l&rsquo;heure) et, si le module le supporte, le signal <strong>PPS<\/strong> (<em>Pulse Per Second<\/em>) \u2014 une impulsion \u00e9lectrique \u00e9mise exactement au passage de chaque seconde, bien plus pr\u00e9cise dans le temps que le simple message NMEA qui, lui, met quelques dizaines de millisecondes \u00e0 \u00eatre transmis et d\u00e9cod\u00e9. <strong>ntpd<\/strong> va ensuite piocher dans cette r\u00e9f\u00e9rence (via le pilote <em>refclock<\/em> adapt\u00e9 \u00e0 gpsd) pour caler son horloge locale, puis la redistribue \u00e0 tout le r\u00e9seau local comme un serveur NTP de <strong>stratum 1<\/strong> \u2014 c&rsquo;est-\u00e0-dire directement reli\u00e9 \u00e0 une r\u00e9f\u00e9rence de temps, sans d\u00e9pendre d&rsquo;un autre serveur NTP en amont.<\/p>\n<h2>Les garde-fous : un serveur de temps qui ne doit jamais planter<\/h2>\n<p>Un serveur NTP a une particularit\u00e9 : s&rsquo;il tombe en panne silencieusement (fig\u00e9, mais toujours aliment\u00e9), plus aucune machine du r\u00e9seau ne re\u00e7oit de mise \u00e0 jour d&rsquo;heure, sans qu&rsquo;il y ait forc\u00e9ment d&rsquo;alerte visible ailleurs. Pour \u00e9viter ce sc\u00e9nario, plusieurs filets de s\u00e9curit\u00e9 se compl\u00e8tent sur ce Raspberry Pi :<\/p>\n<ul>\n<li><strong>Le watchdog mat\u00e9riel du SoC<\/strong> (le Broadcom BCM2711 du Pi 4 int\u00e8gre un circuit de surveillance d\u00e9di\u00e9) : si le syst\u00e8me d&rsquo;exploitation ne vient plus r\u00e9guli\u00e8rement \u00ab rassurer \u00bb ce circuit, celui-ci force un red\u00e9marrage mat\u00e9riel complet, m\u00eame si le noyau Linux est totalement fig\u00e9.<\/li>\n<li><strong>Un service de surveillance applicatif<\/strong>, qui v\u00e9rifie en plus que les services qui comptent vraiment (ntpd, gpsd) r\u00e9pondent correctement, et pas seulement que le syst\u00e8me r\u00e9pond au ping \u2014 un process qui tourne encore mais ne fait plus son travail doit \u00eatre d\u00e9tect\u00e9 comme une panne, pas comme un succ\u00e8s.<\/li>\n<li><strong>Une alimentation et une carte SD\/stockage dimensionn\u00e9es pour la fiabilit\u00e9<\/strong>, plut\u00f4t que pour la performance brute \u2014 sur un serveur cens\u00e9 tourner en continu depuis des mois sans surveillance active, c&rsquo;est souvent la pi\u00e8ce la plus simple qui l\u00e2che en premier.<\/li>\n<\/ul>\n<p>R\u00e9sultat : une petite bo\u00eete, discr\u00e8te sur le r\u00e9seau, qui ne demande presque jamais d&rsquo;intervention \u2014 et qui, le jour o\u00f9 elle en aurait vraiment besoin, est cens\u00e9e se red\u00e9marrer elle-m\u00eame avant que quiconque ne s&rsquo;en aper\u00e7oive.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Parmi tous les services qui tournent \u00e0 la maison, il y en a un qu&rsquo;on ne voit jamais, qu&rsquo;on ne consulte jamais par un navigateur, mais dont absolument tout le reste d\u00e9pend en silence : l&rsquo;heure. Chez moi, c&rsquo;est un petit Raspberry Pi 4 (4 Go de RAM, adresse fixe 192.168.1.3) qui s&rsquo;en occupe, avec [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-4765","post","type-post","status-publish","format-standard","hentry","category-electronique-maker"],"_links":{"self":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/4765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/comments?post=4765"}],"version-history":[{"count":1,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/4765\/revisions"}],"predecessor-version":[{"id":4766,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/posts\/4765\/revisions\/4766"}],"wp:attachment":[{"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/media?parent=4765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/categories?post=4765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sophie-matthieu.eu\/index.php\/wp-json\/wp\/v2\/tags?post=4765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}