Mettre en place un serveur de temps sur un LAN isolé d'Internet
Sommaire
- Introduction
- Commentaire(s)/Correction(s)
- Téléchargement et installation
- Configuration
- Tests et dépannages
- Configurer un équipement Cisco pour utiliser un serveur NTP
- Configurer un client Windows
- Conclusion
Introduction
Lorsque l'on parle de serveur de temps, on parle du protocole réseau associé, le
protocole NTP. Ce protocole permet à une
machine de mettre à jour son horloge système en se synchronisant sur un serveur de
temps présent sur Internet ou sur un réseau avec lequel elle peut communiquer. Le
principe de NTP est de mettre la machine à l'heure en étudiant les temps de
propagation sur le réseau, de façon précise.
Ce protocole communique via le port 123 en UDP.
Ce détail a sont importance dans le cas où vous deviez traverser un firewall.
Commentaire(s)/Correction(s)
J'ai pas mal buté sur la configuration du serveur dans le cadre d'un réseau local sans connexion avec l'internet. Mais à force de triffouiller et chercher à droite à gauche, j'ai fin par en venir à bout !
Téléchargement et installation
Commençons par les fichiers sources. Deux possibilités s'offrent à vous. Soit vous vous procurez les sources sur le site officiel www.ntp.org, soit vous passez par un package précompilé. Le plus simple étant bien sur la solution du package, on va donc se focaliser sur cette solution pour décrire l'installation. Pour ma part, je me suis basé sur une distribution linux, la Fedora, et je me suis donc procuré le RPM de NTP sur le site officiel (US).
Pour l'installation, rien de bien complexe. Dans le cas des fichiers sources, la suite habituelle de commandes:
[hostname]$ tar -xvzf ntp-x.x.x.tar.gz [hostname]$ cd ntp-x.x.x [hostname]$ ./configure [hostname]$ make [hostname]$ make install
Dans le cas d'un package précompilé:
[hostname]$ rpm -ivh ntp-x.x.x.rpm
Configuration
Un seul et unique fichier pour la configuration: /etc/ntp.conf.
Par défaut il comporte déjà pas mal d'options. Renommez le pour en garder une
copie, puis créez en un nouveau.
[hostname]$ mv /etc/ntp.conf /etc/ntp.conf.copie [hostname]$ vi /etc/ntp.conf
Comme nous l'avons déjà évoqué, nous allons paramétrer ce fichier pour faire de notre machine le serveur de temps référence de notre réseau local. L'adressage IP du réseau local étant en 192.168.0.0/24, voici le fichier /etc/ntp.conf correspondant à cette configuration:
restrict default nomodify notrap noquery nopeer noserve restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 4 driftfile /etc/ntp.drift broadcastdelay 0.008
Et maintenant une petite explication des différentes instructions contenues dans ce fichier.
- restrict
- permet de définir un genre d'ACL pour la gestion des accès à votre serveur. De base l'accès est total, il vous faut donc bloquer un certain nombre d'options. Ici, par défaut, on bloque presque tout, pour le local (127.0.0.1) on laisse tout, et on autorise la consultation uniquement pour le réseau local.
- server 127.127.1.0
- fudge 127.127.1.0 stratum 4
- Ces deux lignes indiquent au serveur qu'il doit se synchroniser sur l'horloge local. Comme vous le constatez 127.127.1.0 ne représente pas l'adresse IP de la boucle locale. C'est en fait un subterfuge pour indiquer un pilote factice qui aurait pu faire référence à un oscillateur externe.
- driftfile
- Cette commande indique le nom du fichier employé pour enregistrer la dérive de fréquence de l'oscillateur de l'horloge locale. Si le fichier existe, on le lit au démarrage afin de connaitre la dérive de fréquence initiale et puis il est mis à jour une fois par heure avec la dérive courante de fréquence calculée par le daemon. Si le fichier n'existe pas ou que cette instruction n'est pas donnée, la dérive initiale de fréquence est assumé à zéro. Dans ce cas-ci, cela peut prendre quelques heures pour stabiliser la fréquence et pour que les erreurs résiduelles de synchronisation s'abaissent.
- broadcastdelay
- Estimation du retard d'aller-retour.
Il vous faut maintenant régler correctement votre horloge locale qui va servir de référence pour la synchronisation de toutes les machines de votre réseau.
mm:mois - dd:jour - HH:heure - MM:minute - yy:année [hostname]$ date mmddHHMMyy Exemple: [hostname]$ date 8506131627 June 13, 1985, 4:27 PM
Il ne reste plus qu'à installer le service pour qu'il soit lancé dès le boot et enfin le lancer de façon manuelle.
Installation du service dans la séquence de boot [hostname]$ chkconfig ntpd on Démarrage du service en manuel [hostname]$ service ntpd start Arrêt du service en manuel [hostname]$ service ntpd stop Redémarrage du service en manuel [hostname]$ service ntpd restart
Tests et dépannages
Après avoir configuré et démarré votre serveur NTP, il vous faut vous assurer qu'il fonctionne correctement.
Vérifier que le service tourne
Pour tester que le processus NTP soit bien en fonctionnement, tapez la commande suivante:
[hostname]$ pgrep ntpd
Vous devriez voir apparaître l'ID du processus.
Vérifier que le serveur permette bien la synchronisation
Pour que d'autres machines puissent se synchroniser sur votre serveur il faut contrôler que ce dernier le permette bien avec la commande ntpq -p. Pour que la synchronisation soit possible vous devez avoir un jitter inférieur à 100.
[hostname]$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================= LOCAL(0) LOCAL(0) 4 l - 64 7 0.000 0.000 0.008
Si vous êtes confronté à un jitter de 4000.00, cela peut provenir de plusieurs choses:
- Un version trop ancienne du package NTP qui ne fonctionnement pas correctement si vous utilisez des noms DNS comme noms de NTP serveur. Dans ce cas préférez l'utilisation des adresses IP aux noms DNS.
- Un firewall bloquant l'accès au port UDP(123) de votre serveur ou même un firewall comme iptables tournant sur le serveur lui-même.
- Les mots clés notrust nomodify notrap présents dans la restriction
concernant vos clients NTP. Certaines implémentations de NTP dans les Fedoras sont
incapables de se synchroniser tant que ces mots clés ne sont pas retirés de la
restriction.
# -- CLIENT NETWORK ------- #restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap restrict 192.168.0.0 mask 255.255.255.0
Permissions sur les Fedora Core 2
Tous les processus NTP sur les RedHat/Fedora écrivent temporairement dans le répertoire /etc/ntp. Malheureusement, dans les Fedora Core 2, les permissions sur ce répertoire ne permette pas l'écriture temporaire. Vous devrez donc changer le groupe et le propriétaire de ce répertoire pour ntp.
[hostname]$ chown ntp:ntp /etc/ntp
Si vous ne le faites pas vous aurez une erreur dans le fichier /var/log/messages du genre:
Aug 12 00:29:45 smallfry ntpd[2097]: can't open /etc/ntp/drift.TEMP: Permission denied
Configurer un équipement Cisco pour utiliser un serveur NTP
Vous pouvez utiliser la synchronisation avec votre serveur NTP pour une grande variété d'équipement, notament les équipements réseaux. Je ne vais pas vous mettre la liste complète des équipements qu'il existe sur le marché. On va se contenter de voir comment paramétrer quelques Cisco.
Cisco IOS
Pour faire en sorte que votre routeur se synchronise avec votre serveur NTP (192.168.0.1), utilisez les commandes suivantes:
ciscorouter> enable password: ********* ciscorouter# config t ciscorouter(config)# ntp update-calendar ciscorouter(config)# ntp server 192.168.0.1 ciscorouter(config)# exit ciscorouter# wr mem
CAT OS
Pour faire en sorte que votre routeur se synchronise avec votre serveur NTP (192.168.0.1), utilisez les commandes suivantes:
ciscoswitch> enable password: ******* ciscoswitch# set ntp client enable ciscoswitch# ntp server 192.168.0.1 ciscoswitch# exit
Configurer un client Windows
Machine Client XP
Pour faire en sorte qu'une machine sous Windows vienne se synchroniser avec votre serveur NTP, voici la marche à suivre:
- Double-cliquez sur l'affichage de l'heure en bas à droite de votre écran.
- Cliquez sur l'onglet Temps Internet
- Cochez la case Synchroniser automatiquement avec un serveur de temps Internet
- Entrez l'adresse IP de votre serveur dans le champ Serveur
- Cliquez sur Mettre à jour
Vous devriez voir le message: "L'heure a été synchronisée avec [IP de votre serveur] le [la date]".
Domaine Active Directory
Il existe deux méthodes pour synchroniser des machines Windows NT et Windows 2000:
La première consiste à utiliser le mécanisme hiérarchique de l'Active
Directory, la seconde consiste à configurer sur chaque machine un lien sur un serveur NTP.
Afin d'exploiter pleinement les capacités de l'Active Directory, il est
préférable d'utiliser le mécanisme standard de Windows 2000 (synchronisation
hiérarchique de l'Active Directory).
L'émulateur de contrôleur principal de domaine est nécessaire pour synchroniser l'heure dans l'entreprise. Windows 2000 inclue le service W32time qui est nécessaire pour le protocole d'authentification Kerberos. Tous les ordinateurs Windows 2000 qui sont intégrés dans un domaine se synchronisent automatiquement. Pour les postes Windows NT4 (Workstation, Server, TSE) il faut installer l'outil W32time du kit de ressource sur chaque machine. Les stations ou serveurs membre du domaine Windows 2000 se synchronisent avec un contrôleur de domaine, qui aura été préalablement paramétré comme étant une source de temps fiable. Ce serveur se synchronise à sont tour avec le PDC Emulator du domaine. Enfin, le PDC Emulator est configuré pour accéder à un serveur NTP Unix/Linux (externe ou interne).
Configuration pour le PDC Emulator
- Configurer les valeurs suivantes dans la clef de registre:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters LocalNTP : 0 TYPE : Nt5DS ReliableTimeSource : 1
- Taper la commande suivante sous un prompt de commandes MSDOS:
net time /setntp:ntpserver
- Redémarrer le service Horloge Windows
Configuration pour le contrôleur de domaine Windows 2000
- Configurer les valeurs suivantes dans la clef de registre:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters LocalNTP : 0 TYPE : Nt5DS
- Redémarrer le service Horloge Windows
Configuration pour le serveur TSE et serveur NT membre du domaine
- Copier le fichier W32TIME.EXE sur %systemRoot%\system32
- Copier le fichier W32TIME.INI sur %systemRoot%
- Exécuter la commande suivante sour un prompt de commande MSDOS:
W32TIME -AUTOMATIC
- Configurer les valeurs suivantes dans la clef de registre:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters TYPE : SECONDARY Secondary Domain :
- A l'aide du gestionnaire de service, démarrer le service Windows Time Service
Conclusion
"Faire un serveur de temps ?! Mais ça me sert à rien à moi !" Détrompez vous! Tous les matériels informatiques ont une horloge interne, mais celle-ci à tendance à se dérégler de plusieurs millisecondes voire de plusieurs secondes chaque jour qui passe! Un serveur de temps peut vous permettre de corriger ce problème en faisant une synchronisation entre les clients et le serveur toutes les 60 minutes par exemple.
Il est utile dans l'utilisation d'outils de monitoring réseau par exemple, pour la consultation des logs aussi de certains services réseau, pour les outils de versioning comme CVS ou Visual Safe ou encore pour les ressources partagées sur votre réseau (date et heure de création/modification/ouverture de fichier etc...)