Synchroniser les horloges : le protocole NTP

8 février 2007

Télécharger en PDF



Table des matières

I.Synchronisation des horloges et NTP 1

1.Architecture 2

2.Implémentation 2

II.Configuration client 3

1.Configuration du client Linux 3

2.Configuration du client Windows 3

a)Sous Win9x ou Me 3

b)Sous Windows 2000 ou + 3

III.Configuration du serveur Linux 4

IV.Et iptables dans tout ça 5

V.Bibliographie 5





NTP (Network Time Protocol) est un protocole qui sert à synchroniser l'horloge des ordinateurs. En effet, l'heure sur un réseau peut s'avérer primordiale, pour un serveur de mail et surtout pour les logs...

I.Synchronisation des horloges et NTP

Les ordinateurs utilisent des horloges à quartz maintenue en marche par une mini-batterie. Comme on peut le penser elles prennent vite une seconde d'avance ou de retard (si ce n'est plus).

Il existe cependant des services qui nécessitent une plus grande précision :

Il a donc fallu inventer en même tant que l'expansion des réseaux, un service permettant de mettre à jour rapidement et précisement les horloges. C'est ainsi que NTP est apparu pour mettre à jour suivant une heure de référence notamment dérivée des horloges atomiques.

La grande force et complexité de NTP est de prévoir et de réduire au maximum le décalage de temps provoqué par la durée de la transmission des paquets sur Internet.

L'heure de référence NTP est fourni au format UTC, c'est-à-dire que le protocole NTP ne se préoccupe pas de :

ce qui est à la charge du système d'exploitation.

Enfin, on signalera que NTP est un protocole en clair ce qui n'assure pas forcément la non modification des paquets par une technique de « man-in-the-middle » mais honnêtement c'est relativement dur à mettre en place.

1.Architecture

Le réseau NTP est composé :

Tous ces composants sont organisés en une arborescence hiérarchique dans laquelle chaque niveau s'appelle une strate et où chaque strate récupère ses informations de la strate immédiatement supérieure ou de même niveau. Il peut y avoir un maximum de 15 strates mais en général, il n'y en a pas plus de 5.




2.Implémentation

Le temps est défini comme un entier de 64 bits

L'échelle de temps est donc de 232 secondes (soit un peu plus de 136 ans), avec une résolution de 2-32 seconde (soit un peu moins de 0,233 ns).

NTP utilise l'algorithme de Marzullo et permet de conserver une précision de 10ms par Internet et 200µs. De plus, il repose en général sur UDP mais peut être utilisé en TCP.

II.Configuration client

1.Configuration du client Linux


Pour configurer votre station linux comme client NTP il suffit que crée un fichier /etc/ntp.conf qui contiendra, par exemple :
Server ntp.imag.fr


Une fois ce fichier créé, vous pouvez vérifier que tout marche correctement en tapant ntptrace ntp.imag.fr. En théorie il doit vous afficher un stratum et un offset.

Maintenant que nous savons que tout fonctionne, passons à la synchronisation proprement dite :
ntpdate ntp.imag.fr
Vous pouvez ajouter les options -dv pour avoir des informations supplémentaires.

Vous pouvez bien sûr ajouter : ntpdate ntp.imag.fr à votre cron ou votre /etc/rc.local pour automatiser ceci.

2.Configuration du client Windows

a)Sous Win9x ou Me

Pour synchroniser des machines Windows, il suffit de taper sous dos :
C:\>net time ntp.imag.fr /set
Cette commande pourra être exécutée par exemple à chaque démarrage de la machine.

b)Sous Windows 2000 ou +

Windows 2000 dispose d'un client NTP intégré. Les instructions suivantes décrivent comment le configurer et l'activer. Ces opérations doivent être exécutées en tant qu'administrateur :

La synchronisation a lieu au démarrage du service Horloge Windows (manuel ou au démarrage de l'ordinateur), et selon une périodicité et une méthode gérées par Windows.

Remarque : Pour synchroniser des machines windows vous n'êtes pas obliger de faire des serveurs NTP. Vous pouvez aussi synchroniser une machine par rapport à une autre.



III.Configuration du serveur Linux

Tout ce passe dans le /etc/ntp.conf :


# Permit time synchronization with our time source, but do not

# permit the source to query or modify the service on this system.

restrict default nomodify notrap noquery


# Permit all access over the loopback interface. This could

# be tightened as well, but to do so would effect some of

# the administrative functions.

restrict 127.0.0.1



# -- CLIENT NETWORK -------

# Permit systems on this network to synchronize with this

# time service. Do not permit those systems to modify the

# configuration of this service. Also, do not use those

# systems as peers for synchronization.

# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

restrict <IP réseau local> mask <masque réseau local>


# --- GENERAL CONFIGURATION ---

#

# Undisciplined Local Clock. This is a fake driver intended for backup

# and when no outside source of synchronized time is available. The

# default stratum is usually 3, but in this case we elect to use stratum

# 0. Since the server line does not have the prefer keyword, this driver

# is never used for synchronization, unless no other other

# synchronization source is available. In case the local host is

# controlled by some external source, such as an external oscillator or

# another protocol, the prefer keyword would cause the local host to

# disregard all other synchronization sources, unless the kernel

# modifications are in use and declare an unsynchronized condition.

#

fudge 127.127.1.0 stratum 10


#

# Drift file. Put this in a directory which the daemon can write to.

# No symbolic links allowed, either, since the daemon updates the file

# by creating a temporary in the same directory and then rename()'ing

# it to the file.

#

driftfile /var/lib/ntp/drift

broadcastdelay 0.008


#

# Keys file. If you want to diddle your server at run time, make a

# keys file (mode 600 for sure) and define the key number to be

# used for making requests.

#

# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote

# systems might be able to reset your clock at will. Note also that

# ntpd is started with a -A flag, disabling authentication, that

# will have to be removed as well.

#

keys /etc/ntp/keys

server ntp.imag.fr

Si vous voulez que votre serveur de temps utilise un autre serveur de temps pour se synchroniser, vérifier la présence d'une ligne de ce style dans le fichier précédent :
server  ntp.imag.fr

Bien sûr à chaque modification de ntp.conf, il faut redémarer le service ntpd :
/etc/init.d/ntpd restart

Malheureusement, ntp synchronise l'horloge du système, mais pas celle de la machine, ce qui fait qu'a chaque redémarrage de l'ordinateur, une erreur est possible. Pour corriger ce problème, il est nécessaire d'utiliser la commande hwclock -w, chose que l'on peut faire en ajoutant dans le script /etc/init.d/ntpd dans la procédure stop ou dans un cron toutes les heures.


IV.Et iptables dans tout ça


Le service NTP utilise le port UDP 123 donc :

[root]# iptables -A INPUT -p UDP --dport 123 -j ACCEPT

[root]# iptables -A OUTPUT -p UDP --sport 123 -j ACCEPT


V.Bibliographie


Les serveurs de temps NTP français

ntp.org: Home of the Network Time Protocol

Network Time Protocol - Wikipédia

Le protocole NTP

sharevb