La boîte à idées - Le blog de Jean Chambard

La boîte à idées - Le blog de Jean Chambard

Windows 10 : remettre les pendules à l'heure


Hugo Cabret de Scorcese

 

Vous ne l'avez sans doute pas vu, mais Microsoft a été victime en 2016 et 2017 d'un énorme bug qui a affecté ses serveurs de temps. Serveurs sur lesquels sont alignés par défaut tous les ordinateurs domestiques fonctionnant avec Windows. Certains utilisateurs ont donc vu leur PC afficher des heures voire des dates fantaisistes. La belle affaire me direz-vous ? Pas vraiment. Toutes les tâches programmées pour s'exécuter à une certaine heure de la journée - ou plutôt de la nuit - sur ces PC s'en sont trouvées décalées. Sans parler de l'horodatage des messages créés par Outlook ou Thunderbird (des clients de messagerie très populaires sur PC), des événements écrits dans les fichiers log, et d'un tas d'autres petits inconvénients, comme le blocage des services temps réel (vidéo-diffusion notamment).

 

Un phénomène qui a pris tant d'ampleur que la presse spécialisée s'en est émue. Et que certains ont perdu confiance dans la capacité de Microsoft à bien gérer son infrastructure. Pourtant, contourner le problème au niveau du PC domestique n'était pas bien compliqué. Encore fallait-il comprendre comment cela fonctionne. Voici donc un petit cours vulgarisé sur les serveurs de temps et la façon dont il faut modifier Windows 10 pour être toujours à l'heure.

 

1 - Les ordinateurs rêvent-ils d'horloge atomique ?

Pour synchroniser les horloges des ordinateurs de toute la planète, il y a un protocole standardisé et baptisé avec beaucoup d'imagination Network Time Protocol (NTP). Il en est d'ailleurs à sa version 4, publiée en 2010. Comme son nom l'indique, ce protocole permet de donner l'heure à travers le réseau et notamment à travers Internet, et donc de synchroniser les ordinateurs entre eux. Il existe un excellent article de vulgarisation sur le sujet sur Wikipédia. Je ne vais donc rappeler ici que l'essentiel.

 

L'idée de base est assez simple. Il faut d'abord une horloge de référence, très fiable, sans dérive, comme une horloge atomique par exemple (voir https://www.heure.com/). Bon c'est peut-être un peu cher pour le commun des mortels.  Alors, on utilise quelque chose de moins cher, donc de plus répandu et presque aussi fiable : le temps GPS ; distribué (gratuitement) par les satellites du même nom. Chaque satellite embarque en effet une petite horloge atomique synchronisée sur le temps universel par la station de la base "Schriever Air Force" qui gère les dérives de ces horloges et qui garantie donc un temps plus que fiable.

 

Pour être complet, sachez que l'on peut aussi diffuser le temps à travers d'autres signaux que le GPS, comme la radio (MSF pour l'Angleterre, DCF pour l'Allemagne et WWVB pour l'Amérique du nord).

 

Il faut ensuite "distribuer" l'heure donnée par ce signal GPS. C'est là qu'on introduit la notion de serveur de temps. En gros, un ordinateur directement connecté à un récepteur GPS (qui représente donc l'horloge de référence), capable de décoder l'heure GPS captée par le récepteur et de la redistribuer à travers le réseau. Car il est évidemment moins coûteux de distribuer ce temps via Internet que d'équiper chaque ordinateur individuel d'un récepteur GPS. Chaque ordinateur recevant le temps distribué par le serveur de temps peut à son tour redistribuer l'heure et devenir ainsi serveur de temps lui-même. Il sera juste placé plus bas dans la hiérarchie des serveurs de temps. Et ainsi de suite jusqu'au client final.

 

Évidemment, plus on s'éloigne de la source GPS, plus on perd en précision, la distribution par le réseau introduisant des délais et des perturbations. Mais le protocole NTP inclut des mécanismes de correction pour cela (il calcule la durée de transit des messages sur le réseau et la soustrait de l'heure reçue), même si a précision n'est évidemment pas absolue.

 

Voici donc la hiérarchie des serveurs de temps :

 

 

 

En tant que particulier, il ne vous pas possible d'avoir un serveur de temps de stratum 1 (à moins que vous n'ayez une antenne radio ou satellite GPS). Par contre, un certain nombre de serveurs de temps de la couche 2 (couche 2 = Stratum 2 soit la plus proche du temps GPS après la Stratum 1) sont en accès libre via Internet, et il est donc tout à fait possible de se brancher dessus.

 

2 - Rester le maître du temps de Windows

Avant de modifier la configuration de son PC, il faut d'abord sélectionner son nouveau serveur de temps. Mais ou sont-ils et sur quels critères les sélectionner ? Voici quelques critères :

  1. Plus le serveur est proche de la couche 1 (Stratum 1), mieux c'est. Moins il y a d'intermédiaire et plus le temps diffusé reste précis. L'idéal est d'avoir un serveur de stratum 2.

  2. Plus le serveur est proche de chez vous, mieux c'est. Cela vous permet de vous affranchir des perturbations induites par le réseau. L'idéal est d'avoir un serveur de temps proche de votre ville ou de votre région.

  3. Le serveur doit être disponible. Pour cela, les fournisseurs utilisent des mécanismes de redondance : si un serveur tombe en panne, les requêtes sont redirigés vers un autre serveur dans le même pool.

 

Par défaut, Microsoft fournit son propre serveur de temps, « time.windows.com ». Ce nom pointe en fait sur différents serveurs répartis dans le monde de façon à être au plus proche des PC clients, de répartir la charge (il y a quand même plus de 1,25 milliard de PC dans le monde) et d'assurer la disponibilité du service. Les autres services les plus connus et les plus fiables sont :

 

  • NTP Pool (vous trouverez une description sur www.ntppool.org et plus spécifiquement sur la zone France), le projet de synchronisation des horloges informatiques via Internet. Pour utiliser un serveur proche de sa région, il suffit d'utiliser le préfixe de son pays, soit fr.pool.ntp.org pour la France, ch.pool.ntp.org pour la Suisse, cn.pool.ntp.org pour la Chine, etc.
    Il est également possible de spécifier plusieurs serveurs plutôt qu'un pool, en utilisant 1.fr.pool.ntp.org, 2.fr.pool.ntp.org, 3.fr.pool.ntp.org...

  • Le service NTP du NIST (National Institute of Standards and Technology - description du service sur https://tf.nist.gov/tf-cgi/servers.cgi). Le service est accessible sur time.nist.gov.

  • Les services NTP de RENATER (Réseau National de télécommunications pour la Technologie l'Enseignement et la Recherche), le réseau qui relie les différents organismes de recherche et d'enseignement en France. La liste des serveurs disponibles est régulièrement mise à jour sur https://services.renater.fr/ntp/serveurs_francais. Vous pourrez noter que certains serveurs font aussi partie de NTP Pool. Reste à faire votre choix dans ceux qui sont en accès libre.

  • Les serveurs NTP de son opérateur ou de son hébergeur, qui ont souvent l'avantage d'être les plus proches

    • Bouygues Telecom dispose d'un serveur de temps qui est le 194.158.119.97 (source LaFibre). Toutefois utiliser une adresse IP fixe me semble assez dangereux et je vous le déconseille donc.

    • Free dispose de plusieurs serveurs : ntp1.proxad.net, ntp2.proxad.net, ntp3.proxad.net...Il vaut mieux utiliser ces serveurs si vous êtes abonnés à Free évidemment. Vous pouvez aussi utiliser le premier équipement que vous voyez après votre Freebox (fonction non documenté par Free). Il suffit donc de faire un traceroute vers n'importe quel serveur (tracert www.ggogle.fr sous windows par exemple) et de noter la première adresse derrière votre freebox.

    • Orange se base sur fr.pool.ntp.org.

    • OVH se base sur cdns.ovh.net.

  • Les services publics de Google (qui sont décrits sur https://developers.google.com/time/) et accessibles depuis « time.google.com » (oui cela ressemble aussi aux service de Microsoft). La particularité du service de Google réside dans la gestion de la seconde intercalaire. Cette dernière est insérée de temps à autre dans le Temps Universel Coordonné (TUC ou CUT - Coordinated Universal Time soit donc UTC quand on mélange les 2) pour compenser le ralentissement de la rotation de la Terre et aligner le temps UTC, hyper stable, sur le temps solaire, quant à lui beaucoup plus variable. Google lisse ainsi l'ajout ou le retrait de cette seconde sur 1 journée entière, alors que l'UTC rajoute brutalement 1 seconde.

 

Partons sur NTP Pool, service indépendant des GAFA et autres Microsoft ; nous allons utiliser le service générique français qui est fr.pool.ntp.org (ou 0.fr.pool.ntp.org) qui laisse le système trouver le serveur le plus proche. Pour cela, allons dans le panneau de configuration et dans les paramètres de date, descendons jusqu'à la section "Paramètres associés" pour cliquer sur le lien "Paramètres de date, d'heure et  régionaux supplémentaires" :

 

 

 

Il suffit alors de cliquer sur le lien "Définir l'heure et la date"
 

 

 

Puis de sélectionner l'onglet "Temps Internet" qui affichera les paramètres de synchronisation du PC.

 

 



Par défaut, le PC doit afficher "time.windows.com". Dans mon exemple, je suis déjà passé à fr.pool.ntp.org. L'onglet m'affiche l'heure de la prochaine synchronisation et l'heure de la dernière synchronisation réussie. Cliquons sur "Modifier les paramètres" pour ouvrir la boite de dialogue suivante :
 

 

Ne vous laissez pas avoir par le menu déroulant qui liste un certain nombre de serveurs de temps, mais pas le notre. Il suffit simplement de le saisir dans la liste et de cliquer sur mettre à jour. Et hop, le tour est joué. La première synchronisation peut échouer (c'est Windows n'oublions pas) mais vous n'avez plus qu'à vérifier dans ce même écran que tout fonctionne correctement au bout de quelques minutes.

 

Vous pouvez aussi contrôler les log grâce à l'observateur d'événements Windows :

 

 

 

Comme vous pouvez le constater, c'est relativement simple. Trop simple pour certains. Car il n'y a pas possibilité dans l'interface d'aller modifier certains paramètres pourtant parfois utiles. Alors voici quelques informations supplémentaires pour ceux qui en veulent un peu plus.

 

3 - Devenir le maître des clés (du registre)

Pour modifier les paramètres du service de temps de Windows, il faut aller modifier les clés du registre Windows. Il faut donc lancer regedit, et naviguer jusqu'à la valeur du registre :

Ordinateur\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters

 

Pour ceux que cela interpelle,  ControlSet001 et ControlSet002 sont des sauvegardes de CurrentControlSet, vous n'avez donc pas à les modifier car cela n'aura aucun effet sur votre système.

 

 

 

On peut donc voir dans ma base de registre une valeur intéressante qui s'appelle NtpServer. Il avait auparavant comme valeur time.windows.com,0x09, et il est maintenant à fr.pool.ntp.org,0x09. La première partie est simple à interpréter, c'est le nom du serveur de temps que je viens de saisir dans l'interface. A noter que l'on peut mettre plusieurs serveurs de temps dans cette clé de registre, séparés par des espaces. Par exemple :

time.windows.com,0x09  time.nist.gov,0x09

 

Mais que signifie ce chiffre derrière ? La documentation de Microsoft indique de manière laconique (ce sont les 2 premières colonnes que j'ai complétées d'une 3ème) :

 

0x01 SpecialInterval Utiliser la valeur spécifiée par SpecialInterval
0x02 UseAsFallbackOnly Utiliser ce serveur uniquement en secours lorsque les autres serveurs spécifiés ne répondent plus
0x04 SymmetricActive L'ordinateur fonctionne en mode Actif Symétrique : dans ce mode, il envoie, sans tenir compte de l'état de ses pairs des messages à intervalles réguliers pour annoncer son souhait de synchroniser ses pairs et d'être synchronisé (c'est la synchronisation horizontale que je vous ai dessinée dans mon premier schéma).
0x08   Client L'ordinateur fonctionne en mode client uniquement

 

 

Il est possible de combiner les "flags" sauf quand les options sont mutuellement exclusives. On ne peut pas, par exemple, être client seulement et en mode actif symétrique qui est réservé aux serveurs...

La combinaison du 1er et du dernier flag donne : 0x01 OR 0x08 = 0x09, qui est justement cette valeur que nous avons trouvé dans notre clé de registre. Pour rappel :

    0x08 : 00001000
    0x01 : 00000001

    0x09 : 00001001

 

Mon PC est donc configuré comme client : il ne pourra pas redistribuer le temps à d'autres PC de mon réseau. Et il doit utiliser le paramètre SpecialPollInterval. qui se trouve être dans :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient


Normalement, le service W32Time interroge son serveur de temps selon un intervalle de temps qui dépend de la qualité des données temporelles que lui a communiquées la source. Il est cependant possible de spécifier un intervalle de temps statique au bout duquel le PC va chercher à se synchroniser. Ce temps est exprimé en seconde. Par exemple, si vous spécifiez une valeur de 3 600, le service se synchronisera toutes les heures (60 minutes * 60 secondes). La valeur par défaut sur les clients et serveurs autonomes est de 604 800 secondes (1 semaine). C'est généralement amplement suffisant, la dérive des horloges à quartz des ordinateurs étant assez faible.

 

 

 

4 - Si votre PC refuse de se mettre à l'heure

Vérifiez que vous disposez bien d'un lien vers le serveur de temps spécifié et contrôlez vos logs. Changez éventuellement de serveur de temps (il y en a à la pelle).

 

Enfin, si votre PC change d'heure à chaque arrêt, c'est un signe que votre pile est morte. Même si Windows n'est pas connecté à Internet et si le PC est éteint, il se rallume avec la bonne heure (c'est à dire une heure correcte). On doit cela au BIOS, le programme intégré à la carte-mère qui conserve cette information dans sa mémoire interne avec d'autres réglages de la configuration du système grâce à une source d'énergie très basique : une pile bouton. Et cette pile s'use parois plus vite que votre PC. Il suffit alors de la changer.

 

Vous voilà maintenant totalement synchronisé et maître des horloges.

 

 

Harold Lloyd dans le film 'Monte là-dessus !



29/12/2018
5 Poster un commentaire

A découvrir aussi


Ces blogs de Loisirs créatifs pourraient vous intéresser