Vous êtes sur la page 1sur 5

NTP ( Network Time Protocol)

Sur un serveur, beaucoup de programmes utilisent l’heure système : des


logs qui sont tous horodatés, aux bases de données qui enregistrent
l’heure de certains changements, les applications sont nombreuses.
La précision de l’heure devient particulièrement critique dès lors que
plusieurs machines travaillent ensemble, car elles utilisent souvent l’heure
pour synchroniser leurs actions. Vous aurez vous-même certainement
besoin de vous appuyer sur l’heure si vous devez faire le lien entre plusieurs
fichiers de logs répartis sur plusieurs machines.

Dans un premier temps, je vais vous montrer comment configurer


manuellement l’heure de votre système. C’est toujours utile, mais pour être
sûr de garder votre serveur à l’heure à tout moment, ce ne sera pas
suffisant. Je vous montrerai donc ensuite comment utiliser le
protocole NTP, pour Network Time Protocol, pour synchroniser en continu
l’heure de tous les ordinateurs de votre réseau avec des horloges de
référence en ligne.

Régler l’heure de votre système avec timedatectl


Dans le chapitre précédent, je vous disais que systemd est utilisé pour
gérer de plus en plus de fonctions système. En voilà un nouvel exemple,
puisqu’il permet même de configurer l’heure de votre serveur. Pour cela,
vous utiliserez la commande timedatectl .
Utilisée seule, la commande timedatectl affichera les informations sur
l’heure de votre système :
$ timedatectl Local time: Wed 2021-11-23 18:49:37
UTC
Universal time: Wed 2021-11-23 18:49:37 UTC
RTC time: Wed 2021-11-23 18:49:38
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes systemd-timesyncd.service
active: yes
RTC in local TZ: no
Si votre horloge n’est pas synchronisée automatiquement en ligne, vous
pouvez configurer l’heure de votre serveur en utilisant set-time :
$ sudo timedatectl set-time “2021-11-23 18:32:53”
Vous pouvez également lister les différents fuseaux horaires par list-
timezones mais attention, il y en a beaucoup...
$ timedatectl list-timezones | grep Paris
Europe/Paris
Vous pouvez ensuite configurer votre fuseau horaire grâce à set-timezone :
$ sudo timedatectl set-timezone Europe/Paris
Passez maintenant au niveau supérieur et partez à la découverte de NTP.
Gérez l’heure de votre réseau avec NTP
NTP est donc un protocole qui permet de synchroniser l’heure de différents
systèmes à travers un réseau IP. Des clients synchronisent leur horloge
avec des serveurs. Ces serveurs se synchronisent eux-même avec d’autres
serveurs, et ainsi de suite. Ce réseau est organisé en couches qu’on appelle
des strata (un stratum, des strata, vive le latin !).

Le réseau NTP a une structure hiérarchique


Le plus haut niveau est le stratum 0 qui est composé de matériels
spécialisés généralement couplés avec des horloges atomiques. Les
serveurs synchronisés directement avec des serveurs de stratum 0 sont
appelés stratum 1, puis les serveurs synchronisés avec les serveurs
de stratum 1 sont des stratum 2, et ainsi de suite.

Beaucoup d’organisations gèrent leurs propres serveurs de temps.


Certaines organisations ne permettent qu’une utilisation en interne de leur
serveur NTP, tandis que d’autres permettent une utilisation publique de
leur serveur. Un des plus grands clusters de serveurs NTP publics est
appelé pool.ntp.org. C’est celui qui est configuré par défaut dans la plupart
des distributions Linux.

Sous les dernières versions d’Ubuntu, l’horloge système est


automatiquement synchronisée en réseau. Cette synchronisation est gérée
par le service systemd systemd-timesyncd.service . Vous pouvez accéder à
plus d’informations sur ce service par la commande :
$ systemctl status systemd-timesyncd
Il est donc possible de synchroniser l’horloge de tous les serveurs de son
réseau en synchronisant chacun d’entre eux avec le réseau mondial NTP ;
mais dès que votre réseau grossit, il devient avantageux d’avoir son propre
serveur NTP. En effet, avoir son propre serveur NTP permet :

• d’améliorer la synchronisation entre les serveurs de votre réseau ;


• de réduire le trafic dû aux synchronisations de temps sur votre liaison
Internet ;
• de garder vos serveurs synchronisés même en cas de coupure
d’Internet ;
• d’éviter de solliciter inutilement le réseau mondial NTP.
Voyons donc comment installer votre propre serveur NTP.

Gérez votre propre serveur NTP avec Chrony


À partir de la version 18.04, Ubuntu utilise le logiciel Chrony comme serveur
NTP par défaut. Vous pouvez installer ce programme par la commande :

$ sudo apt-get install chrony


Vous devez ensuite configurer Chrony en éditant le
fichier /etc/chrony/chrony.conf. Voici quelques explications sur les
informations que vous trouvez dans ce fichier de configuration :

pool ntp.ubuntu.com iburst maxsources 4


pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
Les lignes commençant par pool indiquent l’adresse des serveurs NTP (ou
des groupes de serveurs, plus exactement) à utiliser, et le nombre de
ressources maximum à utiliser pour chacun d’entre eux. À priori, vous
pouvez continuer à utiliser la sélection par défaut.
driftfile /var/lib/chrony/chrony.drift
driftfile indique le fichier à utiliser pour enregistrer la dérive de temps de
votre serveur par rapport au pool. Ça permet de resynchroniser plus vite
votre horloge.
Par défaut, Chrony ne permet pas à des clients de se synchroniser avec ce
service de temps. Vous devez explicitement autoriser le réseau de vos
clients par la directive allow . Rajoutez donc en fin de fichier la ligne
suivante, et enregistrez votre fichier :
allow 192.168.29/24
Vous pouvez alors lancer Chrony et l’activer au démarrage du serveur :

$ sudo systemctl enable chrony


$ sudo systemctl start chrony
Par défaut, Chrony écoute sur le port UDP 123 (port par défaut pour le service NTP).
Assurez-vous d’avoir ouvert ce port sur votre pare-feu pour que vos clients puissent se
synchroniser.
Comme Chrony s’occupe maintenant de synchroniser votre horloge
système, vous pouvez désactiver systemd-timesyncd par :
$ sudo timedatectl set-ntp false
Chrony fournit une interface en ligne de commande pour interroger et
gérer Chrony : chronyc . Vous pouvez par exemple afficher les serveurs avec
lesquels vous êtes synchronisé par la commande :
$ chronyc sources
210 Number of sources = 8
MS Name/IP address Stratum Poll Reach LastRx Last
sample
==============================================================
=================
^+ golem.canonical.com 2 6 377 22 -86ms[ -
86ms] +/- 138ms
^- pugot.canonical.com 2 6 377 24 -27ms[ -
27ms] +/- 69ms
^- chilipepper.canonical.com 2 6
377 87 +1290us[+2012us] +/- 65ms
^- alphyn.canonical.com 2 6 377 20 -123ms[ -
123ms] +/- 217ms
^- ks3301805.kimsufi.com 3 6 77 23 -
27ms[ -27ms] +/- 96ms
^* ntp-sop.inria.fr 1 6
377 86 +300us[+1022us] +/- 15ms
^- kiwi.bitschine.fr 2 6 377 22 -2061us[-
2061us] +/- 35ms
^+ mail.fangfufu.co.uk 2 6 377 23 -143us[ -
143us] +/- 27m
Le serveur qui commence par ^* est la source de temps actuelle. Ceux qui
commencent par ^+ sont utilisés pour calculer une moyenne de temps, et
ceux qui commencent par ^- ne sont pas utilisés actuellement.
Il est maintenant temps de configurer votre client pour utiliser votre
serveur NTP local.

Configurez votre client pour utiliser votre propre serveur NTP


La manière d’indiquer l’adresse de votre serveur NTP à votre client
dépendra évidemment du système sur lequel il est installé. Si vous avez
repris le client configuré dans le cours “Montez un serveur de fichiers sous
Linux”, votre client est sous Ubuntu et est déjà synchronisé par le
service systemd-timesyncd . Il ne vous reste alors qu’à lui indiquer l’adresse
de votre serveur en éditant le fichier /etc/systemd/timesyncd.conf :
[Time]
NTP=vm-server
Vous pouvez ensuite redémarrer votre service pour prendre en compte la
nouvelle configuration :

$ sudo systemctl restart systemd-timesyncd


Enfin, vous pouvez vérifier que la synchronisation se fait bien par la
commande :

$ sudo systemctl status systemd-timesyncd


● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service;
enabled;
vendor preset: enabled)
Active: active (running) since Wed 2021-11-23 18:06:29 CEST;
1h 10min ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 3229 (systemd-timesyn)
Status: "Synchronized to time server 192.168.29.1:123 (vm-
server)

Vous aimerez peut-être aussi