ある日、ntpdが時刻を上位サーバーから取れていないことが分かりました。
ErogameScapeではntpdの様子をmuninで監視しています。
以下に当時のmuninのグラフを示します。

グラフの線があるところが上位のNTPサーバーから時刻を取得出来ているところ、線がないところは取得出来ていないところです。
ntpqコマンドの実行結果は以下の通りでした。
正常な場合のコマンドの結果は以下の通りです。
ntpdを止めて、ntpdateを実行してみると以下のようになりました。
宛先ポートも123番、送信元ポートも123番です。
ntpdateコマンドは-uオプションをつけると非特権ポート…1024番以降のポートを送信元として問い合わせを実施します。-uオプションを使ってntpdateを実行すると、時刻が取れました。
おそらくになるのですが、プロバイダからこちらのNW向けのUDPの123番ポートが微妙に閉じられている…微妙というのは、グラフを見る限りたまに繋がったりしているので、動的に123番ポートが閉じたり開いたりしているのかもしれません。
ntpdは自身が使用するポート番号を変更できない…ソースを変更してコンパイルすれば出来るようなのですが、それはしたくないなあ…と思いました。
ntpdのかわりにchronydというNTPサーバーがあり、こちらは自身のポートは123番ポートを使用しない…おそらく非特権ポートを使うので、乗り換えることにしました。
chronydについては以下のドキュメントがいいかなと思います。
chronydを使って無事時刻を取得できるようになりました。
ちなみに、ntpdateのデバッグモードである-dオプションをつけると、ちゃんと時刻が取得できるように見えてしまうので、とても悩みました。
おそらく-dオプションをつけた場合、送信元ポートは123番ではなく、非特権ポートを使うのかな…と思います。
ErogameScapeではntpdの様子をmuninで監視しています。
以下に当時のmuninのグラフを示します。

グラフの線があるところが上位のNTPサーバーから時刻を取得出来ているところ、線がないところは取得出来ていないところです。
ntpqコマンドの実行結果は以下の通りでした。
$ /usr/sbin/ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ntp01.****.**.j ***.***.***.*** 2 u 13h 512 0 43.504 -8.250 0.000 ntp02.****.**.j ***.***.***.*** 2 u 10h 1024 0 16.760 0.650 0.000 ntp03.****.**.j ***.***.***.*** 2 u 11h 512 0 23.520 -0.850 0.000あるべき姿は、いずれかの行の先頭に*があることです。
正常な場合のコマンドの結果は以下の通りです。
$ /usr/sbin/ntpp -p remote refid st t when poll reach delay offset jitter ============================================================================== +ntp01.****.**.j ***.***.***.*** 2 u 139 64 144 10.949 -294.17 46.238 *ntp02.****.**.j ***.***.***.*** 2 u 334 64 140 11.410 -292.78 14.636 ntp03.****.**.j ***.***.***.*** 2 u 330 64 140 15.319 -275.40 20.041とりあえず、ntpサーバーを再起動すると、INITのままで、だいぶ時間がたっても、3つすべてINITのままとなるか、やっと1つだけ繋がる状態でした。
# /usr/sbin/ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ntp01.****.**.j .INIT. 16 u - 64 0 0.000 0.000 0.000 *ntp02.****.**.j ***.***.***.*** 2 u 49 64 1 9.308 0.609 0.000 ntp03.****.**.j .INIT. 16 u - 64 0 0.000 0.000 0.000通常はすぐにすべてrefidの部分はINITでなくなるはずなのです…
ntpdを止めて、ntpdateを実行してみると以下のようになりました。
# /usr/sbin/ntpdate -b ntp01.****.**.jp 2 Feb 22:17:44 ntpdate[32505]: no server suitable for synchronization foundntpdateもntpdもUDPの123番ポートを使ってNTPサーバーに問い合わせに行きます。
宛先ポートも123番、送信元ポートも123番です。
ntpdateコマンドは-uオプションをつけると非特権ポート…1024番以降のポートを送信元として問い合わせを実施します。-uオプションを使ってntpdateを実行すると、時刻が取れました。
# /usr/sbin/ntpdate -b -u ntp01.****.**.jp 2 Feb 22:17:36 ntpdate[32493]: step time server ***.***.***.*** offset -0.007014 sec自身のNW機器は特に変更していないので…一応、NW機器が悪さをしている可能性もあるので、PPPoEルータを再起動しましたが、疎通はNG、iptablesも外してみましたが疎通はNGでした。
おそらくになるのですが、プロバイダからこちらのNW向けのUDPの123番ポートが微妙に閉じられている…微妙というのは、グラフを見る限りたまに繋がったりしているので、動的に123番ポートが閉じたり開いたりしているのかもしれません。
ntpdは自身が使用するポート番号を変更できない…ソースを変更してコンパイルすれば出来るようなのですが、それはしたくないなあ…と思いました。
ntpdのかわりにchronydというNTPサーバーがあり、こちらは自身のポートは123番ポートを使用しない…おそらく非特権ポートを使うので、乗り換えることにしました。
chronydについては以下のドキュメントがいいかなと思います。
chronydを使って無事時刻を取得できるようになりました。
ちなみに、ntpdateのデバッグモードである-dオプションをつけると、ちゃんと時刻が取得できるように見えてしまうので、とても悩みました。
おそらく-dオプションをつけた場合、送信元ポートは123番ではなく、非特権ポートを使うのかな…と思います。
# /usr/sbin/ntpdate -d time1.google.com 1 Feb 20:52:36 ntpdate[17925]: ntpdate 4.2.6p5@1.2349-o Tue May 31 10:09:22 UTC 2016 (1) Looking for host time1.google.com and service ntp host found : time1.google.com transmit(216.239.35.0) receive(216.239.35.0) transmit(216.239.35.0) receive(216.239.35.0) transmit(216.239.35.0) receive(216.239.35.0) transmit(216.239.35.0) receive(216.239.35.0) server 216.239.35.0, port 123 stratum 2, precision -20, leap 00, trust 000 refid [216.239.35.0], delay 0.20763, dispersion 0.00116 transmitted 4, in filter 4 reference time: dc3c4a85.949cfffe Wed, Feb 1 2017 20:52:37.580 originate timestamp: dc3c4a85.949d0001 Wed, Feb 1 2017 20:52:37.580 transmit timestamp: dc3c4a85.76b5b1f9 Wed, Feb 1 2017 20:52:37.463 filter delay: 0.21288 0.21077 0.20763 0.21376 0.00000 0.00000 0.00000 0.00000 filter offset: 0.022838 0.025773 0.025351 0.022737 0.000000 0.000000 0.000000 0.000000 delay 0.20763, dispersion 0.00116 offset 0.025351 1 Feb 20:52:37 ntpdate[17925]: adjust time server 216.239.35.0 offset 0.025351 sec