Synchronisation NTP

Rédigé par Alexandre le 2016-01-06

#sysadmin #loisir

Le Network Time Protocol permet de synchroniser l'horloge locale d'un système via un réseau informatique. Concrètement, si l'ordinateur sur lequel vous lisez ces lignes est à l'heure, c'est grâce au protocol NTP.

En quoi est-ce important d'être à l'heure ?
Imaginons que nous arrivons à une boulangerie fermée où un panneau nous indique l'horaire de fermeture à 18h, mais sur notre montre il est indiqué 15h. La boulangère soutiendra qu'il était 18h passé et nous qu'il était 15h. N'étant que deux et n'ayant pas de référence externe, il est impossible de déterminer qui a raison ; les systèmes "boulangère" et "nous" conviendront d'un "tant pis".

Transposons ça à une application un peu plus informatique en prenant l'exemple d'un annuaire d'entreprises de type LDAP.
L'annuaire est sur un serveur disposant d'une heure, elle est considérée quoiqu'il arrive comme celle faisant foi. Nous nous connectons via notre compte détenu par cet annuaire à un ordinateur qui lui-même est enregistré dans cet annuaire. Lors d'une action de compte (connexion, changement de mot de passe, etc), une requête est envoyée à l'annuaire pour, par exemple, vérifier que notre utilisateur et mot de passe sont bien dans l'annuaire et valides. La requête contient l'heure et l'annuaire va vérifier qu'il n'y pas de décalage entre son envoi et sa réception ; si un décalage existe, alors la requête est refusée.
Heureusement, le truc est plutôt bien ficelé : lors de l'ajout d'un ordinateur à l'annuaire, celui-ci prend comme serveur NTP le serveur d'annuaire sur lequel il est ajouté. Mais si ce serveur n'est pas à l'heure, que se passe-t-il ? C'est simple, aucunent n'est à l'heure et certaines applications, qui se synchroniseraient de leur coté, ne fonctionneraient tout simplement plus.

Bref, tout ça pour dire qu'il faut surtout pas décaler l'heure de la pilule sous peine d'avoir un gosse par erreur.

Windows

Commencez par ouvrir une fenêtre Powershell en administrateur local, puis renseignez les serveurs NTP français :

w32tm.exe /config /manualpeerlist:"0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org"

Maintenant, il faut dire au service de temps Windows que sa configuration a été changée :

w32tm.exe /config /update

La commande qui va suivre permet de redémarrer le service de temps pour qu'il se synchronise immédiatement ; je déconseille fortement de le faire pendant les heures ouvrées, car si pour une raison X ou Y votre serveur doit rattraper plus que quelques secondes, vous risqueriez de mettre en péril certaines connexionsent-serveur.
Bon allez, il est 4h du matin, un dimanche en rentrant de soirée, j'y vais :

Restart-Service w32time

On notera qu'encore une fois, la sortie pour ce genre de commande manque un peu de détails... Direction le journal d'événements Windows pour essayer d'en savoir un peu plus.

  1. Créer un vue personnalisée avec tous les messages pour la source Time-Service
  2. Ouvrir la vue personnalisée créée
  3. Vérifier qu'au moins un serveur NTP a été joint correctement

<img src="/articles/synchronisation-ntp/synchronisation_ntp_sur_windows.png" alt="Observateur d'évènement">

Les avertissements présents sont souvent dû à un problème de synchronisation sur un des serveurs, mais c'est pour ça qu'on en ajoute quatre.

Linux

Comme d'habitude, je donne la méthode pour Debian/Ubuntu.
Dans un premier temps, nous allons vérifier le fuseau horaire en le changeant :

dpkg-reconfigure tzdata

Maintenant, il ne reste plus qu'à installer le démon qui s'occupera de synchroniser automatiquement l'heure locale avec un serveur NTP :

apt install ntp

Normalement, la configuration de base fait l'affaire, donc je ne détaille pas plus longuement.
Pour ceux qui voudraient un système "propre", il est possible de supprimer le paquet ntpdate qui, lui, met à jour l'heure que lors du démarrage de l'interface réseau du serveur (à son redémarrage quoi) :

apt remove --purge --auto-remove ntpdate

Références :