Installation d’un serveur de temps sur votre réseau

Date: 16/11/2011 | Catégories: Open-source,Planet-libre,Reseau | Tags: ,,,

Dans un système d'information moderne, la synchronisation des machines sur une horloge commune est un pré-requis pour de nombreuses actions comme l'analyse des logs ou la supervision système et réseau. Si vos machines sont directement connectés à Internet alors il n'y a pas de problème car les distributions GNU/Linux, Windows et Mac OS X embarquent des mécanisme pour se mettre automatiquement à l'heure en se synchronisant sur des serveurs publics (par exemple 0.debian.pool.ntp.org sur une Debian Squeeze). Si ce n'est pas le cas et que vos machines sont isolées et/ou bien filtrées lors de leurs accès à Internet, il peut être intéressant d'installer un serveur de temps local sur une de vos machine.

Nous allons donc dans ce billet installer un serveur de temps NTP sur une machine sous Debian 6 (Squeeze).

Le protocole NTP

J'invoque le bon génie Wikipédia: "Le Protocole d'Heure Réseau (Network Time Protocol 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 référence en question sera donc, dans notre cas, la machine ou nous allons installer puis configurer notre serveur NTP.

Le protocole NTP utilise le port UDP/123 pour effectuer les requêtes sur le réseau. Notre serveur sera donc en écoute sur le port UDP 123 (si vous avez un Firewall, il faudra bien entendu le configurer pour autoriser les requêtes sur ce port).

Installation du serveur NTP

On commence par installer les paquets nécessaires dans une console root:

[cc lang="bash"]

apt-get install ntp ntpdate

[/cc]

La première chose à faire est de mettre le serveur à la bonne heure (quitte à avoir une référence, autant qu'elle soit juste...).

Pour cela deux solutions:

  • si votre machine à accès à Internet, utiliser la commande "ntpdate-debian" qui va synchroniser votre machine sur les serveur NTP Debian.
  • si votre machine n'a pas accès à Internet, alors téléphoner à l'horloge parlante (numéro payant: 3699) puis configurer l'heure système avec la commande "date". Par exemple "date -s 16:56:23".

On édite ensuite le fichier /etc/ntp.conf:

[cc lang="bash"]

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

# Enable this if you want statistics to be logged.

#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).

#server ntp.your-provider.example

# http://www.pool.ntp.org/zone/fr

server 0.fr.pool.ntp.org

server 1.fr.pool.ntp.org

server 2.fr.pool.ntp.org

server 3.fr.pool.ntp.org

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will

# pick a different set every time it starts up. Please consider joining the

# pool: <http://www.pool.ntp.org/join.html>

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for

# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>

# might also be helpful.

#

# Note that "restrict" applies to both servers and clients, so a configuration

# that might be intended to block requests from certain clients could also end

# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.

restrict -4 default kod notrap nomodify nopeer noquery

restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.

restrict 127.0.0.1

restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if

# cryptographically authenticated.

#restrict 192.168.123.0 mask 255.255.255.0 notrust

# My server is a public server

restrict 0.0.0.0 mask 0.0.0.0

# If you want to provide time to your local subnet, change the next line.

# (Again, the address is an example only.)

broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the

# next lines. Please do this only if you trust everybody on the network!

#disable auth

#broadcastclient

[/cc]

Les informations intéressantes sont les suivantes:

server 0.fr.pool.ntp.org

server 1.fr.pool.ntp.org

server 2.fr.pool.ntp.org

server 3.fr.pool.ntp.org

Permet de configurer les serveurs maîtres sur lesquels votre machine va essayer de se synchroniser pour rester à l'heure. Il faut bien sûr que votre machine est accès à Internet sur le port UDP/123.

restrict 0.0.0.0 mask 0.0.0.0

On rends notre serveur public, toutes les machines ayant un accès réseau (encore une fois sur le port UDP/123) pourront se synchroniser à partir de votre serveur. Il est bien sûr possible de limiter ce droit aux seules machines de vos réseaux.

broadcast 192.168.0.255

(optionnel) Diffuse le temps sur l'adresse de broadcast de votre réseau (par exemple 192.168.0.0/24).

On relance ensuite le serveur pour que la configuration soit prise en compte:

[cc lang="bash"]

# /etc/init.d/ntp restart

Stopping NTP server: ntpd.

Starting NTP server: ntpd.

[/cc]

Synchroniser vos machines avec votre serveur NTP

La configuration des clients est relativement simple car souvent inclus dans les "wizards" d'installations. Il suffit de préciser l'adresse IP ou le nom de votre machine hébergeant le serveur NTP comme serveur de temps.

Sur un client Debian 6 existant, il faut installer le package suivant (en root):

[cc lang="bash"]

apt-get install ntpdate

[/cc]

Puis lancer la commande suivante (si votre serveur de temps est hébergé sur la machine 192.168.0.100):

[cc lang="bash"]

ntpdate -dv 192.168.0.100

[/cc]

Conclusion

Le protocole NTP étant normalisé, il est bien sur possible de synchroniser toutes vos machines (Linux, BSD, Windows, OS X...) sur votre nouveau serveur de temps.