Avoir son propre serveur NTP dans le réseau local, c’est utile pour les équipements qui n’ont pas accès direct à internet (switches, firewalls, conteneurs isolés) ou pour réduire la dépendance aux serveurs externes.
Le protocole NTP (Network Time Protocol) permet de synchroniser l’horloge d’un ordinateur avec des sources de temps réseau précises.
J’ai déjà expliqué comment installer un serveur NTP sur un Raspberry Pi, qui fonctionne lui aussi sous une version modifiée de Debian appelée Raspbian.
Cependant, dans ce tutoriel, je vais montrer comment installer un serveur NTP dans un conteneur Linux (LXC), car il existe ici des particularités importantes à connaître. Ce guide est principalement d’actualité pour les distributions basées sur Debian (versions 11 et 12) et Ubuntu (versions 20.04, 22.04 et 24.04 LTS).
Notamment : le conteneur LXC ne peut pas modifier l’horloge système ou matérielle, ce qui peut poser problème lors de la configuration — surtout si vous n’avez jamais rencontré ce cas auparavant.
Étape 1 : Mise à jour du système
sudo apt update && sudo apt upgrade -y
Étape 2 : Installation du serveur NTP
Pour Debian 11 ou inférieur :
sudo apt install ntp -y
Ou bien pour Debian 12 :
sudo apt install ntpsec -y
Dans ce tutoriel, j’utilise principalement ntpsec, car il remplace l’ancien paquet ntp dans les distributions récentes comme Debian 12.

Cela installera :
• le serveur ntp (ou ntpsec)
• le démon ntpd (ou ntpsec), qui se lance automatiquement après l’installation
Étape 3 : Configuration du serveur NTP
Fichier de configuration :
• Pour Debian 11 ou inférieur : /etc/ntp.conf
• Pour Debian 12 : /etc/ntpsec/ntp.conf
Remarque : selon la version de votre distribution, le fichier ntp.conf se trouve directement dans /etc/ ou dans le dossier /etc/ntpsec/.
Ouvrez-le avec (adaptez le chemin selon votre version) :
nano /etc/ntpsec/ntp.conf nano /etc/ntp.conf
Configuration principale :
Choix des serveurs de temps externes à utiliser :
Vous devez remplacer la liste des pools par ceux qui sont les plus proches géographiquement. Pour cela, visitez le site officiel du projet NTP Pool.
server 0.pool.ntp.org iburst server 1.pool.ntp.org iburst server 2.pool.ntp.org iburst server 3.pool.ntp.org iburst
J’habite au Canada, donc j’ai commenté les serveurs par défaut et j’utilise les serveurs canadiens suivants :
server 0.ca.pool.ntp.org iburst server 1.ca.pool.ntp.org iburst server 2.ca.pool.ntp.org iburst server 3.ca.pool.ntp.org iburst

Autoriser les clients de votre réseau local à se synchroniser avec le serveur :
Par exemple, pour permettre aux clients du réseau 192.168.0.0/24 de se synchroniser (comme dans mon cas) :
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
Attention : Le fichier de configuration contient déjà des lignes restrict par défaut. Assurez-vous qu’elles n’empêchent pas l’accès aux clients du réseau si vous souhaitez que le conteneur agisse comme serveur NTP.
Étape 4 : Redémarrage du service
Pour Debian 11 ou inférieur :
sudo systemctl restart ntp
Puis vérifiez que le service fonctionne correctement :
sudo systemctl status ntp
Ou bien pour Debian 12 :
sudo systemctl restart ntpsec
Puis vérifiez que le service fonctionne correctement :
sudo systemctl status ntpsec

Étape 5 : Ouverture du port 123/UDP si un pare-feu est actif
Si vous utilisez iptables :
sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
Ou bien avec ufw :
sudo ufw allow 123/udp
Étape 6 : Vérification du bon fonctionnement du serveur
ntpq -p

Cette commande affiche la liste des serveurs avec lesquels votre NTP se synchronise, ainsi que les statistiques de latence et de décalage.
Pour vérifier depuis un client du réseau que la synchronisation fonctionne bien avec votre serveur LXC :
ntpdate -q 192.168.0.x
Remplacez l’IP par celle de votre conteneur. Si vous voyez un offset et une stratum, le client communique bien avec votre serveur.
Problèmes possibles dans un conteneur LXC
Le serveur NTP peut fonctionner dans un conteneur LXC, mais il faut prendre en compte certaines particularités importantes :
1. Le conteneur ne peut pas modifier l’heure système
Dans un environnement LXC, l’horloge système est contrôlée par l’hôte. Cela signifie que :
• Le conteneur ne peut pas exécuter des appels système tels que settimeofday ou adjtime
• En revanche, il peut servir de source de temps pour d’autres clients du réseau
Donc : le serveur peut fournir l’heure, mais pas ajuster sa propre horloge.
2. NTP peut ne pas démarrer si la capacité cap_sys_time est absente
Vérifiez que votre conteneur a les capacités nécessaires. Si vous avez besoin que le client NTP fonctionne dans le conteneur (c’est-à-dire qu’il ajuste l’heure lui-même), envisagez d’utiliser chrony à la place de ntp. chrony est mieux adapté aux environnements virtualisés car il gère les décalages importants et fonctionne sans nécessiter cap_sys_time.
Bonne chance!
