NTPDの設定


サーバをインターネットに公開し、メールサーバを動かすとなるとサーバの時刻合わせは必須と言えます。動作確認には同期するまで少し時間がかかります(と言っても、5分はかかりませんが)が、設定はいとも簡単です。

おやじは長いこと福岡大学のサーバと MFEED (NTT、CRL、IIJ) のサーバに同期していましたが、最近よく同期が外れるな〜と思っていたら、おやじの所もそうですが福岡大学を例にしているサイトが多いことが原因と思いますが、福岡大学のサーバにトラヒックが集中していたようです。(http://www.itmedia.co.jp/news/articles/0501/21/news059.html) いったん同期が外れると、ポーリング周期が64秒に戻ってしまう(デフォルトなら安定すれば最大1024秒になる) ので、更にアクセスが増えるという悪循環を繰り返しますので、福岡大学への同期はやめることにしました。
平成18年6月12日からNICT(独立行政法人 情報通信研究機構)が毎秒100万リクエスト以上の処理能力を持つ世界最高性能のstratum1のNTPサービスを開始しましたので、それに同期させることにしました。

■NTPの設定

RedHat には、デフォルトでntpdがインストールされていますので、これを使いました。簡単に済ませるには、デスクトップのアプリケーションの起動から、日付と時刻の設定から設定できますが、ここでは、自分で設定することにしました。このツールでは設定できるサーバが1つのため、登録したntpサーバがダウンすると同期できなくなる他、精度上からも複数サーバ(といっても、2台あれば十分)を登録するほうが望ましい。

◆/etc/ntp.confの設定

ntpdの設定は、/etc/ntp.confで行います。

例によってエディタで簡単に設定をしています。(青字は削除、赤字は追加、緑字は変更したものです。)
同期するサーバとしては、こちらを参考に各自の環境に合わせて選択されるといいでしょう。福岡大学のNTPサーバの輻輳問題は、サーバにとっても問題ですが利用している側にとっても何もいいことはないので、極力負荷が分散するように利用者側で配慮すればいいはずですので、おやじは以下のようにしました。(2006/07/01 NICTを追加)

  1. stratum1のサーバはstratum2への基準となるサーバと考え、自宅サーバでは、それほどの精度も不要であることからアクセスはしない。自宅サーバならstratum2以下で十分であり、選択肢が増える分、トラヒック集中による福岡大学のような問題も回避できる。
    平成18年6月12日からNICTで毎秒100万リクエストの処理能力を持つstratum1のサービスが開始されたので、それを利用するとよい。
    NICTのサーバは以下のとおりであり、4つのアドレスで動作させているようです。

    • ntp.nict.jp ( 133.243.238.163 / 133.243.238.164 / 133.243.238.243 / 133.243.238.244 )
    • ntp-b2.nict.go.jp ( 133.243.238.163 )
    • ntp-b3.nict.go.jp ( 133.243.238.164 )
    • ntp-a2.nict.go.jp ( 133.243.238.243 )
    • ntp-a3.nict.go.jp ( 133.243.238.244 )


  2. 非公式サーバはいつ消えるかもわからないし、ISPのサーバは契約外のISPのものは使用しない。(当たり前か?)

  3. NTPの精度は、ネットワーク的に近くレスポンスが安定しているほうがよいので、第二優先順位としては契約ISPのサーバを選択する。

  4. 契約ISPにない場合は、公式サーバの中から選択するが、tracerouteしてみてhop数の少ないサーバを選択するとよい。ほとんどの方は、MFEED (NTT、CRL、IIJ) が共同実験で動かしているサーバが近いはず。

  5. 何箇所に同期してもサーバが同時障害になるよりは、自宅の回線が止まる確率のほうがはるかに高いことや無駄なトラヒックを減らす意味からも、おやじはNICTのstratum1のサーバ、契約ISPのstratum2のサーバとMFEEDの一台(ほんとうにラウンドロビンしているなら、全員が ntp1.jst.mfeed.ad.jp を指定しても問題ないが、各自の判断で他のサーバも含めて選択したほうがいいでしょう。 )のみに集約した。
    metaさんからMFEEDのラウンドロビンに関してこちらに記載されているとの情報を頂いたので、この内容に基づきMFEEDの一台は、ntp.jst.mfeed.ad.jp で指定した。皆さんがこのホスト名でアクセスすれば、MFEEDの3台のサーバにラウンドロビンでほぼ均等に負荷分散されると思われるので、MFEEDを使用されるのであれば是非この方法でアクセスされたらと思います。そのほうが、MFEEDを使用する全員が幸せになれますから。
    MFEEDの3台のサーバは以下のとおりです。(NICTも同様と思われます。)

    • ntp.jst.mfeed.ad.jp (210.173.160.27 / 210.173.160.57 / 210.173.160.87 )
    • ntp1.jst.mfeed.ad.jp (210.173.160.27)
    • ntp2.jst.mfeed.ad.jp (210.173.160.57)
    • ntp3.jst.mfeed.ad.jp (210.173.160.87)

この設定ですと、まずはstratum1のNICTに同期し次にプロバイダもMFEEDも stratum 2 なのでいずれかに同期し、両方駄目な場合は CMOS クロックに同期します。クライアントは桜時計で自宅 NTP サーバを設定してあり、正確に同期しています。

server ntp.nict.jp             #NICTのntpサーバ
server abc.defg.com            #プロバイダのntpサーバ
server ntp.jst.mfeed.ad.jp     #MFEEDのntpサーバ

server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /etc/ntp/drift

authenticate no

 

◆セキュリティ対策他

上記のままでも多くの環境では問題ありませんが、ntpdは一応セキュリティ対策ができるので対策をすることにしました。基本的には、こちらの設定のほうが間違いはありません。
ntpdは、自分自身に対してファイヤウォール的な設定(restrictによるアクセス制御)ができます。ここでのポリシーは、ntpdに対するアクセスは一旦全て拒否し、必要なアクセスのみ開放するというものです。設定内容は、下記のコメント行で分かると思います。
なお、restrictでのサーバ指定は、IPアドレス指定にしないと永遠に同期しません。server指定はどちらでも問題ありませんが、ここではIPアドレスとしました。 NICTやMFEEDをラウンドロビンでアクセスさせるため、ホスト名(ntp.nict.jpやntp.jst.mfeed.ad.jp)で指定しました。restrictのオプションの意味は以下のとおりです。
オプション

概 要

ignore 指定したサーバからのすべてのNTPアクセスを無視
noquery 指定したサーバからの時刻問い合わせパケットを無視
nomodify 指定したサーバからの設定変更要求パケットを無視
notrap 指定したサーバに対して状変時にトラップを上げない

設定例を以下に示します。

# デフォルトで全てのNTPアクセス拒否
restrict default ignore

# ローカルホストからはNTPアクセス許可
restrict 127.0.0.1

# 家庭内クライアントからの問い合わせ許可(ネットワーク指定の場合。ホスト単位でも可)
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# 外部のNTPサーバへのNTPアクセス許可(下記serverで指定したサーバを全て指定。
# NICTやMFEEDはラウンドロビンでどのサーバになるか不定のため全て記述すること。)
restrict 133.243.238.163 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.164 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.243 mask 255.255.255.255 nomodify notrap noquery
restrict 133.243.238.244 mask 255.255.255.255 nomodify notrap noquery
restrict xxx.xxx.xxx.xxx mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.27  mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.57  mask 255.255.255.255 nomodify notrap noquery
restrict 210.173.160.87  mask 255.255.255.255 nomodify notrap noquery

# 外部のNTPサーバの指定
server ntp.nict.jp         # NICTのNTP
server abc.defg.com        # プロバイダのNTP
server ntp.jst.mfeed.ad.jp # MFEEDのNTP

# 変動情報記録ファイルの指定(起動前にファイルがあることを確認。なければ作成しておく。)
driftfile /etc/ntp/drift

# 認証の指定(上位NTPサーバの認証キーがある場合は、yesとすることで認証可能)
authenticate no

 

■動作確認

ntpdは、サーバの時刻が現在時刻とあまり乖離していると、同期引き込みができないとのことです。従って、ntpdの起動に先立ちntpdateコマンドでサーバの時刻を手動で設定して置きます。ntpdateコマンドは、ntpdが動作していると使えないので、ntpd起動前にrootで適当なNTPサーバを利用して、下記コマンドを実行しておきます。

      # ntpdate 210.173.160.57    # ntp2.jst.mfeed.ad.jpで時刻修正する場合

 続いて、ntpdの起動は、コマンドで

 # /etc/rc.d/init.d/ntpd start

として、ntpデーモンを起動します。起動後、しばらくして

 # ntpq -p

として、以下のように先頭に'*'(*は同期用に選択されている表示)のほか'+'や'-'が表示されればOKです。同期するまで少し時間がかかり、その間は先頭は空白です。poll(NTPサーバへのポーリング間隔)は、最初は「64(秒)」から始まりますが、同期引き込みが完了して安定するとデフォルトで最大「1024(秒)」になります。
# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-a3.nict.go. .PPS.            1 u  103  128  377    9.455    0.088   0.824
+ntp2.jst.mfeed. 210.173.160.56   2 u   96  128  377    8.600    0.267   0.164
-abc.defg.       xxx.xxx.xxx.xxx  2 u   94  128  377    8.916   -1.002   0.265
 LOCAL(0)        LOCAL(0)        10 l   32   64  377    0.000    0.000   0.001

Top Pageへ