Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Synchronisation de l'heure à l'aide du protocole NTP/NTS

Synchronisation de l'heure à l'aide du protocole NTP/NTS

Date de publication : 20 mar 2025
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.

Périphériques individuels interrogeant un serveur horaire public
Figure 1 : Périphériques individuels interrogeant un serveur horaire public

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

Plusieurs hôtes interrogeant un serveur horaire interne
Figure 2 : Plusieurs hôtes interrogeant un serveur horaire interne

1.3.1 Implémentation

chrony est l'implémentation par défaut de NTP dans SUSE Linux Micro. chrony comprend deux parties :

  • chronyd est un service systemd qui peut être lancé au moment du démarrage.

  • chronyc est un programme d'interface de ligne de commande permettant de surveiller les performances de chronyd et 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

1

L'option offline empêche chronyd d'interroger le serveur horaire. Cette option est utile si le serveur n'est pas joignable au démarrage de chronyd. Vous devez mettre le serveur horaire en ligne lorsqu'il est joignable en utilisant chronyc. Pour plus d'informations, consultez la Section 3, « Gestion de chronyd au moment de l'exécution ».

2

L'option prefer indique à chronyd de privilégier cette source horaire par rapport à d'autres qui n'incluent pas cette 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

1

L'option iburst signifie que chronyd commence par une rafale de 4 à 8 requêtes pour effectuer la première mise à jour de l'horloge plus tôt.

2

L'option maxsources indique à chronyd d'utiliser jusqu'à trois sources du pool.

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
Astuce
Astuce

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 par zéro ou plusieurs options refclock. chronyd inclut les pilotes suivants :

PPS

Pilote pour l'API Pulse Per Second du kernel. 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
Astuce
Astuce

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
Astuce
Astuce

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 Présentation de 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.

Note
Note : modifications temporaires

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 Fonctionnement de 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 :

# chronyc
chronyc> 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 :

# chronyc activity

4 Le service chronyd systemd

La partie principale de chrony est le service chronyd systemd 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 chronyd au démarrage du système est activé.

systemctl enabled chronyd.service

Active le démarrage automatique du service chronyd au démarrage du système.

systemctl disable chronyd.service

Désactive le démarrage automatique du service chronyd au démarrage du système.

systemctl is-active chronyd.service

Vérifie si le service chronyd a é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 chronyd et recharge /etc/chronyd.conf.

5 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é :

    > sudo systemctl 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 firewalld est actif sur votre ordinateur, vérifiez que le service NTP est autorisé.

  • Vérifiez que le service chronyd est en cours d'exécution :

    > sudo systemctl 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 comme Edge Ports mais comme Portfast. 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 de NM_ONLINE_TIMEOUT sur 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] +/-    0ns

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

6 Informations supplémentaires