サーバ関係はずっとFreeBSDで生きているわけですが、いまの職場に移ってきてすごく困ったことのひとつが、外部からのUDP/123が閉じられていること。FreeBSDとか、多くのUnix系OSに含まれているntp.org版のntpdでは、これだと外部のNTPサーバと同期することができません (学内のNTPサーバにも届かない…!)。
それで、いままでどうしていたかというと、ローカルのNTPサーバになるホストをntpdate -u で毎晩外部のNTPサーバと同期させて、あとはそのホストを参照していたわけですが、なぜか突然動かなくなりまして、ntpq -p しても、LOCAL(0) へのreachが0とかなんなの… という状態。ntpdがちゃんと動いているか、動いてないならなんでダメなのか、ログをいろいろあたっても全然わからず。
それで、とりあえずntpdでの外部のサーバへのアクセスがntpdate -u相当 (非特権ポートでのアクセス)になればいいんじゃないの、と思ったけれども、どうやらそれはできないようです。
解決策をいろいろ調べていたら、”openntpdならできるよ!” みたいな記事がちらほら。OpenSSH的に、OpenBSDのプロジェクトの一部として開発されているそうです。たしかに、ntp.orgなntpdはときどきセキュリティホールが見つかったりしてて、ドキドキすることもあるしなあ。OpenBSDらしく、シンプルに堅牢に、ということだそうで、設定ファイルは誰を参照してどのアドレス/ポートをListenするか、ということくらい(あと、何かセンサを持ってる人はそれも)。
マイクロ秒単位での正確性という面ではntp.orgの実装のほうが上だそうですが、うちは別にmakeがおかしくならなければいいよ、という程度なので、精度的には充分です。設定ファイルは簡単で、
listen * server ntp1.hogehoge.org server ntp2.hogehoge.org
みたいに書いただけで動きました (どうせ firewall でいろいろきってるので、listen * でOK)。超ステキ。ntpq -p 相当の、いまどこと同期がとれてるかは、
% ntpctl -s all
で見られます。見ていると、安定してきたら外部のサーバをpollingしにいく間隔も長くなるようですし、これはトラフィックの軽減というポイントからは非常にいいですね。
それから、当然NTP準拠なので、Macをはじめ、ローカルのNTPクライアントの設定はそのままで動きます。これからはこれでいこう。