■ NTPサーバの設定 2010/03/01 更新
 NTPバージョン 4.1 以前と 4.2 以降で仕様が変わっています。 最新の情報は、本家の ntp.org を確認してください。
ntp.conf を解説するサイトには、ntp-4.1 以前の設定のものが多くあり、混乱させられます。 ちなみに、アクセス制限で使う restrict に 「notrust」 という設定がありますが、この挙動が変更になっています。 「notrust」 は認証を受けていない通信は拒否しますので、認証機能を設定しない場合は、一切のNTPパケットは無視されます。
 slew モードについて、 slew モードは緩やかな時刻補正を行うという事です。 step モードの場合は時刻補正の結果、時刻が逆行する可能性があります。 時刻が戻ることはありませんので、時系列に処理を行うプログラムがある場合、予期せぬ結果が起こる可能性があります。 slew モードの最大の特徴は、時刻の逆行が無いということです。 簡単に言うと、1秒を刻む間隔を変化させることで補正を行っています。 その分、正確な時刻になるまでに長時間かかります。
この設定の特徴
  1. 参照する上位NTPサーバは、『インターネットマルチフィード社』 と 『独立行政法人 情報通信研究機構』 とする。
  2. Linuxの場合、NTPデーモン起動時には、ntpdate による時刻強制同期が行われる。
  3. Solarisの場合、標準では step モードで動作する。
  4. Linuxの場合、標準では時刻のズレが 600秒 以上は step モード、それより小さい場合は slew モードで動作する。
  5. 認証機能は使用しない。 (インターネットには公開しないし、内部へのサービスだけなので特に必要ない)
  6. 起動時にハードウェアクロックへの書き込みを行う。
設定手順
  1. 設定ファイル編集①
    # vi /etc/ntp.conf    (Linux)
    # vi /etc/inet/ntp.conf (Solaris)
    緑:デフォルト、オレンジ:変更箇所
     
    restrict default ignore ※1
    restrict 127.0.0.1 ※2
    restrict 192.168.10.0 mask 255.255.255.0 kod nomodify notrap nopeer ※3
    restrict 192.168.100.0 mask 255.255.255.0 kod nomodify notrap nopeer

    ##### INTERNET MULTIFEED #####
    server 210.173.160.27      # ntp1.jst.mfeed.ad.jp ※4
    server 210.173.160.57      # ntp2.jst.mfeed.ad.jp
    server 210.173.160.87      # ntp3.jst.mfeed.ad.jp

    restrict 210.173.160.27 kod nomodify notrap nopeer noquery
    restrict 210.173.160.57 kod nomodify notrap nopeer noquery
    restrict 210.173.160.87 kod nomodify notrap nopeer noquery


    ##### NICT #####
    server 133.243.238.163     # ntp-b2.nict.go.jp ※4
    server 133.243.238.164     # ntp-b3.nict.go.jp
    server 133.243.238.243     # ntp-a2.nict.go.jp
    server 133.243.238.244     # ntp-a3.nict.go.jp
    restrict 133.243.238.163 kod nomodify notrap nopeer noquery
    restrict 133.243.238.164 kod nomodify notrap nopeer noquery
    restrict 133.243.238.243 kod nomodify notrap nopeer noquery
    restrict 133.243.238.244 kod nomodify notrap nopeer noquery

    ##### Peer Server #####
    peer 192.168.10.20 ※5
    restrict 192.168.10.20 kod nomodify notrap noquery


    #server 127.127.1.0 prefer
    server 127.127.1.0 ※6
    fudge 127.127.1.0 stratum 10 ※7

    driftfile /var/lib/ntp/drift (Linux) ※8
    driftfile /var/ntp/drift (Solaris) ※8

    authenticate no ※9
    keys /etc/ntp/keys ※9

    ====== Solaris の slew モード設定 ======
    slewalways yes ※10
    disable pll ※11
    ※1 restrict とは 「制限」 、ignore とは 「無視」 という意味です。 制限として無視することをデフォルトとします。
    よく使われる制御フラグ
     ignore   全てのNTPパケットを無視する
     kod   "Kiss of Death" 規定以上の頻度でアクセスを行うクライアントに通知される。 kod を受け取った
     クライアントはNTPサーバへのアクセスを停止する。
     nomodify   サーバーの状態を変更しようとすると ntpq および ntpdc クエリを拒否する。
     notrap   NTPのメッセージトラップを無効にする。
     nopeer   ピアを構成しない。
     noquery   サーバの状態に関する問い合わせ ( ntpq ) 、ntpdcクエリを拒否する。
     時刻情報のクエリには応答します。
     notrust   ntp-4.1以前 : 時刻問い合わせに応答するが、自身の時刻合わせには使用しない。
     ntp-4.2以降 : 認証を受けていないホストとのNTP通信は行わない。 時刻情報の提供も行わない。
    ※2 ローカルホスト(自分自身)からのアクセスを許可。
    ※3 NTPクライアントからのアクセスに対して、時刻情報の提供のみを行う。
    ※4 自分が参照する上位NTPサーバを指定。 あまり多くても意味はないが、物理的、ネットワーク的に異なるエリアの
    サーバを記述しておくと良いと思います。 決まりではないが、個人の方はプロバイダのNTPサーバを指定しよう。
    ntp.nict.jp
    ntp.jst.mfeed.ad.jp  

    『独立行政法人 情報通信研究機構』    
    『インターネットマルチフィード社』
    Stratum1サーバ
    Stratum2サーバ
    restrict のフラグは上位階層への時刻同期のみに制限する。
    ※5 組織内に同一階層のサーバが存在する場合に設定する。
    ※6 ローカルクロックの指定。 (IPアドレスではなく、同期先のデバイスによって第3オクテットの数値が異なる)
    prefer の記述があるサーバに優先して同期されるため、ローカルクロックから外す。
    ※7 ローカルクロックの階層を指定する。
    ※8 時刻補正の誤差を記録するファイルを指定。 1時間に1回補正情報が書き込まれる。
    ファイルが存在しない場合は作成し、NTPデーモン実行ユーザから書き込みができるようにしておく。
    デフォルトのパスは Linux と Solaris で異なる。
    ※9 NTPの認証機能を無効にする。 (内部ネットワークならこれで良いと思う・・・)
    認証機能を使用する場合に必要な、プライベートキーファイルを指定。
    ※10 Solaris で slew モードを設定する方法。
    ※11 128ms 以上のずれが発生していても、slew モードでの調整を続ける。 Solaris10 以降は指定しなくても良いらしい。
     
  2. 設定ファイル編集② (このファイルは Solaris にはありません。)
     起動スクリプトから読み込まれるファイルで、デーモンに渡すオプションなどを記載しておきます。
     起動スクリプトはサービス起動前に /etc/ntp/step-tickers に書かれたNTPサーバに ntpdate してくれます。
    # vi /etc/sysconfig/ntpd
    緑:デフォルト、オレンジ:変更箇所
     
    # Drop root to id 'ntp:ntp' by default.
    OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" ※1

    # Set to 'yes' to sync hw clock after successful ntpdate
    #SYNC_HWCLOCK=no
    SYNC_HWCLOCK=yes ※2

    # Additional options for ntpdate
    NTPDATE_OPTIONS="" ※3
    ※1 デーモンに渡すオプション。
    -x 通常 128ms より小さな時間差であれば slew モード、それ以上であれば step モードで動作するが、 このオプションにより、その境目を 600秒 として動作する。 また、このオプションがあると、起動の際に ntp.conf に記載されたNTPサーバに ntpdate してくれます。
    -u デーモンを実行するユーザとグループを指定。
    -p pidファイルのパスを指定する。
    ※2 "yes" にすると、起動時に実行する ntpdate が成功した場合にハードウェアクロックに書き込む。
    ※3 起動時に実行する ntpdate コマンドに渡すオプションを指定。
     
  3. サービスの起動設定
    ====== Linux起動設定 ======
    # chkconfig ntpd on
    # /etc/init.d/ntpd start
    ====== Solaris10 起動設定 ======
    # svcadm enable svc:/network/ntp:default
     

 ■ NTPサーバ動作確認 2010/03/01 更新
# ntpq -p
   remote      refid    st t when  poll reach  delay  offset jitter
=====================================================================================
 LOCAL(0)     .LOCL.      10 l  22   64  377  0.000  0.000  0.001
+ntp1.jst.mfeed.  fs-monntp1.mfee  2 u  679  1024  377  19.574  -0.409  4.674
+ntp2.jst.mfeed.  nttpf-isdn0.nic  2 u  621  1024  377  11.913  -4.319  0.729
*ntp3.jst.mfeed.  fs-monntp2.mfee  2 u  623  1024  377  44.231  11.979 17.332
testsv.      .INIT.      16 u  -   64   0  0.000  0.000  0.000
列の項目
 remote  参照先ホストが表示される。 左側にある "+" "*" は接続状態を示す。
 refid  参照先ホストが参照している、さらに上位のホストを表示。 "INIT" から変化が無いホストは接続不可。
 st  参照先ホストの階層を表示。 自分は同期先ホスト "+1" となる。 また、接続できない場合は "16u" と表示。
 t  参照先ホストとのNTPパケットの転送方法。 l = ローカル、u = ユニキャスト、m = マルチキャスト、b = ブロードキャスト
 when  参照先ホストと最後に通信を行ってからの経過時間を表示。 最大値 = poll 値
 poll  参照先ホストへのポーリング間隔。 時刻が安定してくると間隔は広がり標準で "1024" に達する。
 reach  参照先ホストへの到達性。 接続実績が増えると値が大きくなる。
 delay  参照先ホストに接続するための推定遅延時間(ミリ秒)
 offset  参照先ホストとの時間のズレ(ミリ秒)
 jitter  参照先ホストの時間のばらつき

タリーコード (remoteの左側に付く記号)
" " 参照先ホストとの通信ができない。 restrict や ファイアウォールなどで通信が遮られている場合もある。
x intersection検査で捨てられたホスト
. 参照先ホストの登録が多いため除外されている。
- クラスタリング検査で捨てられたピア。
+ 検査に合格しいつでも参照可能なホスト。
# 距離が遠いが参照可能なホスト。
* 現在参照しているホスト。 5回以上の時刻受信に成功し、reach の値が 37、77、177、377 となっている。
o 同期中のPPS信号サーバ

確認するポイント
  1.ホスト名の前に "*" が付いていること。 このサーバに同期しています。
  2.poll が出来るだけ大きいこと。 大きいほど時刻の変動が少なく安定していると考えてよい。
  3.refid が .INIT. から変化しないサーバは接続できないので他を設定する。
  4.ちなみにNTPサーバと通信が出来ない場合は、delay,offset,jitter が全て 0 になっている。

 ■ その他 2010/03/01 更新
  1. NTPサーバの設定が正しくても、参照しているNTPサーバが同期状態で無い場合は、自身のNTPサーバも
    同期することはない。 ntpq -p の情報は st16 のままになっている。
  2. 手動で ntpdate コマンドを使う場合は ntpd サービスを停止すること。 (両方とも udp/123 を使っているため)
  3. 手動でハードウェアクロックに書き込みを行う場合、hwclock -w 又は hwclock --systohc。
  4. ntpdate 実行時の応答メッセージ
     25 Sep 09:00:00 ntpdate[9460]: no server suitable for synchronization found
       ⇒NTPサーバに接続できない場合や同期先のNTPサーバが、さらに上位NTPサーバと同期していない。
     25 Sep 09:00:00 ntpdate[9464]: step time server 192.168.10.20 offset -0.806862 sec
       ⇒同期先のNTPサーバが、さらに上位NTPサーバと同期している。
  5. シスログに出力されるメッセージ
     Feb 28 17:29:05 testsv ntpd[2359]: sendto(192.168.100.10) (fd=-1): Bad file descriptor
       ⇒なんらかの要因で二重起動している時に定期的に表示される。