FreeBSD 7.1Rで時刻を合わせるNTPサーバ

外部NTP(Network Time Protocol)サーバから正確な時刻を取得して自機に設定する。また、LAN内の他のクライアントから同期するために使うこともできる。つまり、クライアントとして動作し、さらに、サーバとしても動作する。

NTPサーバはプロバイダから公開されているものを使うようにする。見つからない場合は公開サーバを利用するのも手だが、公開サーバを利用する者一人一人が将来的な過負荷を引き起こさないように配慮する必要がある。

まずは、ntpdateで、単発的に合わせておく

ntpdate を利用することで、単発で現在時刻を合わせることができる。

  • この説明は、ntpd ではない。ntpd については、次節から記載する。
  • ここでは、NTPサーバのドメイン名を ntp.nict.jp と仮定する。

まず、現在時刻の確認。

su
Password:
# date
Wed Feb 11 08:07:07 JST 2009

数時間ずれているようなので、ntpdate を使ってみる

  • ntp.nict.jp は例であり、実際にはご利用プロバイダのNTPサーバなどを使うこと。
# ntpdate ntp.nict.jp
# date
Web Feb 11 17:11:15 JST 2009

ntpd で、NTPサーバに同期する

上記の ntpdate は、放置しておけば、いずれまた時刻に差がでてくる。

ntpd を動かしておくと 外部(プロバイダなど)のNTPサーバに同期して時刻を補正する。また、LAN側にある他のローカル・コンピュータから、NTPサーバとして利用できるようになる。

ntpd 実行直後はすぐに時刻が一致しないが、いずれ一致するので気長に待つ。

/etc/default/rc.conf には、下記の内容が記述されている(と思う)ので、確認だけしておく。

この設定がデフォルトとなり、変更したい部分だけを /etc/rc.conf に記述すればよい。

ntpd_enable="NO"
ntpd_program="/usr/sbin/ntpd"
ntpd_config="/etc/ntp.conf"
ntpd_sync_on_start="NO"
ntpd_flags="-p /var/run/ntpd.pid -f /var/db/ntpd.drift"

/etc/rc.conf で ntpd を有効にする

# vi /etc/rc.conf

/etc/rc.conf の中に次の2行を加える。ファイル末尾でよい。

ntpd_enable="YES"
ntpd_sync_on_start="YES"
  • ntpd_sync_on_start : 起動時に ntpd 同期するか、否か。
  • LOGを取得したい場合は、ntpd_flags=”-p /var/run/ntpd.pid -f /var/db/ntpd.drift -l /var/log/ntpd.log” などとすればよいが、まぁ、どうでもいい。

/var/db/ntpd.drift を作っておくこと

/etc/default/rc.conf の設定内容に合わせて、あらかじめ次のコマンドを実行して、/var/db/ntpd.drift ファイルを作成しておく。

%su
Password:
# cd /var/db
# touch ntpd.drift
# ls -al

/etc/ntp.conf

# vi /etc/ntp.conf

次の内容を記述する。

同期先のNTPサーバを1つだけ指定しておいた場合、万が一そのサーバが停止したまま気がつかないと、これまたntpdの意味がない。そこで、同期先のNTPサーバは2~3個設定しておいたほうがよい。

外部のNTPサーバのみに同期する場合

ここでは説明用に、NTPサーバのドメイン名を下記の3つと仮定する。あくまでも仮定である。

  1. ntp1.jst.mfeed.ad.jp
  2. ntp2.jst.mfeed.ad.jp
  3. ntp3.jst.mfeed.ad.jp
  • restrict は、他サーバからの同期を許可・拒否するための設定であり、何も記述しなければ想定外のクライアントから参照可能になる。
  • 同時に、192.168.0.0/24 のネットワーク空間に対して、このNTPサーバを参照できるように設定する。
## 同期の許可・拒否の設定
# この行より下の内容に一致しないもの全てに、応答しない。
restrict default ignore

# 127.0.0.1 からのパケットは許可する。
# これを書いておかないと ntpq と ntpdc コマンドを受け付けなくなる。
restrict 127.0.0.1

# ntp1~ntp3 からのパケットには、いくつかの制限をして応答する。
restrict ntp1.jst.mfeed.ad.jp noquery nomodify notrap
restrict ntp2.jst.mfeed.ad.jp noquery nomodify notrap
restrict ntp3.jst.mfeed.ad.jp noquery nomodify notrap
# ローカルクライアントからのパケットには、いくつかの制限をして接続を許可する
restrict 192.168.0.0 mask 255.255.255.0 noquery nomodify

## 自分自身が同期するNTPサーバを設定
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

LAN内のNTPサーバに同期する場合

LAN内に ntpd が設定済みのNTPサーバが有る場合は、そのIPアドレスを指定してもよい。参考までに、192.168.0.222 というNTPサーバが存在することを前提にして、ntpd を、それとは別のコンピュータに設定する例を下記に示す。

(確認済み。OK。)

## 同期の許可・拒否の設定
# この行より下の内容に一致しないもの全てに、応答しない。
restrict default ignore

# 127.0.0.1 からのパケットは許可する。
# これを書いておかないと ntpq と ntpdc コマンドを受け付けなくなる。
restrict 127.0.0.1

# 192.168.0.222 からのパケットは、いくつかの制限をして応答する。
restrict 192.168.0.222 noquery nomodify
# ntp1~ntp3 からのパケットには、いくつかの制限をして応答する。
restrict ntp1.jst.mfeed.ad.jp noquery nomodify notrap
restrict ntp2.jst.mfeed.ad.jp noquery nomodify notrap
restrict ntp3.jst.mfeed.ad.jp noquery nomodify notrap

## 自分自身が同期するNTPサーバを設定
# 優先して同期したいNTPサーバ
server 192.168.0.222 prefer
# 優先を考慮しないNTPサーバ
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
  • 上位階級NTPサーバは、下位階級NTPサーバを参照してはいけない。ntpq -p で st の数値が大きいほど下位。

再起動とntpd起動の確認

ここまで設定したら、FreeBSD 7.1R をリブートする。

# reboot

参考までに、ntpdだけの再起動は

# /etc/rc.d/ntpd restart

起動したら、実行プロセスを確認する。

# ps aux | grep ntpd

その後、次のコマンドで状態を確認。同期したら * がつく。

# ntpq -p

もし、FreeBSD 7.1R起動時に、ntpdが動かないようであれば、あらかじめ ntpdate で時刻を合わせておく。あまりにも違いが大きいと ntpd が動かないようだ。

freebsd7.1r/ntpd.txt · 最終更新: 2009/04/10 15:33 by vdobv
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0