Installer un serveur NTP local

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.

chrony – Introduction

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égionales puis Service 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
💡
Pensez à remplacer l'adresse 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 Auto pour 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 SettingsDevice SettingsTime 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 :

  1. Settings → Networks
  2. Sélectionnez votre réseau (généralement "Default" ou "LAN")
  3. Section DHCP
  4. Manual → NTP Server
  5. 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 123

Certains 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 makestep

Pour 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 !