(S)NTP – Synchronisation d’horloge et configuration de l’heure d’été

Même si dans bien des cas l’heure donnée par l’horloge du switch ou du routeur importe peu (du moins jusqu’au jour où on aurait aimé qu’elle soit correcte), il peut être utile, voire indispensable de s’assurer que tout le monde est à la bonne heure.

Il y a deux grandes méthodes:

  • Configurer l’heure manuellement … autrement dit, la mauvaise méthode.
  • Synchroniser l’heure sur une horloge de référence … la bonne solution.

Reste à voir ce qui doit être défini pour que tout cela fonctionne…

(S)NTP – (Simple) Network Time Protocol

NTP est un protocole applicatif ayant pour but de synchroniser les horloges de machines entre elles. Il n’y a pas grand chose de réellement nécessaire à savoir concernant les  entrailles de ce protocole pour l’utiliser si ce n’est :

  • C’est un protocole client-serveur.
  • Un équipement peut être à la fois client et serveur.
  • Il fournit un moyen de synchroniser l’horloge … mais indépendamment des fuseaux horaires, et des systèmes d’heure d’été/hiver. Ca, il faudra s’en charger nous-même.
  • Les messages NTP sont envoyés à destination du port UDP 123 (attention aux ACLs et autres firewalls).
  • Il est possible de gérer une authentification entre les clients et serveurs.

NTP vs SNTP

Sur les équipements Cisco on retrouve parfois un service NTP mais aussi SNTP. La différence est simple:

  • Le service NTP est le service à la fois client et serveur.
  • Le service SNTP est la version client uniquement.

Donc quoi qu’il en soit, c’est le protocole NTP qui est utilisé.

Configuration de base NTP

Afin de rester bref, je vais me contenter ici d’une configuration NTP fonctionnelle, sans authentification.

Etape n°1: Définir la « timezone », en gros le fuseau horraire.

switch(config)# clock timezone zone offset_h offset_m
  • zone: l’acronyme correspondant à votre zone (liste complète des zones)
  • offset_h: nombre d’heure de décalage par rapport à UTC (Greenwich)
  • offset_m: nombre de minutes de décalage par rapport à UTC

En ce qui me concerne, pour la belgique, cela donne…

switch(config)# clock timezone CET 1

vous aurez noté que le nombre de minutes de décalage est optionnel.

Etape n°2: Configurer le passage à l’heure d’été (optionnel suivant le pays bien entendu).

Ici je donne un example concret, il y a trop de variations possibles pour le formuler de manière générique. En Belgique, l’heure d’été commence le dernier dimanche de Mars à 3h du matin. Elle se termine le dernier dimanche d’Octobre à 2h du matin. Voici ce que je configure donc:

switch(config)# clock summer-time CET recurring last sunday march 03:00 last sunday october 02:00 60

J’ai donc indiqué ici que le calcul de l’heure dété est basé sur la zone CET, que cela se produit de manière récurrente avec le dernier dimanche de Mars comme début, le dernier dimanche d’Octobre comme fin, et que ça implique un décalage de 60 minutes.

Etape n°3: Synchroniser l’horloge

En gros, on indique ici à quel serveur NTP l’équipement doit s’adresser. Si vous n’en connaissez pas, pas de souci, il existe une multitude de serveurs, partout dans le monde et totalement accessibles. Jetez un oeil sur www.pool.ntp.org.

Pour configurer un serveur ntp de référence, procédez comme ceci:

switch(config)# ntp server adresse/hostname
  • adresse/hostname: vous pouvez indiquer soit une adresse ip, soit le nom de machine, pour autant que votre équipement soit capable d’effectuer la résolution DNS, bien entendu.

Voici ce que j’utilise (en Belgique):

switch(config)# ntp server be.pool.ntp.org

Et voilà, le tour est joué… il ne reste plus qu’à vérifier…

Etape n°4: Vérification

switch#show ntp status
Clock is synchronized, stratum 3, reference is 85.88.55.5
nominal freq is 250.0000 Hz, actual freq is 249.9999 Hz, precision is 2**24
reference time is D95A4D34.8B1F5043 (19:11:16.543 CET Wed Jul 22 2015)
clock offset is 1.9180 msec, root delay is 20.52 msec
root dispersion is 38.45 msec, peer dispersion is 2.69 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000081 s/s
system poll interval is 64, last update was 218 sec ago.
switch#

On voit ici que la clock de la machine est synchronisée avec 85.88.55.5 (qui n’est autre qu’un des serveurs caché derrière be.pool.ntp.org).

switch#show ntp associations

  address         ref clock       st   when   poll reach  delay  offset   disp
*~85.88.55.5      193.79.237.14    2      2     64   377 15.810   1.918  4.086
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured
switch#

Si la ligne de 85.88.55.5 comportait des champs vides, il y aurait de forte chance que la synchro n’ait pas fonctionné.
Ne paniquez toutefois pas trop vite, il faut parfois quelques minutes pour que ça se mette ne place (tout dépend du serveur par rapport auquel vous vous synchronisez).

switch#show clock detail
19:19:24.884 CET Wed Jul 22 2015
Time source is NTP
Summer time starts 03:00:00 CET Sun Mar 29 2015
Summer time ends 02:00:00 CET Sun Oct 25 2015
switch#

On retrouve ici la confirmation que le protocole NTP est utilisé pour synchroniser l’horloge, ainsi que les réglages de l’heure d’été.

Et ensuite ?

Il est bien sur possible d’en faire plus, avec de l’authentification etc. Mais ce n’est pas ce qui est le plus intéressant ici. Par contre, une fois que vous avez configuré ceci sur un équipement, n’oubliez pas qu’il se comporte désormais comme client NTP mais aussi comme serveur NTP. Du coup, vous pouvez très bien en configurer un pour se synchroniser avec un serveur de temps publique, et configurer les autres pour se synchroniser sur le premier. Pratique non ?

Dans le cas où vous ne souhaiteriez pas que votre équipement fasse office de serveur, il vous suffit de remplacer la commande « ntp server » par « sntp server » … pour autant qu’elle soit disponible.

2 Comments on “(S)NTP – Synchronisation d’horloge et configuration de l’heure d’été

  1. Bonjour et merci pour vos articles !

    Pour avoir plusieurs serveurs NTP, il suffit de dupliquer la commande « ntp server  » ?
    Y a-t-il une priorité des serveurs ?

    Merci,
    Frédéric, Strasbourg, France

    • Exactement, une commande « ntp server » par serveur que l’on veut configurer.

      Il est possible de rajouter le mot clé « prefer » à la fin de la commande … ce qui rend le serveur ntp « prioritaire » par rapport aux autres