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 :
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.