web-dev-qa-db-ja.com

NTPポーリングレートをカスタマイズするにはどうすればよいですか?

私は、セルラー接続で実行する組み込みマシンでUbuntuをセットアップしていますが、そこではバイトごとに支払います。また、マシンにはRTCバッテリーがないため、起動するたびにランダムな時間から起動します。

セルラー接続が利用可能になったときに時刻が同期され、ログメッセージなどがリアルタイムになるようにしたいのですが、NTPに腕と足を支払いたくありませんトラフィック。

NTPが時刻を更新する速度をカスタマイズできますか?現在、openntpdを使用していますが、私はそれと結婚していません。

起動時にインターネットが必ずしもアップしているわけではないため、ntupdateおよび関連する起動時は機能しません。そして、cronを介したスケジューリングは、スケジュールされたタスクが開始されるのを待つことを意味しますが、タイムデーモンはできるだけ早く時間同期を取得したいのです。

17
David Pfeffer

これらの回答のいくつかは、難読化されたntp構成コンテストに勝つ可能性があります。

Ntpリファレンス実装を使用し、iburstを使用して、起動時に迅速に時間を設定します。その後、minpollディレクティブを使用して、ntpdがリモートタイムサーバーに照会する頻度を制限できます。これにより、ntpdのクロック制御を利用して帯域幅を抑えることができます。

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 は、ntpリファレンス実装の優れた代替手段です。 Openntpdはそうではありません。

5
dfc

私の経験では、openntpdではなくntpを使用しています。

NTPプロトコルは通常、1分(64秒)ごとにパケットを送信することから始まりますが、通常は/ etc/ntpにある各サーバーに対して17分ごとに1パケットを送受信することで解決します。 confファイル。ただし、ネットワークの停止またはデバイスの不安定なクロックにより、これが増加する場合があります。各パケットは約68バイトのペイロードを持っているため、ポーリングごとに、おそらく各方向で100バイトを少し超えます。

ネットワーク稼働時のrdateとntpdateは、時間を設定するための良いアイデアです。そして、それがあなたが必要とするすべてであるならば、あなたのためにうまく働くべきです。

ただし、長時間にわたって時刻の同期を維持する必要がある場合は、ntpプロトコルがそのように設計されています。デバイスのクロックは、クリスタル制御のクロックを備えている可能性がありますが、温度の上昇または下降に応じて、少し速くまたは遅くなります。継続的な計時は、そのために調整することを目的としています。

継続的な計時が必要で、使用する帯域幅を減らしたい場合の提案を次に示します。 ntp.confのアイテムを参照します。

Iburstを使用しないでください。 (ただし、最初に時間を設定するには時間がかかります)。

ミンポールを6から上方に増やします(2 ^ 6秒は64秒です)。これにより、ネットワークが立ち上がった後にプロトコルが起動するときのトラフィックが減少します。

Maxpollを10から増やします(2 ^ 10秒は1024秒または約17分ごとです。17まで移動して36時間ごとにポーリングできます。私はこれを試していません。

組み込みデバイスから確実に到達できるサーバーがあれば、最小限のサーバーのみを使用してください。サーバーが多いほど、タイムキーピングの信頼性は高くなりますが、トラフィックが増大するため、トレードオフになります。

8
John S Gruber

セルインターフェイスが起動したときにntpdateを実行することで、いくつかのハッカーを実行できます。ただし、できれば、chronyをインストールする方がより適切な代替手段になります。これは ネットワークアクセスを断続的に念頭に置いて作成された です。

4
tm23

Ubuntuのデフォルトのインストールでは、NTPデーモンは実行されません。代わりに、/etc/network/if-up.d/ntpdateフックによってネットワークインターフェイスが起動されるたびに時間が設定されます。

一定の同期ではなく1回限りの時間同期を行っている場合は、これで十分かもしれません。

標準の/etc/ntp.confファイルまたは/etc/default/ntpdateNTPSERVERS変数を使用して、時間を設定するために照会するサーバーを制御できます。

3

おそらくすでにopenntpdのmanページを読んでいるでしょう。

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

おそらく、時間のあるポーリングオプションがないことにすでに気づいているでしょう。

私が提案できるこれらのハックがあります:

  1. Cronを介してntpdateを呼び出すだけで、ntpdを使用しないでください。
  2. Cronやセルラー接続スクリプトを使用して、iptablesルールを切り替えて、許可する場合にポート123のトラフィックをドロップまたは許可します。これは次のように簡単かもしれません

    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. 組み込みマシンにラジオクロックレシーバーを埋め込みます。私はこれについてほとんど何も知らないが、このような製品:

無線信号を受信できれば難しくないと思います。

Ntpが提供する正確で正確な同期が必要ですか?そうでない場合は、ブート時にrdateまたはntpdateを使用し、その後定期的にcronを使用して回避できる場合があります。

2
Pridkett

NTPは、TCPと同様に、プロトコルに組み込まれた深層理論と実践的経験があります。基本的なパラメーターを変更すると、設計された同期プロパティがなくなります。

デバイスが散発的に接続されている場合、おそらく古き良き RDATE が最適です。クロックスルーを処理したり、ピアアベレージングを処理したりすることはありません。また、中間者がしばらくの間価値がある場合にプレイできるさまざまな微妙なハッキングから保護することもできません。リモートサーバーから基準日を取得し、ハンマーでローカル時計を叩きます。しかし、それはあなたが望むときにそれを行い、その振る舞いは決定的です。

RDATEの精度はNTPの許容範囲をはるかに下回っています。±1秒以上は信頼できませんが、散発的にしか接続されていない場合、より正確なタイミングは関係ありません。確かに、 相対性 によれば、それは意味がないかもしれません。

1
msw

私の記憶が正しければ、ntpのポーリング間隔は最大1024秒に設定できます。おそらく最も簡単な解決策は、ブートごとにntpdateを実行し、その後は時々crontabから実行することです。

起動するたびに時計がランダムな時間で始まる場合は、おそらくntpdを実行できず、最初にntpdateを使用する必要があります。 Ntpdは、時計とサーバーの時計の差が大きすぎる場合、時刻の同期を拒否します。

1
BigWhale

minpool/maxpoolを考慮に入れるには、ntp.confサーバーごとを追加する必要があります。

NTPデーモンを混乱させることはお勧めできません(頻度を最適化するための組み込みのmathodがあります)が、次のようにこれらのオプションを追加する必要があります。

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

ここで、最小周波数を2 ^ 12秒に設定し、最大周波数を2 ^ 17秒に設定した場合。

デフォルトでは、NTPは1分ごとにリクエストを行うことがわかりました。それはあまりにも多すぎる。ここでは、頻度を1時間に1回から1日1回に(単純に)減らしました。