Wie passe ich die NTP-Abfragerate an?

17

Ich richte Ubuntu auf einem eingebetteten Computer ein, der über eine Mobilfunkverbindung läuft, wobei wir pro Byte zahlen. Die Maschine hat auch keine RTC-Batterie, so dass sie bei jedem Start ab einem zufälligen Zeitpunkt startet.

Ich möchte sicherstellen, dass die Zeit synchronisiert wird, wenn die Mobilfunkverbindung verfügbar ist, sodass Protokollnachrichten usw. Echtzeit haben, aber ich möchte auch keinen Arm und kein Bein für NTP-Verkehr bezahlen.

Kann ich die Rate anpassen, mit der NTP die Uhrzeit aktualisiert? Ich verwende derzeit openntpd, bin aber nicht damit verbunden.

Das Internet ist nicht unbedingt beim Booten verfügbar, daher funktionieren ntupdate und die dazugehörigen beim Start nicht. Und das Planen über cron bedeutet, auf die geplante Aufgabe zu warten, während ich möchte, dass ein Zeitdämon so schnell wie möglich eine Zeitsynchronisierung erhält.

David Pfeffer
quelle

Antworten:

5

Einige dieser Antworten könnten den verschleierten ntp-Konfigurationswettbewerb gewinnen.

Verwenden Sie die NTP-Referenzimplementierung und verwenden Sie iburst, um die Zeit beim Booten schnell einzustellen. Danach können Sie die minpoll-Direktive verwenden, um zu begrenzen, wie oft ntpd entfernte Zeitserver abfragt. Auf diese Weise können Sie die Taktdisziplin von ntpd nutzen und die Bandbreite niedrig halten.

minpoll minpoll
maxpoll maxpoll
    These options specify the minimum and maximum poll intervals for NTP 
    messages, in seconds as a power of two. The maximum poll interval 
    defaults to 10 (1024 s), but can be increased by the maxpoll option to 
    an upper limit of 17 (36 h). The minimum poll interval defaults to 6 (64 s), 
    but can be decreased by the minpoll option to a lower limit of 3 (8 s).

Chrony ist eine gute Alternative zur NTP-Referenzimplementierung. Openntpd geht nicht.

dfc
quelle
8

Meine Erfahrung ist eher mit NTP als mit OpenNTPD.

Sie sollten wissen, dass das NTP-Protokoll in der Regel mit dem Senden von Paketen jede Minute (64 Sekunden) beginnt, sich jedoch in der Regel durch das Senden und Empfangen eines Pakets alle 17 Minuten für jeden Server einstellt, den Sie in Ihrer Datei /etc/ntp.conf haben. Netzwerkausfälle oder eine instabile Uhr in Ihrem Gerät können dies jedoch verstärken. Jedes Paket hat eine Nutzlast von ungefähr 68 Bytes, das sind also wahrscheinlich etwas mehr als 100 Bytes pro Abfrage.

Das rdate und das ntpdate zur Netzwerkbetriebszeit sind gute Ideen zum Einstellen der Uhrzeit. Und wenn das alles ist, sollten Sie gut für Sie arbeiten.

Wenn Sie die Zeit jedoch über einen längeren Zeitraum synchron halten müssen, wurde das ntp-Protokoll dafür entwickelt. Die Uhr in Ihrem Gerät läuft ein wenig schnell oder langsam, je nachdem, wie warm oder kalt es wird, obwohl es wahrscheinlich eine kristallgesteuerte Uhr hat - und die fortlaufende Zeitmessung soll sich darauf einstellen.

Hier sind einige Vorschläge, wenn Sie eine kontinuierliche Zeitmessung benötigen und die genutzte Bandbreite reduzieren möchten. Sie beziehen sich auf Elemente in der Datei ntp.conf.

Verwenden Sie kein Iburst. (Das Einstellen der Uhrzeit dauert jedoch länger.)

Erhöhen Sie den minpoll von 6 nach oben (2 ^ 6 Sekunden sind 64 Sekunden). Dies reduziert den Datenverkehr, wenn das Protokoll nach dem Hochfahren des Netzwerks gestartet wird.

Erhöhen Sie den Maxpoll von 10 aufwärts (2 ^ 10 Sekunden sind 1024 Sekunden oder ungefähr alle 17 Minuten. Sie können bis zu 17 Sekunden erreichen, um ungefähr alle 36 Stunden abzufragen. Ich habe es selbst nicht versucht.

Verwenden Sie nur eine minimale Anzahl von Servern. Wenn Sie einen Server hatten, der zuverlässig von Ihren eingebetteten Geräten aus erreichbar ist, wäre das großartig gewesen. Je mehr Server vorhanden sind, desto zuverlässiger kann die Zeitmessung sein, der Datenverkehr nimmt jedoch zu, sodass ein Kompromiss entsteht.

John S Gruber
quelle
3

Bei einer Standardinstallation von Ubuntu wird der NTP-Dämon nicht ausgeführt. Stattdessen wird die Uhrzeit jedes Mal eingestellt, wenn eine Netzwerkschnittstelle vom /etc/network/if-up.d/ntpdateHook aufgerufen wird.

Wenn Sie nach einer einmaligen Synchronisierung anstatt nach einer ständigen Synchronisierung suchen, ist dies möglicherweise ausreichend für Sie.

Sie können steuern, welche Server abgefragt werden, um die Uhrzeit entweder über die Standarddatei /etc/ntp.confoder über die NTPSERVERSVariable in festzulegen /etc/default/ntpdate.

James Henstridge
quelle
2

Benötigen Sie die exakte und präzise Synchronisation, die ntp bietet? Wenn nicht, können Sie mit rdateoder ntpdatebeim Booten davonkommen und dann regelmäßig über cron.

Pridkett
quelle
2

Sie haben wahrscheinlich bereits die openntpd-Manpage gelesen.

http://www.openbsd.org/cgi-bin/man.cgi?query=ntpd.conf

Sie haben wahrscheinlich schon bemerkt, dass es für die Zeit keine Wahlmöglichkeit gibt.

Ich habe diese möglichen Hacks vorzuschlagen:

  1. Verwenden Sie kein ntpd, sondern rufen Sie ntpdate über cron auf.
  2. Verwenden Sie cron und / oder Ihre zellularen Verbindungsskripte, um die iptables-Regeln umzuschalten, um den Datenverkehr von Port 123 zu löschen oder zuzulassen, wenn Sie dies zulassen möchten. Das könnte so einfach sein wie

    0 12 * * * iptables -D OUTPUT -j DROP -p udp --dport 123 # at noon start allowing ntp

    0 13 * * * iptables -A OUTPUT -j DROP -p udp --dport 123 # at 1pm stop allowing ntp

  3. Binden Sie einen Funkuhrempfänger in Ihr Embedded-Gerät ein. Ich weiß fast nichts darüber, aber Produkte wie diese:

lass mich denken, dass es nicht schwierig ist, wenn du das Funksignal empfangen kannst.

Jay _silly_evarlast_ Wren
quelle
1
Wenn Sie Hardware hinzufügen möchten, warum sollten Sie eine Funkuhr empfehlen und kein GPS mit PPS hinzufügen?
DFC
@dfc guter Punkt. OP, Betrachten Sie GPS-Hardware, um Zeit zu bekommen.
Jay _silly_evarlast_ Wren
1
Für $ 50 (Sicher, GPS ist es sehr viel) und etwas Löten habe ich einen Schicht-1-Zeit-Server im Gästezimmer. Ich habe die Sure GPS-Antenne in einem Fenster, das von einem riesigen Ahorn und einem anderen Haus verdeckt wird, und sie funktioniert gut.
DFC
@dfc können Sie auf Hardware verlinken und welche Software verwenden Sie mit der Hardware?
Jay _silly_evarlast_ Wren
1
@Jay_silly_everlast_Wren Software: NTP-Referenzimplementierung www.ntp.org Board: sureelectronics.net/goods.php?id=99 Einige Diskussionen: satsignal.eu/ntp/Sure-GPS.htm und lists.ntp.org/pipermail/questions /2011-März/028854.html Es gibt noch viel mehr. Lassen Sie sich vom Löten nicht abschrecken. Es war mein erstes Mal gelötet und es war einfach. Die Mailingliste von ntp questions ist voll von Leuten, die das sichere Forum benutzt haben und sehr zufrieden damit sind.
DFC
1

Wenn ich mich richtig erinnere, kann das NTP-Abfrageintervall auf maximal 1024 Sekunden eingestellt werden. Die einfachste Lösung wäre vielleicht, ntpdate bei jedem Start und später von Zeit zu Zeit von crontab aus auszuführen.

Wenn Ihre Uhr bei jedem Start mit einer zufälligen Zeit startet, können Sie ntpd wahrscheinlich sowieso nicht ausführen und müssen zuerst ntpdate verwenden. Ntpd weigert sich, die Zeit zu synchronisieren, wenn der Unterschied zwischen Ihrer Uhr und der Uhr des Servers zu groß ist.

Großwal
quelle
+1 für die Info, dass NTP die Synchronisierung verweigert, wenn die Abweichung zu groß ist
David Pfeffer
ntpdate wird zugunsten von Optionen abgelehnt, bei ntpddenen dieser Anwendungsfall besser gehandhabt wird als crondies eecis.udel.edu/~mills/ntp/html/ntpdate.html
msw
1

Wie TCP verfügt auch NTP über tiefgehende Theorie und praktische Erfahrung, die in das Protokoll integriert sind. Wenn Sie die grundlegenden Parameter ändern, werden die Synchronisierungseigenschaften, für die es entwickelt wurde, nicht mehr verwendet.

Wenn Ihr Gerät nur sporadisch angeschlossen ist, ist der gute alte RDATE möglicherweise der beste Dienst. Es kann weder im Uhrzeigersinn gedreht noch mit Peer-Mitteln verglichen werden, noch kann es gegen verschiedene subtile Hacks gesichert werden, die ein Mann in der Mitte spielen könnte, wenn es sich lohnt. Es erhält nur ein Referenzdatum von einem Remote-Server und schlägt mit einem Hammer auf die lokale Uhr. Aber es tut es, wenn Sie es wollen, und sein Verhalten ist deterministisch.

Die RDATE-Genauigkeit ist weitaus schlechter als es NTP bietet. Ich würde es nicht besser als ± 1 Sekunde anvertrauen, aber wenn Sie nur sporadisch verbunden sind, ist ein genaueres Timing nicht relevant. in der Tat könnte es der Relativität nach nicht einmal von Bedeutung sein.

msw
quelle
0

Um das minpool/ maxpoolzu berücksichtigen, müssen Sie dann pro Server in Ihrem hinzufügen ntp.conf.

Es ist nicht ganz empfehlenswert, sich mit dem NTP-Deamon zu messen (es verfügt über ein eingebautes Mathod, um die Frequenz zu optimieren), aber Sie müssen diese Option wie folgt hinzufügen:

server time.google.com iburst minpoll 12 maxppol 17
server ntp.ubuntu.com iburst minpoll 12 maxppol 17
server europe.pool.ntp.org iburst minpoll 12 maxppol 17

Wenn Sie hier die minimale Frequenz auf 2 ^ 12 Sekunden und die maximale auf 2 ^ 17 Sekunden einstellen.

Standardmäßig fand ich heraus, dass das NTP jede Minute oder so eine Anfrage stellen würde. Das ist viel zu viel. Hier habe ich die Frequenz von einmal pro Stunde auf einmal pro Tag reduziert (grob).

le hollandais volant
quelle