2007/02/02

NTPDの謎

NTPDは、その実現する機能の割には設定が難しいソフトウェアの一つだ。とは言うものの、普通に使う分には、ネットで検索すればまあ動くものが出来上がる。しかし、未だに解決できない問題が二つある。
  • ブロードキャスト/マルチキャストによる同期
  • サブインターフェースを持たせた場合の動作
がそれだ。

前者は、いろいろやってみたが良くわからない。サーバがブロードキャストアドレスでNTPパケットを流すところまではできたのだが、クライアントの設定が不明だ。

後者の問題はこうだ。NTPサーバとなるマシンntp1がインターフェースeth0を持っている。このインターフェースにサブインターフェースeth0:1およびeth0:99を作成し、それぞれ192.168.1.1/24および192.168.1.99/24を割当てる。このとき、NTPクライアントとなる他の機器server1で、NTPサーバを192.168.1.99を指定すると、同期が取れない場合がある。特に、server1とntp1の間にファイアウォールがある場合などに問題になる。
この原因は判っていて、NTPサーバが192.168.1.99宛に届いた問合パケットに対して、応答パケットが192.168.1.1から出て行くからだ。つまり、こういうことだ。サーバserver1のアドレスを192.168.254.1としよう。さらに、ソースアドレスsとデスティネーションアドレスdを持つパケットを[s=>d]と表すとする。このケースでは、問合パケットは、[192.168.254.1=>192.168.1.99]になり、応答パケットには、ソースとデスティネーションを逆転させた[192.168.1.99=>192.168.254.1]が期待される。だが、これが何故か[192.168.1.1=>192.168.254.1]になってしまう。
NTPクライアント側は、自分が送信先に指定したサーバからの応答があると期待しているので、それとは違うソースアドレスからのパケットは無視する。もしserver1とntp1の間にステートフルなファイアウォールが存在すれば、応答パケットが問合せパケットに対応するものだとは理解できないので、おそらく応答パケットは破棄されてしまう。

どちらもまだ解決方法を知らない。

解決篇「NTP broadcast設定」

0 件のコメント: