Forum Linux.général Je reviens avec mon NTP

Posté par  .
Étiquettes : aucune
0
16
mar.
2006
Bonjour, mon précédent n'a eu que peu de succès, mais pour celui là, je compte sur vous, c'est un peu plus de la configuration et moins de l'explication. Alors voila ce que je veux:
Je veux qu'une machine de mon réseau local (appelons le serveur) fasse serveur NTP pour mon réseau local. Par défaut, ce PC n'est pas connecté à Internet, j'utilise donc l'horloge de référence de celui-ci. Bon pas de problème, ça marche bien, mes clients NTP de mon réseau local se synchronise bien avec lui. Maintenant, le problème, c'est que mon serveur peut se connecter à Internet de temps en temps (histoire de prendre une heure de référence un peu plus stable que son horloge au passage), donc pas de souci, je rajoute un pool de serveur NTP public de strate 2 par exemple, et hop, ça marche. Quand je me connecte à Internet, l'algo choisit comme un grand les meilleurs serveurs NTP et tout se passe pour le mieux dans le meilleur des mondes. Quel est mon problème alors?
Et bien cela vient des contraintes qu'on me fournit... en gros, mon PC serveur sera à terme une carte embarquée (dans un avion par exemple) et pi ben les avions, c pas forcemment souvent connecté à internet mais ça peut arriver. Donc on se trouve bien dans mon scénario d'avant, je pense que vous suivez. Maintenant, mon problème, c'est que l'horloge de ma carte peut dévier toute seule de façon assez grande, tout en gardant ses clients bien synchronisé, mais le jour ou on va la connecter sur le Net, badaboume, l'horloge de ma carte a trop dévié et hop, le protocole NTP considère que l'écart et trop grand et il n'applique rien. Alors ma question est la suivante, comment faire??? On pourrait me dire que je pourrais utiliser un ntpdate avant, oui d'accord, mais alors il faut d'abord stopper le démon, lancer ntpdate en connaisssant l'adresse d'un serveur NTP correct, puis relancer le démon. Le genre de truc que le mec qui va brancher l'avion au net a vachement le temps de faire et surtout pas forcement l'occasion de le faire (bon mon exemple sur l'avion est un peu exagéré mais en gros c'est ça quand on utilise une carte embarquée)... alors je vous le demande, comment faire avec NTP? ou plus généralement, si je pouvais intercepter une modification de la topologie réseau, genre attention, tu viens de te connecter sur internet par l'interface eth0, ça m'arrangerait... quelqu'un sait comment voir ça?
PS: si je poste pas au bon endroit merci de me le dire, et si quelqu'un a une idée de forum qui pourrait me répondre, ça serait sympa de me le dire.
Merci d'avance

PPS: Et oui je suis d'accord, la philosophie de NTP n'est pas forcement celle pour laquelle je veux l'utiliser mais c'est ce qu'on me demande, moi j'exécute!
  • # Peut-être une piste....

    Posté par  . Évalué à 3.

    Tu as un soft, appelé ifplugd qui m'a été conseillé pour un problème similaire...
    En gros, ça détecte si le câble réseau est branché, ou non, et ça déclenche une ou plusieurs actions grâce à des scripts selon l'évènement constaté....
    J'espère ne pas être à côté de la plaque et que ce soft t'aidera dans ta démarche.
  • # Openntpd

    Posté par  . Évalué à 3.

    Salut,

    Pour faire une mise à jour de l'horloge de manière "brutale", tu as l'option -s de ntpd du projet openntpd. S'il y a une différence de plus de 180 secondes, hop il force une mise à jour (évite le rdate).
    Pour ce qui est de détecter le branchement de la carte réseau, tu en as une trace dans les logs (genre eth0 up, down) donc il y a bien un process permettant de faire ca..
    Deuxième solution (du moins sur Debian), tu mets un script dans /etc/network/if-up.d et la dès que ton interface est montée (n'importe laquelle), ton script est executé (idem mais a l'inverse dans if-down.d).

    Liens : http://www.openbsd.org/cgi-bin/man.cgi?query=ntpd
  • # Une piste ?

    Posté par  . Évalué à 1.

    L'option -g de ntpd ne te convienderait pas ???
    La plupart des client ntp on la possiblité de désativer le comportement par défaut qui empèche le mise à l'heure en cas de trop gros écart.

    En espérant répondre à la question...
    • [^] # Re: Une piste ?

      Posté par  . Évalué à 0.

      L'option -g marche bien, mais elle ne marche qu'une seule fois au démarrage du démon. Or moi, je ne veux pas arrêter mon démon, il doit tourner en permanence, on y a pas forcément accès sur la carte et le système de script me parait un peu trop lourd (même si ça marcherait j'en conviens). J'ai trouvé l'option ticker panic 0 à rajouter dans le ntp.conf qui permet de de faire des mises à jour même si l'écart de temps est grand à partir d'un serveur, mais un problème subsiste.
      Si je mets q'un seul serveur dans mon fichier ntp.conf, ça marche bien, même si y'a un gros écart, pas de problème, il met à jour. Par contre dans le scénario que je veux tester, je dois donc mettre comme serveur NTP un serveur distant, et aussi mon horloge de référence. Donc je commence en étant uniquement sur mon réseau local, NTP synchronise alors à partir de mon horloge (que j'ai déréglé pour émuler un écart de temps important), puis je branche mon cable réseau. NTP choisit le serveur NTP distant (et me jette pas malgrè la grande différence de temps d'ou l'intéret de l'option Panic) mais par contre, il ne met pas à jour l'heure d'un seul coup comme je m'y attendais... alors toujours le même problême.
      • [^] # Re: Une piste ?

        Posté par  . Évalué à 4.

        C'est normal !!!!

        Imagine que toutes tes machines aien disons 1 heure d'avance par rapport à ta référence de temps: si la mise à jour est brutale, les process qui tournent risquent de devenir fous, tu perd la cohérence de tes logs, et il risque d'y avoir d'autres problèmes. Le principe de base de NTP n'est pas de mettre brutalement les horloges à jour mais plutot d'accélérer ou de ralentir le décompte du temps pour se synchroniser avec une référence.

        Les mises a jour brutales d'horloge, c'est pas bon en général, sauf au démarrage d'un système.
        • [^] # Re: Une piste ?

          Posté par  . Évalué à -1.

          Les mises a jour brutales d'horloge, c'est pas bon en général, sauf au démarrage d'un système.


          Et à l'arrêt.
          On trouve souvent une mise à jour de l'horloge hardware lors d'un reboot ou un arrêt de la machine.
  • # Et un module qui fournit l'heure par RS232 par exemple?

    Posté par  . Évalué à 2.

    Ca ne le ferait pas? Il me semble que ce genre de module ne coute plus très cher. Après faut voir en fonction de tes contraintes ....
    • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

      Posté par  . Évalué à 1.

      Ben si dans l'idéal enfin si je comprends bien ce que ça fait, en gros ce module fait horloge de référence à partir d'une source GPS, c'est bien ça? Le problème, c'est que moi, pour ne rien te cacher, je développe ce truc pour une carte switch routeur destiné à l'embarqué avec un linux faisant tourner le tout, et je dois faire que ça soit cette carte qui assure la synchronisation du temps... pas un truc externe car je doute que les utilisateurs de la carte embarqués soit prêt à faire une place dans leur avion pour un module externe! Le but n'est pas tant que la carte soit à la vraie heure en fait, mais que toutes les machines branchés sur cette cartes soit à l'heure (en gros pour permettre de faire un système de log cohérent dans un premier temps) mais que quand même si on veut être à la vraie heure, on puisse faire que la carte aille sur un serveur NTP public...
      • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

        Posté par  . Évalué à 2.

        Ben si dans l'idéal enfin si je comprends bien ce que ça fait, en gros ce module fait horloge de référence à partir d'une source GPS, c'est bien ça?

        par exemple. Il doit y avoir d'autres solutions. Côté encombrement, je ne sais pas combien de place ça prend.

        Le but n'est pas tant que la carte soit à la vraie heure en fait, mais que toutes les machines branchés sur cette cartes soit à l'heure (en gros pour permettre de faire un système de log cohérent dans un premier temps) mais que quand même si on veut être à la vraie heure, on puisse faire que la carte aille sur un serveur NTP public...

        Tu risque d'avoir des soucis si ton horloge avance par rapport à une base de temps universelle. Tu risque d'avoir des logs non cohérentes, surtout si tu fais une mise à jour brutale par rapport à la base de temps universelle.

        Y a un autre truc qui m'inquiète, c'est ton "dans un premier temps". Ca veut dire que d'autres choses sont prévues? Quoi donc Parce que ça risque d'influer sur le choix de la solution à apporter. les problèmes de synchronisation sur un ensemble de systèmes ne sont pas si simple à résoudre qu'ils en ont l'air.
        • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

          Posté par  . Évalué à 0.

          <<Tu risque d'avoir des soucis si ton horloge avance par rapport à une base de temps universelle. Tu risque d'avoir des logs non cohérentes, surtout si tu fais une mise à jour brutale par rapport à la base de temps universelle.>>
          Je suis bien d'accord avec ça, mais pour le moment, c'est le fonctionnement précis de NTP, et de l'adapter pour qui fonctionne dans les contraintes citées précédement qu'on me demande, tout en étudiant l'impact de problèmes comme celui que tu soulèves là, c'est à dire en gros, que toutes mes machines de mon réseau local se retrouve à faire un saut en arrière d'où gros problème au niveau des logs mais d'autres problèmes tout aussi grave... Si quelqu'un avait une URL ou qq chose sur ce sujet, ça serait cool. Et si tu veux, pour le moment, je fonctionne en imaginant le pire, normalement, ma carte ne va pas avoir 15 heures de décallage mais je sais qu'on va me demander ce qui se passe dans ces cas là et si NTP réagit bien, c'est pour ça que je le teste;

          <<Y a un autre truc qui m'inquiète, c'est ton "dans un premier temps". Ca veut dire que d'autres choses sont prévues? Quoi donc Parce que ça risque d'influer sur le choix de la solution à apporter. les problèmes de synchronisation sur un ensemble de systèmes ne sont pas si simple à résoudre qu'ils en ont l'air.>>

          Pour l'instant, le premier temps est uniquement ce qu'on m'a demandé, mais pour être bref, les clients de mon employeur sont les militaires qui sont plutot secrets secrets dans le genre, donc y ont demandé à la boite, pourriez pas nous mettre le NTP? Après pourquoi ils veulent l'utiliser à part pour synchroniser, j'en sais rien. C'est sur que si c'est pour par exemple de la gestion de base de données de transactions etc, ca risquerait d'être le merdier totale si le temps revient en arrière. Donc voilà, j'aimerai bien savoir si quelqu'un si connait un peu dans ce sujet, ça m'interesse aussi de philosopher un peu la dessus ;-)... merci d'avance
          • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

            Posté par  . Évalué à 2.

            Dans ce cas a mon avis le mieux est d'avoir un rdate qui tourne en cron sur chaque machine, chacune d'entre elle se synchronisant sur ta base de temps locale, et ta base de temps locale se synchronise sur une source externe.
            • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

              Posté par  . Évalué à 0.

              J'ai aussi envisagé cette solution effectivement mais cela pose aussi un problème. Imagine, bon je suis toujours dans le cas le pire, que ma machine serveur NTP de mon réseau local qui se synchronise sur une source extérieure n'est pas à l'heure? Donc bon, mon serveur NTP va se mettre à jour (via un step adjustement, vu que c'est une grande différence car je rapelle que j'envisage le pire cas et que normalement ma carte est connectée à Internet que très rarement) et va par exemple gagner 5 minutes. Et bien que se passe t'il si mes machines locales doivent attendre 55 minutes avant que cron relance la tache? et bien on va pas être à l'heure pendant 55 minutes dans mon réseau local, alors certes je peux diminuer le temps d'exécution de la commande dans cron mais à ce moment là, on perd à mon sens tout l'intérêt de NTP... c'est à dire qu'on va pas effectuer les corrections régulièrement mais uniquement à coup de rdate (ou plutot de ntpdate je pense)... alors ouai je comprends bien que c'est un peu chiant ce que je demande mais c'est comme ça, mais en gros je pense que ce qu'on me demande n'est tout simplement soit pas faisable, soit pas indiqué avec le protocole NTP... mais on me demande pas à tout prix de le faire, on me demande si c'est envisageable et surtout utile mais moi, je pense dire non dans le pire des cas. C'est à dire celui que je présente depuis tout à l'heure, le cas ou ma carte va aller se connecter ponctuellement à une source avec laquelle il est en grand décalage... ce qui n'est normalement pas le cas pour NTP vu qu'en général avant d'aller se synchroniser, on fait un ntpdate sur le serveur; Le problème, c'est que je ne sais pas quand ma carte va être connecté au Net, donc quand faire le ntpdate parce que sinon, ça serait une solution... dès que je me connecte au net, j'arrête le démon, je fais un ntpdate sur mon serveur NTP puis je relance le démon. Le truc, c que pendant ce temps là, mes clients ne sont plus à la même heure et le temps qu'il se reconnecte à mon serveur NTP (même avec l'option iburst activé et minpoll au minimum), y se sera passé un petit peu de temps (genre peut être 4 secondes ce qui fait 4 secondes de log foireux, ce qui peut être assez problématique)...
              • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

                Posté par  . Évalué à 2.

                que se passe t'il si mes machines locales doivent attendre 55 minutes avant que cron relance la tache? et bien on va pas être à l'heure pendant 55 minutes
                Pas exactement: si le décalage n'est pas énorme, ntp va 'rattraper' le coup.

                Sinon NTP peut fonctionner en broadcast il me semble. Ce ne sont plus les stations qui demandent l'heure mais ton serveur qui diffuse.

                comprends bien que c'est un peu chiant ce que je demande mais c'est comme ça,
                Nonj c'est même un problème plutot intéressant ...

                je pense que ce qu'on me demande n'est tout simplement soit pas faisable, soit pas indiqué avec le protocole NTP.
                C'est aussi ce que je pense. Voir http://www.hsc.fr/ressources/breves/ntp-auth.html.fr pour une description du fonctionnement de NTP. Il est bien dit que NTP est conçu pour ne jamais revenir en arrière et utilise les appels systèmes permettant d'"accélérer" ou de "ralentir" le décompte du temps.


                .. mais on me demande pas à tout prix de le faire, on me demande si c'est envisageable et surtout utile mais moi, je pense dire non dans le pire des cas.
                Ben le fait d'être utile ou non dépend de ce qui va derrière. Ca dépend aussi du matériel présent sur le réseau. Faut voir aussi la dérive de l'horloge de ta carte qui te sert de base de temps .
                • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

                  Posté par  . Évalué à 0.

                  <<que se passe t'il si mes machines locales doivent attendre 55 minutes avant que cron relance la tache? et bien on va pas être à l'heure pendant 55 minutes
                  Pas exactement: si le décalage n'est pas énorme, ntp va 'rattraper' le coup.>>
                  Oui mais justement, mon célèbre scénario du pire cas fait que c'est une grande différence ;-)

                  <<Sinon NTP peut fonctionner en broadcast il me semble. Ce ne sont plus les stations qui demandent l'heure mais ton serveur qui diffuse>>
                  Ca serait bien une solution oui, je comptais m'y attaquer dès lundi au broadcast, multicast, et manycast que propose NTP


                  <<je pense que ce qu'on me demande n'est tout simplement soit pas faisable, soit pas indiqué avec le protocole NTP.
                  C'est aussi ce que je pense. Voir http://www.hsc.fr/ressources/breves/ntp-auth.html.fr pour une description du fonctionnement de NTP. Il est bien dit que NTP est conçu pour ne jamais revenir en arrière et utilise les appels systèmes permettant d'"accélérer" ou de "ralentir" le décompte du temps.>>
                  Moi j'ai bien lu l'article que tu dis plusieurs fois, et ce n'est pas le seul qui dit que NTP est conçu pour ne jamais revenir en arrière mais ça n'est pas vrai pour moi. En effet, NTP quand il y a une trop grande différence entre l'horloge de référence et l'horloge du serveur (> 1000 secondes par défaut) fait ce qu'il apelle un STEP ADJUSTEMENT, c'est à dire qu'il met à l'heure l'horloge d'un seul coup, pas en ralentissant ou en augmentant le décompte du temps... il est donc parfaitement possible de revenir en arrière dans ce cas là!


                  <<.. mais on me demande pas à tout prix de le faire, on me demande si c'est envisageable et surtout utile mais moi, je pense dire non dans le pire des cas.
                  Ben le fait d'être utile ou non dépend de ce qui va derrière. Ca dépend aussi du matériel présent sur le réseau. Faut voir aussi la dérive de l'horloge de ta carte qui te sert de base de temps .>>
                  C'est exactement ce que j'ai répondu dans un doc interne tout à l'heure décrivant mon avancement, c'est que dans ce scénario du pire cas, il contient à l'utilisateur de la carte (je rapelle qu'à terme, le serveur NTP se trouvera sur une carte embarquée) de garantir que son horloge est correct sinon, cela revient à foutre le modèle NTP en vrac. J'ai pris cette exemple, en gros, NTP est organisé en strate, chaque strate synchronisant la couche qui est en dessous et se synchronisant avec la couche qui est au dessus... et bien dans mon cas, ça revient à intercaler une strate foireuse au milieu ce qui, on le comprends naturellement est un peu abérrant!
                  Bon en tout cas merci pour tes réponses, là, c'est le week end, mais promis, dès lundi je donne des nouvelles de mon avancement, et notamment l'utilisation des options de broadcast et de multicast, vu que ça à l'air de t'interesser et je me dis surtout que si qq'un à le même problème par la suite, sera bien content de trouver ces quelques éléments!
                  • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

                    Posté par  . Évalué à 0.

                    juste une petite précision, c'est >120ms pour que NTP considère que c'est une grande différence. 1000seconde est la différence à partir de laquelle NTP refuse de faire quelque chose avec le serveur car il le considère comme invalide et se kille (durée modifiable avec l'option tinkier panic 0) que j'utilise pour permettre de mettre à jour même en cas de grande différence...
                  • [^] # Re: Et un module qui fournit l'heure par RS232 par exemple?

                    Posté par  . Évalué à 2.

                    Moi j'ai bien lu l'article que tu dis plusieurs fois, et ce n'est pas le seul qui dit que NTP est conçu pour ne jamais revenir en arrière mais ça n'est pas vrai pour moi. En effet, NTP quand il y a une trop grande différence entre l'horloge de référence et l'horloge du serveur (> 1000 secondes par défaut) fait ce qu'il apelle un STEP ADJUSTEMENT, c'est à dire qu'il met à l'heure l'horloge d'un seul coup, pas en ralentissant ou en augmentant le décompte du temps... il est donc parfaitement possible de revenir en arrière dans ce cas là!
                    Le fait qu'il ne soit pas conçu pour ne signifie pas qu'il n'est pas capable de le faire :)
                    un exemple: un couteau n'est pas conçu pour déserrer une vis, mais parfois, quand t'as pas de tournevis sous la main un couteau peut faire l'affaire :)
                    Et comme précisé la mise a jour brutale peut avoir un sens lorsque tu démarre un système qui n'a pas tourné pendant longtemps (et la dérive de son horloge est importante), ou un système dont la batterie assurant la sauvegarde de l'heure est HS (je l'ai déjà utilisé dans ce cas). Mais bon ca fait un moment que j'ai pas mis le nez dedans faudra que je rejette un oeil dans tout ça.
                    Sinon je suis assez d'accord avec ta conclusion.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.