Table des matières

Network Time Protocol

Network Time Protocol (« protocole d'heure réseau ») ou NTP est un protocole qui permet de synchroniser, via un réseau informatique, l'horloge locale d'ordinateurs sur une référence d'heure.

La première version v. 0 de NTP, formalisée dans la RFC 958, date de septembre 1985. Dès le début, ce protocole fut conçu pour offrir une précision de synchronisation meilleure que la seconde. Par rapport au service « Time Protocol » qui offre un service d'heure sans proposer une infrastructure, le projet NTP propose une solution globale et universelle de synchronisation qui est utilisable dans le monde entier.

La version 3 de NTP est la plus répandue à ce jour. Elle est formalisée par la RFC 1305 et a le statut « Draft Standard (en) » c'est-à-dire « spécification finale », elle spécifie plusieurs aspects :

La mise au point de ce protocole et des algorithmes a été menée de pair avec le développement d'un logiciel conforme à ces spécifications. De ce fait, cette réalisation fait office de référence dans le domaine et est appelée « logiciel NTP2 » même si d'autres solutions existent. Ces travaux ont été réalisés en grande partie à l'Université du Delaware grâce au professeur David L. Mills et à une importante équipe de bénévoles.

La version 4 de NTP est une révision importante publiée dans la RFC 5905 en juin 2010.

Aussitôt après la parution de la version 3 de NTP, une version simplifiée est apparue, appelée « Simple Network Time Protocol » (SNTP) qui a également fait l'objet de plusieurs RFC. Par rapport à NTP, cette version est simplifiée dans le sens qu'elle ne spécifie pas les algorithmes à mettre en place dans les machines.

Présentation générale de NTP

Le NTP est un protocole permettant de synchroniser l'horloge d'un ordinateur avec celle d'un serveur de référence. NTP est un protocole basé sur UDP et utilise le port 123.

Le protocole NTP comprend :

Architecture du réseau NTP

L'architecture NTP prévoit :

Dans la terminologie NTP, les serveurs de 'stratum 1' sont appelés serveurs primaires, et les autres sont appelés serveurs secondaires.

Chaque nœud de cette architecture doit être configuré en lui indiquant au minimum quels sont ses serveurs parents et/ou collatéraux. C'est à la charge de chaque utilisateur de réaliser localement cette configuration. C'est cette agrégation de configurations qui, de proche en proche, crée le réseau NTP, il n'est pas préexistant ni même configuré de façon centralisée. Cette architecture est flexible, extensible et robuste, mais c’est à la charge des utilisateurs d’y contribuer.

Méthodes pour la diffusion de l'heure

La diffusion de l'heure est basée :

Partie messagerie

La messagerie NTP prévoit :

Lors de la parution de nouvelles versions de NTP, la structure des nouveaux messages est formée en agrégeant les informations nouvelles à la suite de celle des messages de version précédente. Cette façon de procéder permet l'interopérabilité des différentes versions ce qui facilite la migration globale du parc de machines d'une version ancienne vers une nouvelle.

Partie algorithmique

Le protocole NTP prévoit pour chaque client des algorithmes :

  1. pour calculer la période d'interrogation du ou des serveurs ;
  2. pour calculer l'écart de son heure locale avec celle d'un serveur donné ;
  3. pour calculer la durée de transit des messages sur le réseau ;
  4. pour choisir le serveur qui présente les meilleures garanties de qualité, et calculer ainsi son stratum local ;
  5. pour filtrer les écarts et calculer les corrections temps/fréquence à appliquer sur son horloge locale ;
  6. pour gérer les secondes intercalaires.

Installation serveur - NTP

Installation du package ntp

[root@srv ~]# yum -y install ntp

Déclarer les pool suivants en se basant sur le site pool.ntp.org : https://www.pool.ntp.org/zone/fr

[root@srv ~]# nano /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

Autoriser votre réseau à se synchroniser au serveur de temps

[root@srv ~]# nano /etc/ntp.conf
# Allow NTP client access from local network.
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap

Démarrage et activation du daemon automatique

[root@srv ~]# service ntpd start
[root@srv ~]# chkconfig --level 235 ntpd on
[root@srv ~]# systemctl start ntpd
[root@srv ~]# systemctl enable ntpd

Vérification de la synchro.

[root@srv ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+163-172-10-212. 138.96.64.10     2 u   44   64  377   20.028   16.901   5.735
*ntp-3.arkena.ne 138.96.64.10     2 u   48   64  377   20.941   17.624  10.273
+eva.aplu.fr     145.238.203.14   2 u   51   64  377   38.333   19.782  10.606
+cdg1.m-d.net    193.190.230.65   2 u   36   64  377   17.730   17.137   6.615

On peut ainsi connaître pour chaque serveur distant, dit pair de la machine hôte :

Note : Au-delà de 211 (2048) secondes, les durées when et poll sont exprimées en minutes (34m, 68m, 137m, etc.)

Installation serveur - Chrony

Installation du package chrony

[root@srv ~]# yum -y install chrony

Déclarer les pool suivants en se basant sur le site pool.ntp.org : https://www.pool.ntp.org/zone/fr

[root@srv ~]# nano /etc/chrony.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
server 3.fr.pool.ntp.org

Autoriser votre réseau à se synchroniser au serveur de temps

[root@srv ~]# nano /etc/chrony.conf
# Allow NTP client access from local network.
allow 192.168.0.0/16

Démarrage et activation du daemon automatique

[root@srv ~]# systemctl start chronyd
[root@srv ~]# systemctl enable chronyd

Vérification de la synchro.

# chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp.tuxfamily.net             2   6    17    49  -8471us[-8471us] +/-   67ms
^+ ovh.sqlserver.express         2   6     7    49    +12ms[  +12ms] +/-   43ms
^- cdg1.m-d.net                  2   6    17    48  +5270us[+5270us] +/-   59ms
^* cp01.webhd.nl                 3   6    17    50  +1597us[-2807us] +/-   62ms

Les colonnes sont comme suit :

Configuration client

Pour la configuration des clients, nous allons faire la même configuration à une exception prêt. Nous allons déclarer comme serveur de temps référence notre nouveau serveur déclaré plus haut.

Exemple pour un serveur utilisant le service 'chrony' :

Installation du package chrony

[root@srv ~]# yum -y install chrony

Déclarer notre serveur de temps

[root@srv ~]# nano /etc/chrony.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 192.168.1.100 # L'ip de notre serveur de temps !

Démarrage et activation du daemon automatique

[root@srv ~]# systemctl start chronyd
[root@srv ~]# systemctl enable chronyd

Vérification de la synchro.

# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 10.75.168.28                  3   6   377    53    +39us[+2466us] +/-   71ms

Annexe

https://www.ntppool.org/fr/