コンピューターの時間は、ちょっとほっておくとすぐ狂ってしまいます。
時間が狂っていると、メール送信時刻や転送時のタイムスタンプがおかしなことになって恥ずかしいです。
それに、テレホーダイ時間には 2 回線接続するように MN128 SOHO SL11 の設定を cron で切り替えるようにしていたので、時間が狂っていると無駄に電話代が掛かってしまいます。※1
それにビデオデッキの時計を合わせるのにいちいち 117 の時報を聞く必要はなくなりますよ。:)
インターネットには、ntp (network time protocol) サーバという現在時刻を提供するサーバがあります。 インターネットの ntp
サーバに同期するように、ローカルにも ntp サーバを設置してしまいましょう。
そうすると、その他の PC はローカルの ntp サーバの時間を参照して自動的に時間を合わせるようにしてしまいます。
ここでの運用方針は、
私の場合、フレッツ ADSL を使ってエセ常時接続しているので常に時刻を同期させています。
常時接続できない場合には、ルータのフィルタで ntp ポート (port 123) へのパケットではダイアルアップしないようにしておけば、インターネットに接続されていれば同期する、接続されていなければ自分の時間を信じてサーバーとして稼動するようになります。
ここでは、上位の ntp サーバに clock.nc.fukuoka-u.ac.jp と clock.tl.fukuoka-u.ac.jp を使わせてもらって、設定していきます。上位の ntp サーバはなるべくネットワーク的に近いところを探してみてください。
FreeBSD には、二つの ntp プログラムが標準で含まれています。その一つが ntpdate です。
ntpdate は、他の ntp サーバから時間を取得して、自分の時間を合わせる働きをします。とりあえずコマンドラインで起動してみましょう。
# ntpdate clock.nc.fukuoka-u.ac.jp 10 Dec 15:12:23 ntpdate: step time server 133.100.9.2 offset -19.112674
19秒も時間が狂っていたようです。
では、これを利用して、マシン起動時に正確な時間に合わせるようにします。rc.conf で ntpdate を有効にし、ntpdate_flags に上位の ntp サーバ clock.nc.fukuoka-u.ac.jp を指定します。
denta:masaya./etc$ grep ntpdate /etc/defaults/rc.conf >>/etc/rc.conf # vi /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="clock.nc.fukuoka-u.ac.jp" # Flags to ntpdate (if enabled).
ここでは、clock.nc.fukuoka-u.ac.jp と FQDN※2 で指定しています。これは ntp のポートがダイアルアップトリガにならないように設定されていた頃のなごりで、DNS 問い合わせで回線を接続させるために IP アドレスでは指定していませんでした。
これで設定は終了。起動時に正確な時間に時計を合わせてくれるようになりました。
以前は、ダイアルアップルータ(MN-128SOHO)を使っていたのでよかったのですが、現状では、フレッツ ADSL のダイアルアップルータとして利用されるようになり、ppp
で回線を接続する前に ntpdate が実行されてしまうため ntpdate を使うのはやめました(再起動しないし・・・)。
ppp を使ってダイアルアップするなら、/usr/local/etc/ntpdate.sh などを用意して ppp 起動後に実行する必要があります。その場合、ntpd
もntpdate 終了後に起動するようにしなければいけません。
ntp サーバプログラム ntpd は、常に上位サーバを参照して時間を同期しながら、他の PC への時間の提供をおこなってくれます。
/etc/ に ntpd の設定ファイルを作成します。
参照先サーバとして、clock.nc.fukuoka-u.ac.jp と clock.tl.fukuoka.u.ac.jp を指定しています。ここには複数のサーバを指定してかまいません。一番信頼できると思われるサーバを自動的に選択して同期してくれます。
ここでの参照先サーバは、DNS パケットが飛ばないように IP アドレスで指定しておきます。
server 行 server 127.127.1.0 では、自分自身を参照先として指定しています。これは次の fudge にて階層番号を 5 としているので、参照される優先度は低くなっています。※3
次に、restrict 行で IPアドレス毎のルールを設定しておきます。
最後に、周波数補正用のドリフトファイルの保存先を指定します。これについてはよくわからないのですが、ドキュメントによるとドリフトファイルがないと時間誤差が収まるのに数時間かかるらしいので指定しておきます。
# vi /etc/ntp.conf server 133.100.9.2 #clock.nc.fukuoka-u.ac.jp server 133.100.11.8 #clock.tl.fukuoka-u.ac.jp server 127.127.1.0 fudge 127.127.0.1 stratum 5 restrict default ignore restrict 127.0.0.0 mask 255.0.0.0 restrict 192.168.1.0 mask 255.255.255.0 noquery nopeer notrust restrict 133.100.9.2 noquery restrict 133.100.11.8 noquery driftfile /etc/ntpd.drift
設定ができたら、さっそく起動してみましょう。
# ntpd -p /var/run/ntpd.pid
/var/log/messages を確認して、正常に起動したか確認しておきます。
# tail /var/log/messages Dec 10 16:11:24 denta ntpd[2417]: ntpd 4.0.99b Mon Nov 20 11:27:20 GMT 2000 (1) Dec 10 16:11:24 denta ntpd[2417]: using kernel phase-lock loop 2001 Dec 10 16:11:24 denta ntpd[2417]: using kernel phase-lock loop 2041
ntpd の動作確認は ntpq というコマンドで行います。
$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *clock.nc.fukuok .GPS. 1 u 188 512 377 85.419 -2.075 0.438 +clock.tl.fukuok .GPS. 1 u 195 512 377 87.690 -0.688 9.396 LOCAL(0) LOCAL(0) 3 l 54 64 377 0.000 0.000 0.000
起動後同期するまでにしばらく時間がかかります。
上記出力のように、* 記号が付いているサーバに同期しています。+ 記号は次候補として選択されているけど同期対象にはなっていないサーバです。
同期が完了したら他のマシンに時刻を提供することが出来るようになります。
正常に起動できることが確認できたら、rc.conf を書き換えて自動起動するようにします。
# grep ntpd /etc/defaults/rc.conf >>/etc/rc.conf # vi /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).
サーバと同じように ntpd を使ってローカルの ntp サーバに同期させればよいでしょう。
# vi /etc/ntp.conf server [local ntp server IP] prefer driftfile /etc/ntpd.drift
もしくは、cron で一定時間ごとに ntpdate を実行しても良いと思います。この例では、毎時 0 分に時刻修正を行います。
# vi /etc/crontab 0 * * * * root ntpdate [ntp server IP] >/dev/null 2>&1
桜時計などで ntp サーバに同期させるか、ustdate などを起動時や一定時間ごとに実行するようにすればよいと思います。
Windows2000 には sntp 機能があります。設定方法は Windows2000 memo に書いてあります。(でも、これって本当に時間合わせてるのかなぁ)