作成開始 : 平成20年02月17日(日)  最終更新日 : 平成22年02月27日(土)

時刻同期(ntpdate, ntp)を試す


自宅LAN内のサーバー機については、たまにログインして root になる時と週に一度の休息日に休息から起動後に root でログインして時刻を合わせる程度である。
それは、root の .cshrc に次を書いていることでできる。

ntpdate ntp.jst.mfeed.ad.jp

ちなみに nslookup すると

Name: ntp.jst.mfeed.ad.jp
Addresses: 210.173.160.87, 210.173.160.27, 210.173.160.57


・・・・と返ってくる。

しかし、この方法だと root でログインしなければ時刻を維持することができない。まして、古いわが家のサーバー機たちは時間が微妙に遅れてくるのだ。
そこで、FreeBSDでは標準で使える ntpdate と ntp で時刻同期を試みることにした。ntpd を動かす時刻同期サーバーは一番稼動時間が長いメールサーバーが動いているやつにした。

→こんな風にしてみます。


1.インターネット上の時刻同期サーバーの選択

(1)NICT 独立行政法人 情報通信研究機構 ntp.nict.jp (133.243.238.243, 133.243.238.244, 133.243.238.163, 133.243.238.164)
(2)国立天文台 gpsntp.miz.nao.ac.jp (133.40.41.135, 133.40.41.136, 133.40.41.134)
(3)東京大学 ntp.nc.u-tokyo.ac.jp (130.69.251.23)
(4)東北大学 ntp1.tohoku.ac.jp (130.34.11.117)
(5)東北大学 ntp2.tohoku.ac.jp (130.34.48.32)
(6)豊橋技術科学大学 ntp.tut.ac.jp (133.15.64.8)
(7)大阪府立大学 eagle.center.osakafu-u.ac.jp (157.16.213.52)
(8)広島大学 ntp.hiroshima-u.ac.jp (133.41.4.1)
(9)福岡大学 clock.nc.fukuoka-u.ac.jp (133.100.9.2)
(10)福岡大学 clock.tl.fukuoka-u.ac.jp (133.100.11.8)
(11)(せっかくなので)ぷらら ntp1.plala.or.jp (219.164.211.129)、ntp2.plala.or.jp (219.164.211.137)

2.時刻同期の方法

(1)NTPサーバーとなるPC(PC-9821Ne)には起動時に ntpdate で ぷらら ntp1.plala.or.jp (219.164.211.129) から時刻を取得する。
(2)NTPサーバーとなるPC(PC-9821Ne)はntpd により常に上位サーバを参照して時間を同期しながら、他の PC への時間の提供を行うようにする。
(3)他のFreeBSDおよびWindows、Linuxについては、起動時にLAN内NTPサーバーより時刻を取得する。
  さらに、cron や スケジューラ等により一定間隔で時刻取得を行う。

3.各PCの設定

(1)ntpdate
ntpdate は、他の ntp サーバから時間を取得して、自分の時間を合わせます。
・ntpdate で時刻を合わせてみましょう。
・そしたら、次は起動時に時刻同期するようにします。
まずはLAN内のNTPサーバーの設定をします。/etc/rc.conf に次を追加します。
ntpdate_enable="YES" # Run ntpdate to sync time on boot (or NO).
ntpdate_program="ntpdate" # path to ntpdate, if you want a different one.
ntpdate_flags="ntp1.plala.or.jp" # Flags to ntpdate (if enabled)
.
→起動時にntpdate実行

→上位の時刻サーバーを指定
これで起動時に指定したNTPサーバーから時刻を取得するようになります。
他のPCは起動時にこのLAN内のNTPサーバーから時刻を取得するように次のようにします。
なお、LAN内のNTPサーバーのIPアドレスは 192.168.1.7 と仮定します。(名前解決できていればコンピュータ名でもOK)
ntpdate_enable="YES" # Run ntpdate to sync time on boot (or NO).
ntpdate_program="ntpdate" # path to ntpdate, if you want a different one.
ntpdate_flags="
192.168.1.7" # Flags to ntpdate (if enabled).
→起動時にntpfate実行

→LAN内の時刻サーバーを指定
※/etc/rc.conf のサンプルは /etc/defaults/rc.conf にあります。
※Delegate機はネットワークにPCカードを使っており有効化が後になってしまうことから、上記の方法ではなく /etc/rc.local に以下を記述しました。
  
  ntpdate 192.168.1.7
(2)ntpd
ntp サーバプログラムである ntpd は、常に上位の時刻サーバを参照して時間を同期しながら、他の PC への時間の提供を行います。
・/etc/ntp.conf を新規に作成します。
server 219.164.211.129 # ntp1.plala.or.jp
server 219.164.211.137 # ntp2.plala.or.jp
server 130.34.11.117 # ntp1.tohoku.ac.jp
server 130.34.48.32 # ntp2.tohoku.ac.jp
server 127.127.1.0
fudge 127.127.0.1 stratum 5
restrict default ignore
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.0.0 noquery nopeer notrust
restrict 219.164.211.129 noquery
restrict 219.164.211.137 noquery
restrict 130.34.11.117 noquery
restrict 130.34.48.32 noquery
driftfile /var/ntp/ntpd.drift
参照先サーバー1
参照先サーバー2
参照先サーバー3
参照先サーバー4
自分自身も参照先にする
優先度は一番後
ディフォルトは応答しない。
ローカルホストからの問い合わせに応答
LAN内からの問い合わせに応答
NTPモード6,7のパケットを無視(?)
NTPモード6,7のパケットを無視(?)
NTPモード6,7のパケットを無視(?)
NTPモード6,7のパケットを無視(?)
周波数補正用のドリフトファイルの保存先(touchで作っておく)
・起動テストをしてみます。

 ↑
おぉ、どうやら正常に起動した模様です。
でも、「Un-parsable frequency in /var/ntp/ntpd.drift」が気になりますね。
ntpdで調べてみたら、ntpdを新規起動時に drift ファイルがあるとこうなるみたいです。
この時は /var/ntp/ntpd.drift は 0 バイトで touch した時のままでしたが、少したつと(どうやら1時間ごとに更新?)下のようになっていました。
・動作テストをしてみます。
起動後同期するまでに少し時間がかかります。
* 記号が付いているサーバに同期しています。+ とか - 記号は次の候補として選択されているが同期対象にはなっていないサーバです。
同期が完了したら他のマシンに時刻を提供することが出来るようになります。どれどれ!

 ↑
おぉーーー本当だ!時間同期できた。
・では、OS起動時に自動起動するようにしましょう。
rc.conf に以下を追加して自動起動するようにします。
xntpd_enable="YES" # Run ntpd Network Time Protocol (or NO).
xntpd_program="ntpd" # path to ntpd, if you want a different one.
xntpd_flags="-p /var/run/ntpd.pid" # Flags to ntpd (if enabled).
そして、リブートして ntpq -p と 他のPCから ntpdate して時刻同期が確認できたらOKです。
(3)クライアントPCの定期的な時刻同期
a.FreeBSD
/etc/rc.conf に記述して起動時に時刻同期するようにしましたが、その他に定期的な時刻同期を設定します。
時刻同期サーバーと同じように ntpd でもよいのですが、cron で 毎日 0時と12時にとることにしました。
/etc/crontab に次の記述を足しました。
# time every day 0:00 12:00
0 0,12 * * * root ntpdate 192.168.1.7 > /dev/null 2>&1
b.Windows
・Windows XP
スタート→コントロールパネル→日付と時刻で下のように設定(でも、これってコンピュータが立ち上がってインターネットに接続している時に一週間に一度だね)
・Windows Server 2003
これについては、Windows 以外の NTP サーバーと同期が成功しない場合があるそうです。
対処は Windows Server 2003 で Windows 以外の NTP サーバーとの同期が成功しない を参考にしてください。
・Windows2000 Pro と Windows2000 Server
Windows2000で時刻を自動的に合わせるには、Windows Timeサービスを自動起動にします。具体的には次のようにします。
そしてコントロールパネル→管理ツール→サービスとアプリケーション→サービスで、Windows Timeの「スタートアップの種類」を「自動」にします。

 ↑
でも、これって起動時だけ?・・・・・起動当初は45分くらいに1回など頻繁に同期するようですが、安定してくると8時間に1回だそうです。
レジストリでかなり細かく設定できるようです。
・他のWindows OS
桜時計とかのソフト使ってやるとよいでしょう。
AdjustPCなんかもいいでしょう。
C.Vine Linux

平成22年02月27日(土) 追記

PCカード型のネットワーク・カードを使った場合、NIC の認識が /etc/rc.conf の実行より後になるため、/etc/ntp.conf に書いたサーバーから時刻取得ができません。
なので次のようにしました。
・/etc/rc.conf に書いた以下の記述を削除
xntpd_enable="YES"; # Run ntpd Network Time Protocol (or NO).
xntpd_program="ntpd"; # path to ntpd, if you want a different one.
xntpd_flags="-p /var/run/ntpd.pid"; # Flags to ntpd (if enabled).
・/usr/local/etc/rc.d (どこでもいいが・・・)に以下を記述したファイル ntpd_run を準備
sleep 5
ntpd -p /var/run/ntpd.pid
・/etc/rc.local に以下を記述
sh /usr/local/etc/rc.d/ntpd_run
これでOS起動の最後に実行されるので無事に同期しました。

戻る

サイトトップへ