[ Introduction | Installation | Configuration d'un serveur ( le fichier /etc/services, démarrage automatique, synchronisation par l'horloge interne , synchronisation par un serveur sur internet  ) |  Configuration d'un client linux  ( installation, configuration , synchronisation manuelle,synchronisation automatique avec cron, synchronisation au boot ) |  Utilisation  (estimer son retard sur le poste client, estimer son retard sur le poste serveur) ]

Dernière modification 27 novembre 2004

Network Time Protocol

Configuration réseau


Introduction

N'importe quel ordinateur dispose d'une horloge interne qui est utilisé par le système d'exploitation pour tous les actions liées à la date (gestion des fichiers, courriers électroniques, ...). Cette horloge a généralement la facheuse tendance de dériver jusqu'à plusieurs secondes par jour. C'est pas vraiment génant en poste isolé mais ça devient plutôt génant avec des postes en réseau qui partagent les mêmes fichiers.
D'où l'intérêt du Network Time Protocol qui comme son nom l'indique est un protocole (RFC 1305 version 4) chargé de donner l'heure d'une manière précise en se basant sur une référence de temps (horloge atomique, GPS, ...).
Le Network Time Protocol est basé sur une structure pyramidale à plusieurs niveaux, les serveurs d'un niveau vont synchroniser les serveurs de la couche inférieure et sont synchronisés par les serveurs de la couche au dessus, au fur et à mesure qu'on remonte les niveaux, on trouve de moins en moins de serveur et inversement dans l'autre sens. Au niveau supérieur, on part tout en haut d'une référence de temps qui sert à synchroniser un ensemble de serveurs constituant la couche 1, appelé plus communément strate 1 (stratum en anglais), ils servent à synchroniser un ensemble de serveurs encore plus nombreux constituant la strate 2, et ainsi de suite jusqu'à la strate 15. On voit donc qu'à part la référence initiale et les postes de la strate 15, tous les postes des différentes strates sont à la fois client et serveur.
L'intérêt d'une telle architecture est de pouvoir répartir la demande de synchronisation, et d'éviter à avoir à s'adresser directement à la référence première, vous trouverez ainsi toujours un serveur d'une strate élevée proche de chez vous.
Cette page a pour objet de présenter la configuration d'un client NTP sur un réseau relié de manière intermittente à internet (mise à l'heure à chaque connexion) qui sert de serveur pour les autres postes du réseau.

Dans un premier temps je ne présente que la configuration d'un serveur NTP linux qui utilise son horloge système comme horloge de référence sans synchronisation avec une horloge externe, je présente aussi la configuration d'un client linux du réseau privé sur ce serveur NTP pour lancer une synchronisation toutes les heures.
Dans un second temps je configurerai le serveur NTP pour qu'il se synchronise à chaque connexion à un serveur extérieur sur le net.
Dans un dernier temps je présenterai des clients NTP du réseau privé sous Windows 9.X.
Je compte aussi détailler le fichier de config de NTP ainsi que les commandes qui vont avec.

On supposera que votre serveur se nomme obelix avec pour adresse IP 192.168.13.11 et que votre domaine privé est armoric.bz.

[Retour haut de la page]

Installation

Que ce soit sur un poste client ou serveur Linux vous aurez à installer le package NTP. On peut récupérer les sources de NTP à l'adresse suivante www.eecis.udel.edu/~ntp ou éventuellement son alias à www.ntp.org tout simplement. L'archive est au format tar.gz, pour décompresser placer vous dans un répertoire de travail, puis :

tar xvfz ntp-4.2.0.tar.gz

Ca va vous créer un répertoire ntp-4.2.0, dans lequel vous pourrez taper successivement

./configure
make

Puis en tant que root

make install

NOTE: Les exécutables sont installés par défaut dans /usr/local/bin, si vous voulez les installer ailleurs dans /usr/bin par exemple vous devrez taper:

./configure --prefix=/usr

Accessoirement pour plus d'infos sur les options de configure, tapez auparavant:

./configure --help

[Retour haut de la page]

Configuration du serveur

Le fichier /etc/services

Le fichier /etc/services doit contenir les lignes suivantes:

ntp             123/tcp
ntp             123/udp                         # Network Time Protocol

On les trouve par défaut sur n'improte quelle distrib linux.

[Retour haut de la page]

Démarrage automatique

Pour que le daemon NTP soit lancé à chaque démarrage du serveur NTP, sous une arborescence de type RedHat/Mandrake,  créer le fichier ntpd  suivant que vous placerez sous le répertoire /etc/rc.d/init.d

#! /bin/sh
#
# chkconfig: - 60 20
# description: Network Time Protocol

# processname: ntpd

# Get config.
. /etc/sysconfig/network

# Get functions
. /etc/rc.d/init.d/functions

# Check that networking is up.
if [ ${NETWORKING} = "no" ] ; then
        exit 0
fi

# See how we were called.
case "$1" in
  start)
        echo -n "Starting NTP services: " 
        ntpdate -u lptfpc46.obspm.fr
        daemon /usr/local/bin/ntpd -l /var/log/ntp.log

        echo
        touch /var/lock/subsys/ntpd
        ;;
  stop)
        echo -n "Stopping NTP services: "
        killproc ntpd
        echo
        rm -f /var/lock/subsys/ntpd
        ;;
  status)
        status ntpd
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

exit 0

Ce fichier doit avoir pour droit 755

chmod 755 ntpd

et pour que ntp soit lancé à l'état de marche 3, 4 et 5 tapez:

chkconfig --level 345 ntpd on

Et arrêté aux autres états de marche

chkconfig --level 0126 ntpd off

ATTENTION: Par défaut dans le fichier ntpd on suppose que les exécutables sont dans /usr/local/bin à modifier éventuellement suivant votre config.

Maintenant pour lancer ntpd deux solutions, soit taper:

/etc/rc.d/init.d/ntpd start

ou

/usr/local/bin/ntpd -l /var/log/ntp.log

Pour info l'option "-l" permet de créer un fichier de log /var/log/ntp.log. Par la suite au boot, votre serveur ntp sera automatiquement lancé.

Attention dans le cas d'une connexion permanente il faut relancer ntpd à chaque reconnexion à cause du changement d'adresse IP. Dans le fichier /etc/ppp/ip-up rajoutez à la fin

/etc/rc.d/init.d/ntpd restart


[Retour haut de la page]

Si vous voulez vous servir de votre horloge interne comme horloge de référence

Vous devez créer un fichier /etc/ntp.conf qui contiendra:

server 127.127.1.0

Ceci indiquera à votre serveur qu'il doit se synchroniser sur l'horloge locale.

ATTENTION: Vous devez mettre strictement les mêmes adresses IP, même si ce n'est pas l'adresse que vous utilisez.

Pour voir si ça marche il suffit de taper

ntpq -p

Voilà le résultat

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        LOCAL(0)        10 l   32   64    1    0.000    0.000   0.031

Dans ce cas pas de synchronisation avec ntpdate, en tapant ntptrace on obtient d'abord

localhost.localdomain: stratum 16, offset -0.000365, synch distance 0.00011
0.0.0.0:        *Not Synchronized*

Puis au bout de quelques minutes

localhost.localdomain: stratum 6, offset 0.000095, synch distance 0.00731

[Retour haut de la page]

Si vous voulez vous synchroniser sur un serveur présent sur internet

Vous devez créer un fichier /etc/ntp.conf qui contiendra:

server ntp.via.ecp.fr prefer
server ntp.univ-lyon1.fr
server ntp.ens.fr

Pour connaître la liste des serveurs français NTP, allez faire un tour à l'URL suivante. Eviter de choisir un serveur de niveau 1.

NOTE Le paramètre prefer indique le serveur à utiliser de préférence. Pour vous synchroniser, lancer une connexion, taper  alors en tant que root :

ntpdate ntp.via.ecp.fr

Vous prendrez le serveur ntp qui apparaît en premier dans la liste donnée par /etc/ntp.conf. Voilà le résultat

 3 Nov 16:01:02 ntpdate[11159]: adjust time server 138.195.130.71 offset -0.004474 sec

La synchronisation n'est pas immédiate, elle prend quelques minutes, d'ailleurs en tapant ntptrace (non nécessaire d'être root pour le lancer) qui permet d'avoir des informations sur la synchronisation on obtient

localhost.localdomain: stratum 16, offset 0.000087, synch distance 0.47913
0.0.0.0:        *Not Synchronized*

Au bout de quelques minutes, en tapant à nouveau :

ntptrace

On obtient

localhost.localdomain: stratum 3, offset 0.000099, synch distance 0.42995
zen.via.ecp.fr: stratum 2, offset -0.040265, synch distance 0.05083
chronos.cru.fr: stratum 1, offset -0.037894, synch distance 0.00000, refid 'GPS'

On voit le serveur de stratum 2 que vous avez utilisé, lui-même reposant sur le serveur de stratum 1 chronos.cru.fr qui utilise une horloge de référence basé sur le temps GPS. Par ailleurs on découvre la différence en seconde entre l'horloge du client et celle du serveur (offset) et une estimation de l'erreur "aléatoire" (synch distance), les deux chiffres sont exprimés en seconde.

Par la suite la synchronisation sera automatique dès lors que vous êtes connecté un certain temps. Pas de problème si vous avez une connexion permanente (ADSL), par contre dans le cas d'une connexion intermittente du style RTC, vous pouvez  forcer une synchronisation en rajoutant dans le fichier /etc/ppp/ip-up

/usr/local/bin/ntpdate ntp.via.ecp.fr

En mode non connecté (off-line), vous éviterez bien sûr de chercher à synchroniser votre serveur ntp (et donc de lancer ntpdate). Par ailleurs voilà ce que donne ntptrace en mode non connecté.

localhost.localdomain: stratum 3, offset 0.000118, synch distance 0.46487
138.195.130.71:         *Timeout*

Il ne trouve pas le serveur  ntp.via.ecp.fr. Dans ce cas pas de synchronisation jusqu'à la prochaine connexion.

Autre moyen de voir que vous êtes bien synchronisé, en tapant :

ntpq -p

Voilà le résultat

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*zen.via.ecp.fr  chronos.cru.fr   2 u   15   64  177  830.037  -47.080   5.482

ou bien encore

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*lptfpc46.obspm. 195.220.94.163   2 u  130  512   37   43.776   26.589  32.862
+krishna.via.ecp 157.99.64.66     2 u  126  512   37   49.465  -13.508  18.895
+dns.univ-lyon1. 195.220.94.163   2 u  126  512   37   52.635   -7.600  13.784
 ntp.ens.fr      .INIT.          16 u    -   64    0    0.000    0.000 4000.00
+perso16-g.free. 212.27.32.2      3 u  124  512   37   45.738   -4.886  14.985

N'oubliez le petit nota par ici.

[Retour haut de la page]

Configuration du client linux

Installation

Vous devez d'abord installer le package NTP comme indiqué dans le paragraphe correspondant.
[Retour haut de la page]

Configuration

Vous devez créer un fichier /etc/ntp.conf qui contiendra tout simplement

server obelix

[Retour haut de la page]

Synchronisation manuelle

Pour se synchroniser avec votre serveur NTP qui doit déjà être synchronisée lui même, il suffit de taper, en tant que root :

ntpdate -dv obelix

Les options d et v permettent d'obtenir un max d'info. Voici ce que vous pouvez obtenir

26 Jan 18:11:16 ntpdate[768]: ntpdate 4.0.99j lun jan 24 18:44:56 CET 2000 (1)
transmit(192.168.13.11)
receive(192.168.13.11)
transmit(192.168.13.11)
receive(192.168.13.11)
transmit(192.168.13.11)
receive(192.168.13.11)
transmit(192.168.13.11)
receive(192.168.13.11)
transmit(192.168.13.11)
server 192.168.13.11, port 123
stratum 11, precision -18, leap 00, trust 000
refid [127.127.1.0], delay 0.02632, dispersion 0.00000
transmitted 4, in filter 4
reference time:    bc39a8d6.9458dde7  Wed, Jan 26 2000 18:09:42.579
originate timestamp: bc39a903.2363e4ab  Wed, Jan 26 2000 18:10:27.138
transmit timestamp:  bc39a935.06ca57a7  Wed, Jan 26 2000 18:11:17.026
filter delay:  0.02647  0.02634  0.02632  0.02632
         0.00000  0.00000  0.00000  0.00000
filter offset: -49.8887 -49.8887 -49.8887 -49.8887
         0.000000 0.000000 0.000000 0.000000
delay 0.02632, dispersion 0.00000
offset -49.888749

26 Jan 18:11:17 ntpdate[768]: step time server 192.168.13.11 offset -49.888749 sec

On peut observer que votre horloge est à 18h10'27.138'' celle du serveur à 18h11'17.206'' soit un retard de 49.888749 secondes par rapport à ce dernier.
 

[Retour haut de la page]

Synchronisation automatique avec cron

En configurant cron, vous pouvez lancer une synchronisation toutes les heures piles, voici le contenu du fichier crontab:

0 * * * * /usr/local/bin/ntpdate obelix

[Retour haut de la page]

Synchronisation au boot

Sur une arborescence de type Red Hat (et donc sous Mandrake), il faut rajouter en fin de fichier /etc/rc.d/rc.local

/usr/local/bin/ntpdate obelix

[Retour haut de la page]

Utilisation

Connaître son retard sur le client

Sur un poste client pour connaître le retard à un instant donné par rapport au serveur NTP, vous devez taper:

ntptrace -vd obelix

Les options v et d permettent d'obtenir un max d'infos, il est par ailleurs pas nécessaire d'être root. Voici une idée du résultat avec votre serveur NTP comme serveur primaire:

DoTransmit(192.168.13.11)
DoTransmit to 192.168.13.11
ReceiveBuf(192.168.13.11, 192.168.13.11)
server 192.168.13.11, port 123
stratum 11, precision -18, leap 00
refid 127.127.1.0 delay 0.00087, dispersion 0.00000 offset -49.745512
rootdelay 0.00000, rootdispersion 0.01178, synch dist 0.01178
reference time:      bc39ab1c.94588a04  Wed, Jan 26 2000 18:19:24.579
originate timestamp: bc39ab56.22921ccd  Wed, Jan 26 2000 18:20:22.135
transmit timestamp:  bc39ab87.e14306e5  Wed, Jan 26 2000 18:21:11.879

Vous voyez ici un offset de 49.745512 secondes. Plus simplement en tapant

ntptrace obelix

On obtient

localhost.localdomain: stratum 7, offset 0.000025, synch distance 0.01669
obelix.armoric.bz: stratum 6, offset 0.182583, synch distance 0.01120

Ou alors si votre serveur NTP n'est qu'un client d'un serveur se trouvant sur internet, en tapant:

ntptrace obelix

On obtient

obelix: stratum 3, offset -1.279591, synch distance 0.60069
zen.via.ecp.fr: stratum 2, offset -1.690077, synch distance 0.04030
chronos.cru.fr: stratum 1, offset -1.677961, synch distance 0.00000, refid 'GPS'

ntptrace remonte tous les statums jusqu'au serveur primaire, en l'occurence ici chronos.cru.fr de stratum 1 basé sur l'horloge GPS.

Si vous n'êtes pas connecté, vous aurez une erreur de timeout, car ntptrace n'a pas été capable de joindre le serveur ntp sur internet sur lequel se base votre propre serveur NTP. C'est du style :

obelix.armoric.bz: stratum 3, offset 36022.527399, synch distance 0.46469
138.195.130.71:         *Timeout*

[Retour haut de la page]

Connaître son retard sur le serveur

Taper simplement:

ntptrace

Vous aurez comme résultat, si vous n'êtes pas connecté :

localhost.localdomain: stratum 3, offset 0.000042, synch distance 0.55115
138.195.130.71:         *Timeout*

Ou si vous êtes connecté:

localhost.localdomain: stratum 3, offset 0.000070, synch distance 0.60089
zen.via.ecp.fr: stratum 2, offset -0.461755, synch distance 0.04050
chronos.cru.fr: stratum 1, offset -0.403968, synch distance 0.00000, refid 'GPS'
 
 
[Retout page d'accueil FUNIX]