4. Synchronisation précise de l'heure

Avoir l'heure exacte sur tous vos systèmes est aussi important que d'avoir une stratégie solide de la sécurité du réseau (ce qui est bien plus qu'utiliser des pare-feu). C'est un des éléments essentiels d'une administration système basée sur de bonnes pratiques qui mène à des systèmes bien organisés et sûrs. Une heure précise est particulièrement nécessaire lorsqu'on travaille avec des applications distribuées, des services web ou des outils distribués de surveillance réseau.

4.1. NTP : protocole de diffusion du temps en réseau (Network Time Protocol)

Nous ne décrirons pas ici le protocole, mais comment cette magnifique invention, ajoutée à la présence envahissante d'internet, peut nous être utile. Vous pouvez en apprendre plus sur www.ntp.org.

Une fois le système configuré, NTP arrivera à garder l'heure exacte en ne faisant que de très petits ajustements pour ne pas perturber les applications en cours d'exécution.

L'heure exacte peut être obtenue en utilisant des appareils basés sur la fréquence électronique des atomes ou des cyclotrons. Il existe aussi une méthode basée sur le système de satellites GPS. La première est plus fiable, mais la seconde n'est pas si mauvaise. Les deux nécessitent un matériel très spécifique et très cher, mais leurs propriétaires (en général des universités ou des laboratoires de recherche) les connectent à des ordinateurs qui font tourner un serveur NTP qui sont connectés à internet et qui vous laissent y accéder gratuitement. Et c'est grâce à eux que nous synchroniserons nos systèmes.

4.2. Construire une architecture simple de synchronisation de l'heure

Vous aurez besoin de  :

  1. Une connexion directe ou indirecte (à travers un pare-feu) à internet.

  2. Choisir des serveurs NTP. Vous pouvez utiliser le serveur public pool.ntp.org ou en choisir dans la deuxième strate de serveurs de temps publics sur le site web de NTP. Si vous n'avez pas d'accès à internet, votre administrateur WAN (ce doit être un type intelligent) peut probablement vous donner des adresses internes.

  3. Avoir le logiciel NTP installé sur tous les systèmes que vous voulez synchroniser. Vous pouvez trouver les RPM sur les cédéroms de votre distribution Linux favorite ou faire une recherche sur http://rpmfind.net/.

Voici un exemple d'une bonne architecture :

Figure 1. Serveurs relais locaux pour NTP

Architecture NTP

Si vous avez plusieurs machines à synchroniser, ne les faites pas toutes accéder aux serveurs NTP externes que vous avez choisis. Seuls deux de vos serveurs doivent accéder aux serveurs NTP externes. Les autres machines se synchroniseront sur ces deux dernières. Nous les appellerons serveurs relais.

Vos serveurs relais peuvent être n'importe lesquelles de vos machines déjà disponibles sur votre réseau. NTP consomme très peu de mémoire et de processeur. Vous n'avez pas besoin d'une machine dédiée à cette fonction.

[Astuce]Astuce

Créer des alias pour les noms d'hôtes de vos serveurs relais locaux est une bonne idée. Vous pouvez définir par exemple ntp1.mon-domaine.fr et ntp2.mon-domaine.fr. Puis n'utilisez que ces noms en configurant les machines clientes. De cette façon, vous pouvez déplacer la fonctionnalité NTP vers un nouveau serveur relais (avec un adresse IP et un nom d'hôte différents) sans avoir à reconfigurer les clients. Demandez à votre administrateur DNS de créer ces alias.

4.3. Configuration NTP

Pour vos serveurs relais

Éditez /etc/ntp.conf et ajoutez les serveurs distants que vous avez choisis :

Exemple 5. Fichier /etc/ntp.confdes machines relais

server  ntp.cnrs.fr        # Un serveur de strate 1 de cnrs.fr
server  autre-ntp.gouv.fr  # Un serveur de strate 2 de gouv.fr

De nouveau, vous pouvez utiliser le serveur public pool.ntp.org ou obtenir une liste de serveurs de temps publics sur le site web de NTP.

Pour vos clients

Éditez /etc/ntp.conf et ajoutez vos serveurs relais avec un nom standard :

Exemple 6. Fichier /etc/ntp.conf des machines clientes

server  ntp1.mon-domaine.fr   # Mon premier serveur relais local
server  ntp2.mon-domaine.fr   # Mon deuxième serveur relais local

Si votre machine a une heure UTC différente de plusieurs minutes par rapport aux serveurs NTP, NTP ne fonctionnera pas. Dans ce cas, vous devez d'abord faire un synchronisation complète. Je vous recommande de le faire en dehors des heures de production. Vous n'avez besoin de le faire que lors de l'initialisation de votre configuration NTP, jamais plus après :

Exemple 7. Première synchronisation

bash# ntpdate autre-ntp.gouv.fr	1
24 Mar 18:16:36 ntpdate[10254]: step time server 200.100.20.10 offset -15.266188 sec
bash# ntpdate autre-ntp.gouv.fr	2
24 Mar 18:16:43 ntpdate[10255]: adjust time server 200.100.20.10 offset -0.000267 sec
1

Première synchronisation complète. L'horloge retardait de 15 secondes.

2

Deuxième synchronisation complète, juste pour être sûr. Maintenant, nous ne retardons pratiquement plus, ce qui est une bonne chose.

La dernière étape consiste à démarrer ou à redémarrer le démon NTP sur chaque machine :

bash# service ntpd restart

4.4. Observer votre machine se synchroniser

Maintenant que tout est configuré, NTP va garder l'heure de votre machine synchronisée. Vous pouvez observer ce processus en utilisant la commande d'interrogation NTP (ntpq) :

Exemple 8. Un exemple d'interrogation de l'état de la synchronisation temporelle

bash# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
-jj.cs.umb.edu   gandalf.sigmaso  3 u   95 1024  377   31.681  -18.549   1.572
 milo.mcs.anl.go ntp0.mcs.anl.go  2 u  818 1024  125   41.993  -15.264   1.392
-mailer1.psc.edu ntp1.usno.navy.  2 u  972 1024  377   38.206   19.589  28.028
-dr-zaius.cs.wis ben.cs.wisc.edu  2 u  502 1024  357   55.098    3.979   0.333
+taylor.cs.wisc. ben.cs.wisc.edu  2 u  454 1024  347   54.127    3.379   0.047
-ntp0.cis.strath harris.cc.strat  3 u  507 1024  377  115.274   -5.025   1.642
*clock.via.net   .GPS.            1 u  426 1024  377  107.424   -3.018   2.534
 ntp1.conectiv.c 0.0.0.0         16 u    - 1024    0    0.000    0.000 4000.00
+bonehed.lcs.mit .GPS.            1 u  984 1024  377   25.126    0.131  30.939
-world.std.com   204.34.198.40    2 u  119 1024  377   24.229   -6.884   0.421

La signification de chaque colonne

remote

Est le nom du serveur NTP distant. Si vous utilisez l'option -n, vous verrez les adresses IP de ces serveurs à la place de leurs noms.

refid

Indique d'où chaque serveur obtient son heure. Il peut s'agir d'un nom d'hôte ou de quelque chose comme .GPS., indiquant une source GPS (Global Positioning System).

st

La strate est un nombre allant de 1 à 16 qui indique la précision du serveur distant. 1 est le plus fiable, 16 signifie que le serveur n'est pas disponible. Votre strate sera égale au serveur le plus fiable plus 1.

poll

L'intervalle (en secondes) entre deux requêtes de temps. La valeur sera comprise entre les valeurs minimales et maximales autorisées. Initialement la valeur sera petite pour permettre une synchronisation rapide. Une fois que les horloges sont synchrones, le temps entre deux requêtes augmentera pour diminuer le trafic réseau et la charge sur les serveurs de temps populaires.

reach

C'est une représentation en base 8 d'un tableau de 8 bits représentant les 8 dernières fois que la machine a essayé d'atteindre le serveur. Le bit est mis à 1 si le serveur distant a pu être atteint.

delay

Le délai (en secondes) nécessaire pour recevoir une réponse à une demande de "quelle heure est-il ?".

offset

La valeur la plus importante. Le décalage de temps entre le serveur local et le serveur distant. Pendant la synchronisation, le décalage diminue, indiquant que l'horloge locale devient plus précise.

jitter

Cette colonne indique la dispersion, qui est une mesure de la variance statistique du décalage pendant plusieurs paires de requête/réponse successives. Des valeurs faibles de la dispersion sont meilleures que des valeurs élevées. Plus elles sont faibles, plus la synchronisation temporelle sera précise.

Signification des signes devant les noms de serveur

-

Signifie que le service NTP local n'aime pas beaucoup ce serveur

+

Signifie que le service NTP local aime ce serveur

x

Marque un mauvais serveur

*

Indique le serveur préféré actuel

4.5. Lancer automatiquement NTP au démarrage

Si vous voulez toujours avoir le service NTP sur votre machine même si vous la redémarrez, faites ceci sur chaque machine :

bash# chkconfig --level 2345 ntpd on

Cela garantira un démarrage automatique.

Si votre machine fonctionne longtemps sans redémarrage (des mois ou des années), vous remarquerez une importante différence entre la très imprécise horloge matérielle et l'heure système (maintenant très précise). Les distributions Linux modernes copient l'heure système dans l'horloge matérielle chaque fois que le système est arrêté en utilisant un mécanisme similaire à la commande setclock. De cette façon, au démarrage suivant, vous obtiendrez une date et une heure presque aussi précises que ce qu'elles étaient lors de l'arrêt de votre ordinateur.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:27