Synchronisation de l'heure à l'aide du protocole NTP/NTS
- CONTENU
Cet article décrit en quoi consiste la synchronisation horaire et comment la configurer.
- MOTIF
La synchronisation de l'heure système est cruciale lors du partage de tâches et de ressources avec d'autres membres de l'équipe sur le réseau.
- EFFORT
Comptez jusqu'à 60 minutes pour lire cet article et effectuer une configuration de base de la synchronisation horaire sur votre ordinateur.
- CONDITIONS REQUISES
Une connaissance de base de l'administration du système Linux est requise. Certaines tâches exigent des privilèges
root.Une connexion réseau fonctionnelle au réseau interne ou à Internet pour atteindre le serveur horaire source.
1 Introduction #
Une heure système exacte et synchronisée sur l'ordinateur est essentielle pour le travail d'équipe. Les applications de planification et d'agenda comptent sur cette ponctualité pour suivre l'heure comme il se doit et informer les utilisateurs à temps de leurs rendez-vous. Pour les applications en cluster, les machines hôtes individuelles requièrent souvent une heure système synchronisée pour une communication mutuelle.
L'horloge matérielle intégrée n'est pas une source horaire fiable. Une correction manuelle de l'heure système peut entraîner un dysfonctionnement des applications essentielles en raison de sauts de temps soudains. Par conséquent, l'heure système doit être synchronisée avec une source horaire externe fiable sur le réseau.
1.1 Présentation du protocole NTP #
Le protocole NTP (Network Time Protocol) est conçu pour synchroniser l'heure système sur le réseau. Son objectif est de conserver l'heure absolue et de l'utiliser pour synchroniser l'heure système de toutes les machines d'un réseau.
1.2 Présentation du protocole NTS #
NTS (Network Time Security) est une extension de sécurité de NTP. NTS fournit des mécanismes pour authentifier les messages NTP et les chiffrer, ce qui garantit que les données horaires reçues sont à la fois sécurisées et authentiques. NTS est conçu pour permettre une rétrocompatibilité avec l'infrastructure NTP existante. Cela permet un déploiement progressif sans nécessiter de modifications sur les serveurs NTP existants qui ne prennent pas en charge NTS.
1.3 Mode de fonctionnement #
Lorsque le service NTP est correctement configuré, il interroge et ajuste en permanence l'heure système avec des serveurs horaires fiables. Généralement, les ordinateurs personnels et les autres périphériques connectés à Internet sont configurés pour interroger un serveur horaire public sur Internet.
À l'inverse, les ordinateurs de bureau et les serveurs qui résident dans un sous-réseau d'entreprise sont configurés pour interroger un serveur horaire dédié au sein du réseau local. Le serveur horaire proprement dit synchronise son heure avec un serveur horaire public.
1.3.1 Implémentation #
chrony est l'implémentation par défaut de NTP dans SUSE Linux Enterprise Server. chrony comprend deux parties :
chronydest un servicesystemdqui peut être lancé au moment du démarrage.chronycest un programme d'interface de ligne de commande permettant de surveiller les performances dechronydet de modifier des paramètres de fonctionnement spécifiques pendant l'exécution.
1.4 Avantages #
L'utilisation de NTP pour maintenir l'heure exacte présente les avantages suivants :
Les utilisateurs peuvent se fier à leur horloge lorsqu'ils doivent respecter un calendrier planifié.
Les applications peuvent déclencher avec précision des opérations planifiées sur le bureau ou le système.
Les noeuds de grappe peuvent maintenir leurs données synchronisées et à jour.
L'utilisation d'un serveur horaire interne permet de maintenir l'heure système synchronisée dans les réseaux ayant un accès limité à Internet.
En intégrant des mesures de sécurité dans NTP via NTS, le protocole améliore sa robustesse et corrige les vulnérabilités associées à la synchronisation horaire non sécurisée.
2 Configuration de NTP en ajustant /etc/chrony.conf #
Quand il démarre, chronyd lit sa configuration dans le fichier /etc/chrony.conf. Les sections suivantes répertorient les paramètres importants susceptibles d'affecter le comportement de chronyd.
2.1 Spécification des sources horaires #
Pour que l'horloge de l'ordinateur reste synchronisée, vous devez indiquer à chronyd les sources horaires à utiliser. Pour ce faire, utilisez les directives server, pool et peer. Vous pouvez utiliser chacune d'elles plusieurs fois.
La directive server indique à chronyd d'utiliser un hôte spécifique comme serveur horaire par son nom ou son adresse IP.
server 0.europe.pool.ntp.org offline1 server 1.europe.pool.ntp.org offline prefer2 server 192.168.2.254
L'option | |
L'option |
La directive pool vous permet de spécifier un nom de réseau qui se résout en plusieurs adresses IP susceptibles de changer au fil du temps.
pool pool.ntp.org iburst1 maxsources 32
L'option | |
L'option |
La directive peer spécifie un hôte homologue NTP au lieu d'un serveur horaire. La synchronisation horaire du système entre homologues utilise une architecture symétrique au lieu du mode client/serveur invoqué par les options server et pool. Vous pouvez utiliser peer plusieurs fois pour spécifier plusieurs homologues.
peer 192.168.1.116 peer ntp.example.com
2.2 Exécution de chronyd en tant que serveur NTP #
Par défaut, chronyd fonctionne comme un client pour les serveurs NTP spécifiés. Pour qu'il fonctionne comme serveur NTP également, ajoutez la directive allow au fichier /etc/chrony.conf. Elle ouvre le port du serveur NTP (123 par défaut) et répond aux requêtes des clients.
Vous pouvez spécifier une adresse IP unique pour un client NTP ou un sous-réseau pour inclure plusieurs clients. Vous pouvez utiliser la directive allow plusieurs fois :
allow 1.2.3.4 allow 3.4.5.0/24
Si vous ne spécifiez pas d'adresse IP ou de sous-réseau, la directive allow autonome autorise l'accès à partir de toutes les adresses IPv4 et IPv6.
Pour limiter l'accès de la directive allow précédente, utilisez la directive deny :
allow 1.2.3.4 deny 1.2.3.0/24 allow 1.2.0.0/16
Dans l'exemple ci-dessus, l'effet est identique quel que soit l'ordre des trois directives. Le sous-réseau 1.2.0.0/16 est autorisé à accéder mais pas le sous-réseau 1.2.3.0/24, auquel l'accès est refusé. L'accès est toutefois autorisé à l'hôte 1.2.3.4.
2.3 Configuration d'une horloge de référence locale #
chronyd se base sur d'autres programmes (tels que gpsd) pour accéder aux données de synchronisation via un pilote spécifique. Utilisez la directive refclock dans /etc/chrony.conf pour spécifier une horloge de référence matérielle à utiliser comme source horaire. Elle comporte deux paramètres obligatoires : un nom de pilote et un paramètre spécifique au pilote. Les deux paramètres sont suivis de zéro ou plusieurs options refclock. chronyd comprend les pilotes suivants :
- PPS
Pilote pour l'API Pulse Per Second (Impulsion par seconde) du kernel Linux. Par exemple :
refclock PPS /dev/pps0 lock NMEA refid GPS
- SHM
Pilote de mémoire partagée NTP. Par exemple :
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
- SOCK
Pilote de socket de domaine Unix. Par exemple :
refclock SOCK /var/run/chrony.ttyS0.sock
- PHC
Pilote d'horloge matérielle PTP. Par exemple :
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
Pour plus d'informations sur les options des différents pilotes, reportez-vous à la commande man 8
chrony.conf.
2.4 Activation des sources horaires hors ligne #
Même s'il se lance normalement sur un système qui démarre sans connexion réseau, chronyd ne peut pas accéder aux serveurs horaires spécifiés dans /etc/chrony.conf. Pour empêcher chronyd de tenter d'interroger des serveurs horaires inaccessibles, utilisez l'option offline derrière la directive de source horaire, par exemple :
server ntp.example.org offline
Dans ce cas, chronyd ne tente pas d'interroger le serveur tant qu'il n'est pas activé à l'aide de la commande suivante :
# chronyc online ntp.example.org
Lorsque l'option auto_offline est définie à la place de offline, chronyd suppose que le serveur horaire est hors ligne si deux requêtes lui ont été envoyées sans réponse. Cette option évite d'avoir à exécuter la commande offline à partir de chronyc lors de la déconnexion de la liaison réseau.
3 Gestion de chronyd au moment de l'exécution #
3.1 Qu'est-ce que chronyc ? #
chronyc est la partie client de l'implémentation NTP chrony. Vous pouvez utiliser la commande chronyc pour modifier le comportement du service chronyd lors de l'exécution. Elle génère également des rapports d'état sur le fonctionnement de chronyd.
Les modifications apportées à l'aide de chronyc ne sont pas permanentes. Elles seront perdues au prochain redémarrage de chronyd. Pour que les changements soient permanents, modifiez /etc/chrony.conf comme décrit à la Section 2, « Configuration de NTP en ajustant /etc/chrony.conf ».
3.2 Comment fonctionne chronyc ? #
Vous pouvez exécuter chronyc en mode interactif ou non interactif. Pour exécuter chronyc de manière interactive, entrez chronyc sur la ligne de commande, puis appuyez sur Entrée. Une invite s'affiche et attend que vous entriez une commande. Par exemple, pour vérifier combien de sources NTP sont en ligne ou hors ligne, exécutez la commande activity :
#chronycchronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
Pour quitter l'invite de chronyc, entrez quit ou exit.
Si vous n'avez pas besoin d'utiliser l'invite interactive, entrez la commande directement, par exemple :
#chronycactivity
4 Configuration de NTS #
Le protocole NTP n'introduit pas de mécanisme de sécurité permettant d'authentifier et de chiffrer la communication entre le serveur horaire et le client. Network Time Security (NTS) est une extension qui améliore la sécurité de NTP. chrony prend en charge NTS et peut authentifier les sources horaire et offrir une protection contre certaines attaques réseau.
Les procédures suivantes expliquent comment configurer le serveur horaire et la machine cliente pour une synchronisation sécurisée du temps.
(Facultatif) Il est conseillé de configurer le serveur horaire pour que l'heure se mette à jour via NTS. Cela garantit une synchronisation du temps sécurisée dès le début de la chaîne de synchronisation. Commentez toutes les sources de temps existantes à l'emplacement
/etc/chrony.confqui ne prennent pas en charge NTS et ajoutez-en au moins une qui prend en charge NTS, par exemple :server time.cloudflare.com iburst nts
AstuceL'option
ntsdemande une connexion NTS si elle est disponible. Dans le cas contraire, elle se rabat sur NTP si NTS n'est pas disponible.Redémarrez le service
chronyd.>sudosystemctl restart chronyd.serviceVérifiez les sources horaires configurées.
>chronyc sources -vMS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? time.cloudflare.com 3 6 1 2 -947ms[ -947ms] +/- 12ms ^? pyrrha.fi.muni.cz 2 6 1 1 -948ms[ -948ms] +/- 39ms ^* whitesoft-intex16.c.cbsn> 1 6 1 2 -948ms[ -948ms] +/- 5444us ^? mail.combatostrich.dev 2 6 1 1 -948ms[ -948ms] +/- 28msNoteLa ligne qui commence par
^*comprend la meilleure source horaire sélectionnée.Vérifiez que la source horaire configurée utilise le mode NTS.
>chronyc -N authdataName/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen ========================================================================= [...] time.cloudflare.com NTS 1 15 256 3 0 0 8 96Vérifiez que la configuration du serveur inclut l'option
allowqui spécifie quels clients peuvent synchroniser l'heure avec le serveur horaire, par exemple :allow 192.168.1.0/24
(Facultatif) Si le serveur horaire fonctionne derrière un pare-feu, autorisez la communication sur les ports pour NTP et NTS. Il s'agit des ports 123 et 4460 par défaut.
Obtenez un certificat TLS et une clé privée correspondante et copiez-les à l'emplacement
/var/lib/chrony/. Vérifiez quechronypeut les lire, par exemple :>sudoinstall -m 0440 -o chrony -g chrony nts.key /var/lib/chrony/>sudoinstall -m 0440 -o chrony -g chrony nts.crt /var/lib/chrony/Modifiez
/etc/chrony.confet vérifiez que l'optionntsdumpdir /var/lib/chronyest active. Ajoutez ensuite les chemins d'accès à la clé et au certificat TLS.ntsdumpdir /var/lib/chrony ntsserverkey /var/lib/chrony/nts.key ntsservercert /var/lib/chrony/nts.crt
Redémarrez le service
chronyd.>sudosystemctl restart chronyd.service
Désactivez les sources NTP existantes, par exemple :
#server 192.168.1.1 iburst
Les configurations des sources sont incluses dans le fichier
/etc/chrony.confou dans les fichiers à l'emplacement/etc/chrony.d/.L'hôte client doit approuver l'autorité de certification racine qui a signé le certificat TLS. Des détails sur la gestion du magasin de certificats de l'autorité de certification sont disponibles dans un article dédié.
Ajoutez la source du serveur horaire NTS que vous avez configurée dans la Procédure 1, « Configuration du serveur horaire NTS » à la configuration
chronydu client dans/etc/chrony.conf, par exemple :server nts1.example.com iburst nts
Redémarrez le service
chronyd.>sudosystemctl restart chronyd.serviceVérifiez les sources de temps configurées sur le client et confirmez que la connexion est authentifiée.
>sudochronyc sources -v>sudochronyc -N authdataSur le serveur horaire NTS, vérifiez les statistiques par client concernant les connexions NTS.
>sudochronyc -N clients -k
5 Le service chronydsystemd #
La partie principale de chrony est le service chronydsystemd qui s'exécute en arrière-plan et synchronise l'heure système avec les serveurs horaires sélectionnés. Vous pouvez utiliser les commandes systemd suivantes pour faire fonctionner le service chronyd :
-
systemctl status chronyd.service Imprime des informations détaillées sur l'état actuel du service
chronyd.-
systemctl is-enabled chronyd.service Vérifie si le démarrage automatique du service
chronydau démarrage du système est activé.-
systemctl enabled chronyd.service Active le démarrage automatique du service
chronydau démarrage du système.-
systemctl disable chronyd.service Désactive le démarrage automatique du service
chronydau démarrage du système.-
systemctl is-active chronyd.service Vérifie si le service
chronyda été démarré et est en cours d'exécution.-
systemctl start chronyd.service Démarre le service
chronyd.-
systemctl stop chronyd.service Arrête le service
chronyd.-
systemctl restart chronyd.service Redémarre le service
chronydet recharge/etc/chronyd.conf.
6 Dépannage #
En cas d'erreur, vérifiez les points suivants.
Vérifiez que votre ordinateur est connecté à un réseau et que le réseau est correctement configuré :
>sudosystemctl status network.service ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago [...]Vérifiez que les serveurs horaires que vous avez entrés comme source horaire existent et sont accessibles sur le réseau. Par exemple :
>ping pool.ntp.org PING pool.ntp.org (85.199.214.101) 56(84) bytes of data. 64 bytes from 85.199.214.101 (85.199.214.101): icmp_seq=1 ttl=37 time=29.9 ms [...]Si le service
firewalldest actif sur votre ordinateur, vérifiez que le service NTP est autorisé.Vérifiez que le service
chronydest en cours d'exécution :>sudosystemctl status chronyd.service ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago [...]Si l'heure système d'un invité virtualisé diffère de l'heure exacte, assurez-vous que l'heure système du serveur hôte de la machine virtuelle est synchronisée avec un serveur horaire valide et que l'invité est synchronisé avec la même source horaire que l'hôte.
Si le service NTP ne se lance pas correctement au démarrage du système, cela peut être dû à des commutateurs réseau configurés pour utiliser le
Spanning Tree Protocol, alors que les ports ne sont pas configurés commeEdge Portsmais commePortfast. Dans ce cas, l'établissement de la connectivité réseau peut prendre jusqu'à une minute.Si le service NTP ne démarre pas lors du démarrage du système lorsque NetworkManager est utilisé, modifiez le fichier
/etc/sysconfig/network/config, puis modifiez la valeur deNM_ONLINE_TIMEOUTsur 30. Si le problème persiste, augmentez la valeur de timeout de 15, puis réessayez.Si les sources NTP ne sont pas accessibles, identifiez-les avec la commande suivante :
>chronyc sources -v [...] MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* time.mydomain.com 3 10 377 81 -5354us[-8257us] +/- 191ms ^? ntp1.example.com 0 10 0 - +0ns[ +0ns] +/- 0ns ^? 77.177.77.177 0 10 0 - +0ns[ +0ns] +/- 0ns ^? ntp3.example.com 0 10 0 - +0ns[ +0ns] +/- 0ns ^? ntp4.example.net 0 10 0 - +0ns[ +0ns] +/- 0ns ^? 2a02:3d8:1::1:1 0 6 0 - +0ns[ +0ns] +/- 0ns ^? ntp2.example.org 0 10 0 - +0ns[ +0ns] +/- 0nsDans ce cas, le seul serveur qui fournit réellement l'heure est
time.mydomain.com. Il est nécessaire de résoudre globalement la connexion réseau au niveau des sources horaires NTP distantes défaillantes.
7 Informations supplémentaires #
La sécurisation de votre ordinateur avec
firewalldest décrite dans la documentation https://documentation.suse.com/sles/html/SLES-all/cha-security-firewall.html#sec-security-firewall-firewalld.Les commandes pour le fonctionnement des services
systemdsont répertoriées dans le document https://susedoc.github.io/doc-modular/main/html/reference-systemctl-enable-disable-services/.Pour une référence complète, reportez-vous aux pages de manuel correspondantes :
Pour obtenir la liste complète des directives de configuration, exécutez
man 1 chrony.conf.Pour obtenir la liste complète des commandes
chronyc, exécutezman 1 chronyc.Pour obtenir la liste complète des options de ligne de commande
chronyd, exécutezman 8 chronyd.
8 Mentions légales #
Copyright © 2006–2025 SUSE LLC et contributeurs. Tous droits réservés.
Il est autorisé de copier, distribuer et/ou modifier ce document conformément aux conditions de la licence « GNU Free Documentation License » version 1.2 ou (à votre discrétion) 1.3, avec la section permanente qu'est cette mention de copyright et la licence. Une copie de la version de licence 1.2 est incluse dans la section intitulée « GNU Free Documentation License ».
Pour les marques commerciales SUSE, consultez le site Web https://www.suse.com/company/legal/. Toutes les autres marques de fabricants tiers sont la propriété de leur détenteur respectif. Les symboles de marque (®, ™, etc.) désignent des marques de SUSE et de ses sociétés affiliées. Des astérisques (*) désignent des marques commerciales de fabricants tiers.
Toutes les informations de cet ouvrage ont été regroupées avec le plus grand soin. Cela ne garantit cependant pas sa complète exactitude. Ni SUSE LLC, ni les sociétés affiliées, ni les auteurs, ni les traducteurs ne peuvent être tenus responsables des erreurs possibles ou des conséquences qu'elles peuvent entraîner.