Monter un serveur NTP, configurer les clients Windows et Linux

Bon, un p’tit billet aide-mémoire sur la configuration d’un serveur NTP Linux et des postes Windows et Linux de votre LAN.
C’est un sujet tout bête, mais entre les postes Windows qui ne sont pas très bavards à ce sujet et l’amalgame, côté Linux, entre les paquets ntp et ntpdate utilisant ou pas des fichiers communs de conf, on peut être momentanément perdu. J’espère être clair par la suite.

Préparez le serveur

Le paquet qui va bien

Sur le serveur, installez le paquet « ntp ». Faisant office de serveur, il se met à jour (donc il fait office de client, si je ne dis pas connerie). Pas la peine donc d’installer « ntpdate » qui est un autre client possible.
Les options du serveur sont dans /etc/default/ntp.conf, j’en parle un peu plus bas. Lisez le man.
Les paramètres de /etc/ntp.conf sont :

serv:~# egrep -v "^#|^$" /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
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
server 0.debian.pool.ntp.org iburst dynamic
server 1.debian.pool.ntp.org iburst dynamic
server 2.debian.pool.ntp.org iburst dynamic
server 3.debian.pool.ntp.org iburst dynamic
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap

J’ai juste ajouté la plage 10.0.0.0 (c’est un exemple) pour autoriser mon LAN à joindre ce serveur.

Firewalling ?

Il faudra ouvrir en sortie le port « ntp » (123), en UDP, depuis le serveur vers les serveurs amonts. Si c’est la liste par défaut de /etc/ntp.conf, à savoir les « *.pool.ntp.org », c’est une longue liste, amenée à évoluer dans le temps je suppose. A vous de voir comment faire. Le plus simple : ouvrir UDP/123 vers le web, point.
Pour que les clients joignent votre serveur, c’est pareil, il faudra ouvrir le LAN vers votre passerelle, port UDP/123.

Testez

Je recommande d’ajouter -l /var/log/ntp.log dans les options du fichier /etc/default/ntp, soit :

NTPD_OPTS='-g -l /var/log/ntp.log'

Puis de redémarrer le service via :

/etc/init.d/ntpd restart

Vous verrez dans /var/log/ntp.log si votre serveur se met à jour, de combien de temps etc. Pensez à enlever ce log ou sinon à mettre en place une rotation de logs qui va avec.
Ca ressemble à ça :

13 Nov 11:19:30 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:19:30 ntpd[18381]: time reset -0.169417 s
13 Nov 11:19:30 ntpd[18381]: kernel time sync status change 0001
13 Nov 11:23:57 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:31:29 ntpd[18381]: synchronized to 91.121.86.143, stratum 2
13 Nov 11:35:30 ntpd[18381]: time reset +0.189846 s
13 Nov 11:35:50 ntpd[18381]: synchronized to 91.121.121.160, stratum 2
13 Nov 11:40:06 ntpd[18381]: synchronized to 81.19.16.225, stratum 2
13 Nov 11:42:57 ntpd[18381]: synchronized to 91.121.121.160, stratum 2

On est maintenant prêt à dire à notre LAN d’aller taper sur ce serveur pour régler l’heure.

Les postes Windows

Le service W32Time (« Horloge Windows ») est en automatique par défaut depuis Windows XP. Il s’appuie sur le paramètre qu’on trouvera dans la clef de registre HKLM/SOFTWARE/Policies/Microsoft/W32Time/Parameters. La clef est « NtpServer ».
Il faut donc mettre à jour cette clef, d’une manière ou d’une autre.

…via des GPO

Si vous êtes en domaine Windows, le réglage est ici :
NTP

En gros, vous indiquez le nom de votre serveur.
Vous pouvez forcer la mise à jour des GPO sur un poste, pour tester, via gpupdate /force.

En pas GPO (domaine Samba-sans-GPO, Workgroup etc)

Il faut modifier la clef mentionnée plus haut, d’une manière ou d’une autre ; et probablement relancer le service « Horloge Windows ».

Sous Windows, comment tester

Le service Windows ne raconte rien et les « event logs » systèmes, c’est chiant.
Je suggère sur le serveur, un joli tcpdump qui vous montrera qui fait quoi :

serv:~# tcpdump -i eth0 dst port ntp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:14:49.071538 IP pc315.maboite.fr.ntp > imag.imag.fr.ntp: NTPv3, symmetric active, length 48
15:14:49.172627 IP imag.imag.fr.ntp > pc315.maboite.fr.ntp: NTPv3, symmetric active, length 48
15:15:29.305824 IP pc666.maboite.fr.ntp > serv.maboite.fr.ntp: NTPv3, symmetric active, length 48
15:15:29.306158 IP serv.maboite.fr.ntp > pc666.maboite.fr.ntp: NTPv3, symmetric active, length 48

Là, on voit un « pc315 » qui continue de demander à l’extérieur (le firewall l’autorise pour l’instant) et un pc666 qui a prit le pli.

Les postes Linux

Installez le paquet « ntpdate » et planifiez ntpdate-debian en crontab. Le manuel explique : ntpdate-debian utilise le fichier /etc/default/ntpdate pour la configuration (liste des serveurs de temps etc). Il contient, sans les commentaires :

NTPDATE_USE_NTP_CONF=yes
NTPSERVERS="0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org"
NTPOPTIONS=""

Mais, dans ce cas, à cause du « yes », il utilise la conf de l’éventuel /etc/ntp.conf installé via le serveur NTP (paquet ntp). Comme on ne l’a pas mis sur les clients (ça sert à rien de faire tourner un serveur NTP), il faut donc soit passer NTPDATE_USE_NTP_CONF à « no », soit ne pas planifier ntpdate-debian, mais ntpdate avec une tartine de paramètres.
Si vous mettez « no », il faudra indiquer dans NTPSERVERS au moins / uniquement votre serveur du LAN. J’ai constaté qu’avec le nom de machine, ça ne passait pas. Mais avec l’IP, c’est OK. A creuser.

Pigé ? moi-même, je me perds régulièrement là-dedans.

3 comments

  1. Concernant les serveurs NTP, je préfère utiliser les serveurs du « pool ntp » parce que c’est fait pour !

    Pour la France, cela donne : fr.pool.ntp.org. On peut absolument doubler les serveurs puisque le nom dns est un round-robin sur pas mal de serveurs.

    Je pense que le pool ntp est un meilleur choix.

    Je n’ai pas trouvé la clé pour Windows XP. Mais « net /setsntp:fr.pool.ntp.org » fait le job (sntp ou ntp !). Néanmoins dans un domaine on peut simplement utiliser « net time \\serv_DC /set » puisqu’il est essentiel d’être synchro avec le DC.

    1. Oui, c’est pas faux tout ça 🙂
      Concernant la synchro de postes windows, je n’ai pas trop pigé en standard qui l’emporte entre la synchro DC qui semblerait être une bonne chose et le service W32Time qui pointe vers time.windows.com il me semble.

      Après, à partir du moment où tout le monde pointe sur le même NTP, on est synchro 🙂
      Et en cas de perte d’Internet, à la limite, on reste synchro

      Enfin voilà, c’est une manière de le voir.
      On peut aussi tout laisser en standard et pointer à l’extérieur, du moment que ça sort au niveau réseau, et basta 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.