NTPDの設定(SuSE編)


サーバをインターネットに公開し、メールサーバを動かすとなるとサーバの時刻合わせは必須と言えます。動作確認には同期するまで少し時間がかかります(と言っても、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の設定

SuSE には、デフォルトで ntpd がインストールされていますのでこれを使いました。
なお、SuSE の ntpd は デフォルトで chroot で動作しています。

◆基本的な設定

ntpd の基本的な動作の設定は、YaST でできます。設定内容は、/etc/ntp.conf に反映されます。
同期するサーバとしては、こちらを参考に各自の環境に合わせて選択されるといいでしょう。福岡大学のNTPサーバの輻輳問題は、サーバにとっても問題ですが利用している側にとっても何もいいことはないので、極力負荷が分散するように利用者側で配慮すればいいはずですので、おやじは以下のようにしました。

  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も同様と思われます。)

    • 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)


上記を元に、YaSTで実際の設定を行っていきます。

  1. YaST コントロールセンタを起動し、「ネットワーク・サービス」の「NTP クライアント」を起動する。
  2. まず、「NTP デーモンを自動的に起動する」を、「システム・ブート時」に変更する。デフォルトは「起動しない」である。
  3. 続いて、同期するサーバを登録していくが、初期設定ではソースタイプとして「ローカル CMOS」、アドレス「127.127.1.0」が設定されているので、これに追加設定していく。
  4. 同期するサーバを追加するには、 「追加」ボタンを押し、項目タイプとして「サーバ」を選択、「次へ」ボタンを押して、アドレス欄に追加したいサーバのホスト名(アドレス)を入力し、オプション欄は空欄のまま「了解」ボタンを押す。NICTを指定する場合は「ntp.nict.jp」を指定し、MFEEDを指定する場合はラウンドロビン用の「ntp.jst.mfeed.ad.jp」で指定する。なお、追加登録したサーバのいずれかの登録の時に、「初期同期に用いる」にチェックを入れる。これは、ntpdはサーバの時刻(CMOSクロック)が現在時刻とあまり乖離していると同期引き込みができないので、ntpd の起動に先立ち ntpdate コマンドでサーバの時刻を強制的に設定するためのものなので忘れずに設定すること。
  5. 全て、設定が終了したら「完了」ボタンを押すと、設定が反映され ntpd が起動する。動作確認については、こちらを参照のこと。
この設定ですと、まずはstratum1のNICTに同期し次にプロバイダもMFEEDも stratum 2 ですのでいずれかに同期し、両方駄目な場合は CMOS クロックに同期します。クライアントは桜時計で自宅 NTP サーバを設定してあり、正確に同期しています。
参考までに、この状態での/etc/ntp.conf の内容を以下に示します。

server 127.127.1.0
fudge  127.127.1.0 stratum 10
server ntp.nict.jp          # NICTのNTPサーバ
server abc.defg.com         # プロバイダのNTPサーバ
server ntp.jst.mfeed.ad.jp  # MFEEDのNTPサーバ
driftfile /var/lib/ntp/drift/ntp.drift
logfile /var/log/ntp

 

◆セキュリティ対策他

上記のままでも多くの環境では問題ありませんが、ntpd は一応セキュリティ対策ができるので対策をすることにしました。基本的には、こちらの設定のほうが間違いはありません。
ntpd の基本的な設定はYaST でできますが細かい設定はできませんので、おやじは自分で設定しました。下記設定例の restrict コマンドは、YaST で変更しても消えることはありませんので、サーバの設定等に YaST を使用しても大丈夫です。
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.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

# CMOSクロックの指定(デフォルトのまま)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

# 変動情報記録ファイルの指定(デフォルトのまま)

driftfile /var/lib/ntp/drift/ntp.drift

# ログファイルの指定(デフォルトのまま)
logfile /var/log/ntp

 

動作確認

ntp デーモンを YaST もしくは 「/etc/init.d/xntpd start 」として起動します。起動後、しばらくして

 # 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へ