Installer un serveur NTP local
La synchronisation temporelle, c'est un de ces trucs qu'on ne remarque pas quand ça fonctionne, mais qui devient vite pénible quand ce n'est pas le cas : logs décalés entre deux machines, automatisations qui partent au mauvais moment, corrélation d'événements impossible… Avoir un serveur NTP local règle tout ça d'un coup : vos équipements restent synchronisés même sans Internet, les requêtes se font en quelques microsecondes, et vous gardez la main sur qui se synchronise avec quoi.
Dans cet article, on va déployer un serveur NTP via Docker puis configurer les clients et on poussera le tout avec notre routeur UniFi pour distribuer et monitorer la synchro sur tout le réseau.
Déploiement avec Docker Compose
Nous allons utiliser Chrony, une implémentation moderne de NTP plus précise et performante que ntpd classique.
Créez le fichier compose.yaml avec le contenu suivant :
services:
chrony:
image: dockurr/chrony
container_name: ntp-server
restart: always
ports:
- 123:123/udp
environment:
- NTP_SERVERS=0.fr.pool.ntp.org,1.fr.pool.ntp.org,2.fr.pool.ntp.org,3.fr.pool.ntp.org
- TZ=Europe/Paris
volumes:
- /etc/localtime:/etc/localtime:ro
networks: {}
Vérifiez que le serveur fonctionne :
docker logs ntp-server
Vous devriez voir apparaître des lignes confirmant la synchronisation avec les serveurs NTP définis dans le fichier compose.yaml :

Ajouter un second serveur NTP
Optionnel mais recommandé : pour assurer une continuité de service en cas de panne, vous pouvez configurer un second serveur NTP. Dans mon cas, j'utilise mon NAS Synology pour ce rôle.
Accédez à DSM et :
- Ouvrez le
Panneau de configuration - Allez dans
Options régionalespuisService NTP - Cochez
Activer le service NTP

Configuration des clients
Maintenant que vos serveurs NTP sont opérationnels, configurons tous vos équipements pour les utiliser.
Windows (si utilisé uniquement en local)
Ouvrez PowerShell en tant qu'administrateur :
# Arrêter le service Windows Time
Stop-Service w32time
# Configurer votre serveur NTP local
w32tm /config /manualpeerlist:"192.168.1.100" /syncfromflags:manual /reliable:YES /update
# Redémarrer le service
Start-Service w32time
# Forcer une synchronisation immédiate
w32tm /resync
# Vérifier la configuration
w32tm /query /status
w32tm /query /peers
Linux (Debian/Ubuntu)
Installation de Chrony :
# Installation
sudo apt update
sudo apt install chrony
# Éditer la configuration
sudo nano /etc/chrony/chrony.conf
Commentez les serveurs par défaut et ajoutez votre serveur local :
# pool 2.debian.pool.ntp.org iburst
# Ajoutez votre serveur local
server 192.168.1.100 iburst prefer
# Serveurs de secours (optionnel)
server 192.168.1.101 iburst
server 1.fr.pool.ntp.org iburst
192.168.1.100 par l'IP fixe de la machine qui héberge le conteneur.Redémarrez et vérifiez :
sudo systemctl restart chrony
sudo systemctl enable chrony
# Vérifier la synchronisation
chronyc tracking
chronyc sources -v
#Forcer la correction horaire
chronyc makestep

Pour information sur les LXC Proxmox cela n'est pas nécessaire car ils se synchronisent avec le serveur Proxmox.
Routeur Unifi
Configuration via l'interface web :
- Ouvrez le panneau
Settings - Allez dans l'onglet
System - Décochez
Autopour Network Time Protocol - Ajoutez vos serveurs NTP
- Appliquez les modifications

Synology DSM
Configuration via l'interface web :
- Ouvrez le Panneau de configuration.
- Allez dans Options régionales puis Temps.
- Cochez Synchroniser avec le serveur NTP.
- Dans le champ Serveur NTP personnalisé, entrez
192.168.1.100. Si vous utilisez le NAS comme second serveur NTP, pointez-le vers un serveur NTP public plutôt que vers lui-même. - Cliquez sur Mettre à jour maintenant, ensuite Appliquer.

Autres équipements IoT
La plupart des équipements connectés ont une option NTP dans leurs paramètres réseau. Par exemple, sur un Shelly, vous trouverez l'option dans Settings → Device Settings → Time Zone & Location → champ SNTP Server.
Configuration réseau avec UniFi Networks
C'est ici que la magie opère : UniFi va nous permettre de monitorer et de sécuriser notre infrastructure NTP.
Distribution automatique via DHCP
La méthode la plus simple consiste à configurer votre serveur DHCP pour qu'il distribue automatiquement votre serveur NTP.
Dans UniFi Network :
- Settings → Networks
- Sélectionnez votre réseau (généralement "Default" ou "LAN")
- Section DHCP
- Manual → NTP Server
- Ajoutez la ou les adresses de vos serveurs NTP

Ainsi, tous les nouveaux équipements recevront automatiquement l'adresse de votre serveur NTP. Si vous avez un autre routeur, il s'agit de l'option 42 du DHCP.
Visualisation des communications extérieures.
Pour voir l'utilisation de NTP dans votre réseau vers l'extérieur, connectez-vous en SSH sur votre contrôleur unifi et utilisez la commande suivante au choix :
#Ignorer votre serveur NTP local
tcpdump -i br0 -n udp port 123 and not host 192.168.1.100
#L'ensemble des requête sur le port 123
tcpdump -i br0 udp port 123Certains périphériques ignoreront le NTP local distribué par le DHCP, c'est notamment le cas des équipements UniFi, qui sont conçus pour se synchroniser avec les serveurs Ubiquiti. Ce comportement est volontaire, il n'est pas conseillé de le forcer.

Tests de synchronisation
Une fois tous vos équipements configurés, voici comment valider que l'ensemble de votre infra est bien synchronisé.
Pour Linux :
# Test de synchronisation
chronyc tracking
# Voir les sources NTP
chronyc sources -v
# Mesurer la latence
chronyc sourcestats
#Forcer la correction horaire
chronyc makestepPour Windows :
# Vérifier le statut
w32tm /query /status
# Tester la latence
w32tm /stripchart /computer:192.168.1.100 /samples:10 /dataonly
Vous devriez constater un offset (décalage) inférieur à 10ms, idéalement < 1ms.
Conclusion
Mettre en place un serveur NTP local, c'est un de ces petits chantiers qu'on repousse parce que ça semble secondaire — et puis un jour on se retrouve à déboguer un certificat TLS expiré ou une automatisation qui se déclenche avec 10 minutes de décalage, et on regrette de ne pas l'avoir fait plus tôt. Une heure de boulot, et toute l'infra tourne sur la même référence temporelle. Difficile de faire un meilleur ratio effort/bénéfice.
Vous pouvez partager vos retours ou venir chercher de l'aide sur le groupe Telegram ou en commentaire !