rpmfind.netからダウンロードしてきた最新版のrpmファイルをインストールします。
http://www.eecis.udel.edu/~ntp/から、全世界の公開NTPサーバを知ることが出来ます。このホームページの"Public NTP Time Servers"を選択すると、一番下の箇所に、Public NTP Primary Time ServersとPublic NTP Secondary Time Serversが選べるようになっていますが、Primaryが第1階層(stratum 1)、Secondaryが第2階層(stratum 2)のNTPサーバを意味します。
ここでは、日本国内向けの公開NTPサーバ(133.100.9.2、133.100.11.8)を指定したいと思います。
自宅に複数台PCがある環境では、全てのマシンが公開NTPサーバを参照するのではなく、LinuxサーバでNTPサーバを立ち上げて、そちらを参照するようにしてください。
xntpのインストールが済んだら、NTPサーバにアクセスできるかをntpq(NTP query)コマンドを利用して確認します。
時刻同期中状態、時刻同期完了状態は下記のとおりです。
注意※
ntpd 起動時に大幅に時刻がずれていると ntpd が起動できないので、いったん、手動で時刻を合わせます。
ntpdateコマンドをシステムブート時に起動したり、cronで一定時間ごとに起動してNTPクライアントとして時刻合わせする方法もありますが、Linuxサーバを立ち上げて、PCクライアントを接続/管理する環境を構築していますので、Linuxサーバでxntpdデーモンを起動してNTPサーバとして運用しましょう。これによってntpdateの起動は不要になり、PC側でNTPサーバの参照は、Linuxサーバにアクセスすることによって時刻合わせが可能になります。
xntpdデーモンを起動すると常にxntpdがNTPソケットをオープンしているので、ntpdateが以下のメッセージで実行できなくなりますが、ntpdateで行なう処理は、xntpdが自動処理していますので問題ありません。
nto.confのキーワード
restrict address [mask mask] [flag][...]
restrictのオプション
後は
サーバとして動作しているかどうかの確認方法は
Linuxは立ち上がり時、BIOSが保持する時間をシステム時間としてセットします。これにより、立ち上がってからxntpdの補正が入るまで正確な時刻ではありません。これを解決するには、clockコマンドを使い正確なシステム時間をBIOS時間に書き込みます。
crondデーモンを再起動する。
/var/log/messagesに表示されるログについて
xntpd[19679]: kernel pll status change 89
xntp というNTP デーモンが、内部時計の進む速度をちょっと変えたよ、ということだと思います。
# rpm -ivh xntp3-5.93-13vl2.i386.rpm接続するNTPサーバを決めなければなりません。
http://www.eecis.udel.edu/~ntp/から、全世界の公開NTPサーバを知ることが出来ます。このホームページの"Public NTP Time Servers"を選択すると、一番下の箇所に、Public NTP Primary Time ServersとPublic NTP Secondary Time Serversが選べるようになっていますが、Primaryが第1階層(stratum 1)、Secondaryが第2階層(stratum 2)のNTPサーバを意味します。
ここでは、日本国内向けの公開NTPサーバ(133.100.9.2、133.100.11.8)を指定したいと思います。
自宅に複数台PCがある環境では、全てのマシンが公開NTPサーバを参照するのではなく、LinuxサーバでNTPサーバを立ち上げて、そちらを参照するようにしてください。
xntpのインストールが済んだら、NTPサーバにアクセスできるかをntpq(NTP query)コマンドを利用して確認します。
# ntpq -p 133.100.9.2 remote refid st t when poll reach delay offset jitter ============================================================================== *GPS_NMEA(1) .GPS. 0 l 4 16 377 0.000 0.000 0.002 -drake.nc.fukuok .GPS. 1 u 304 1024 377 0.296 0.004 0.003 -clock.tl.fukuok .GPS. 1 u 282 1024 377 5.099 -0.874 1.422 -clock2.tl.fukuo .GPS. 1 u 278 1024 377 3.502 -0.140 0.136 +133.100.74.21 .CDMA. 1 u 524 1024 377 0.995 0.093 0.053 -133.100.53.51 .GPS. 1 u 295 1024 377 1.177 0.108 0.039 +ntp-b3.nict.go. .NICT. 1 u 289 1024 377 23.963 0.087 0.130 -geo.gen.u-ryuky .GPS. 1 u 273 1024 377 18.532 0.381 0.561 -zao.net.tohoku. .GPS. 1 u 415 1024 377 33.264 0.306 0.053 -ntp.nc.u-tokyo. .GPS. 1 u 370 1024 377 21.826 0.276 0.028 rackety.udel.ed .PPS. 1 u 142 1024 377 203.256 1.995 0.120 ntp1-2.Berkeley .WWVB. 1 u 132 1024 377 132.154 -0.929 0.253 ntp01.sinet.ad. .GPS. 1 u 351 1024 377 22.658 0.091 3.543 ntp02.sinet.ad. .GPS. 1 u 72 1024 377 22.224 0.263 0.340 ntp11.sinet.ad. .GPS. 1 u 291 1024 377 26.080 0.182 0.089 LOCAL(0) .LOCL. 5 l 36 64 377 0.000 0.000 0.002上記の場合は接続に成功した例です(表示内容を知りたい人はこちらを参照)。
時刻同期中状態、時刻同期完了状態は下記のとおりです。
時刻同期中の状態 サーバー名の前が空白は時刻同期中です。 # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== ntp1.jst.mfeed. 210.173.160.56 2 u 785 1024 377 12.102 0.073 0.508 ntp2.jst.mfeed. 210.173.160.56 2 u 774 1024 377 12.271 -0.060 0.004 ntp3.jst.mfeed. 210.173.160.56 2 u 861 1024 377 13.036 0.567 0.029 時刻同期完了の状態 サーバー名の前が *、+、- であれば時刻同期完了状態です。 # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +ntp1.jst.mfeed. 210.173.160.56 2 u 1002 1024 377 12.102 0.073 0.508 +ntp2.jst.mfeed. 210.173.160.56 2 u 991 1024 377 12.271 -0.060 0.004 *ntp3.jst.mfeed. 210.173.176.4 2 u 53 1024 377 12.942 0.455 0.142また、以下の2つ出力結果は全て失敗例です。原因としては、IPアドレスのタイプミスや、NTP(123)のパケットがフィルタリングされていることが考えられます。
# ntpq -p 192.168.76.1 ntpq: read: Connection refused # ntpq -p 203.139.30.195 ntpq: read: Network is unreachable次にntpdateコマンドによって、NTPサーバの時間に合わせてみましょう。
注意※
ntpd 起動時に大幅に時刻がずれていると ntpd が起動できないので、いったん、手動で時刻を合わせます。
# ntpdate 133.100.9.2 7 Dec 22:30:00 ntpdate[21895]: no server suitable for synchronization found上記は失敗です。ntpqコマンドでの接続確認は正常処理されているのに、ntpdateで時間をセットしようとすると失敗しました。これはルータの設定がLinuxサーバへの内向きのNTP(123)ポートは破棄するようにしているからです。この場合は、仕方ないのでNTP(123)ポートも開けましょう。
# ntpdate 133.100.11.8 ← 再度、ntpdateを起動
7 Dec 22:35:31 ntpdate[21972]: step time server 133.100.11.8 offset -178.284741
今度は上手くいきましたので、NTPの環境を作成します。
ntpdateコマンドをシステムブート時に起動したり、cronで一定時間ごとに起動してNTPクライアントとして時刻合わせする方法もありますが、Linuxサーバを立ち上げて、PCクライアントを接続/管理する環境を構築していますので、Linuxサーバでxntpdデーモンを起動してNTPサーバとして運用しましょう。これによってntpdateの起動は不要になり、PC側でNTPサーバの参照は、Linuxサーバにアクセスすることによって時刻合わせが可能になります。
xntpdデーモンを起動すると常にxntpdがNTPソケットをオープンしているので、ntpdateが以下のメッセージで実行できなくなりますが、ntpdateで行なう処理は、xntpdが自動処理していますので問題ありません。
# ntpdate 133.100.9.2 10 Dec 01:14:40 ntpdate[15310]: the NTP socket is in use, exitingxntpデーモンを動かす上で最低必要なコンフィグレーションファイルは以下の2つです。
/var/lib/ntp/ntp.conf NTPコンフィグファイル /etc/ntp.drift ドリフト・ファイル自分のサーバでの/etc/ntp.confファイルの設定は以下の通りです。serverで全ての日本国内向けの公開サーバを指定しています。
# vi /etc/ntp.conf # ドリフトファイルを指定します。 # このファイルには、時刻のズレの傾向などが記録されます。変更する必要はありません。 driftfile /var/lib/ntp/ntp.drift # デフォルトは接続拒否 restrict default ignore #ローカルマシンからの接続は許可 restrict 127.0.0.1 restrict -6 ::1 #組織内ネットワークからの時刻問い合わせにのみ応答する restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap #一方的に時刻を参照する上位NTPサーバからのNTP通信の限定 restrict 210.173.160.27 noquery nomodify restrict 210.173.160.57 noquery nomodify restrict 210.173.160.87 noquery nomodify #時刻同期するNTPサーバの指定(個人でも利用な可能なNTPサーバを選択すること) server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jpその他の参考となる情報。
- fudge clock_address stratum number
- このオプションと次のserver 127.127.1.0の指定により、外部のNTPサーバに接続できないときに自ホストの時計で同期するようになります。外部NTPサーバにアクセスできないときのバックアップ的な役割として動作します。
- multicastclient [ipaddress ...]
- マルチキャストクライアントの設定です。マルチキャストグループアドレスに対するマルチキャストサーバメッセージを受け取ります。デフォルトでは、224.0.1.1をListenします。 broadcastdelay seconds
- ブロードキャストおよびマルチキャストモードにおいて、ローカルとリモートの間のネットワークの遅延を測定します。通常はクライアントとサーバ間で自動的に初期のプロトコル交換で行われますが、例えばサービスのアクセス制御やネットワークに起因して失敗する場合があります。ここで指定する値は、このような状況におけるデフォルトの遅延時間です。通常イーサネットの場合は、0.003~0.007の間に指定します。指定を省略した場合には、0.004秒になります。 authenticate yes | no
- 上位のNTPサーバの認証キーがある場合には、yes を指定することで認証を行えます。
キーワード | 解説 |
---|---|
server | 一方的に時刻を同期するNTPサーバを指定 |
peer | 相互に時刻を同期するNTPサーバを指定 |
restrict | 指定したNTPサーバとのNTP通信を許可 |
restrict address [mask mask] [flag][...]
オプション | 解説 | 構文 |
---|---|---|
ignore | すべてのNTPパケットを無視 | restrict <対象NTPサーバ> ignore |
nomodify | 時刻問い合わせに応答するが、時刻の変更要求などは無視 | restrict <対象NTPサーバ> nomodify |
nopeer | 指定ホストと相互に同期しない | restrict <対象NTPサーバ> nopeer |
noquery | NTPの実装に依存する時刻問い合わせを無視 | restrict <対象NTPサーバ> noquery |
noserve | 時刻同期要求は拒否しますが、ntpq のクエリー(照会)は許可します。 | restrict <対象NTPサーバ> noserve |
notrust | 時刻問い合わせに応答するが、自身の時刻合わせには使用しない | restrict <対象NTPサーバ> notrust |
後は
# /etc/rc.d/init.d/xntpd startで起動してください。
サーバとして動作しているかどうかの確認方法は
# netstat -naとして、
udp 0 0 10.0.0.254:123 0.0.0.0:* udp 0 0 192.168.0.254:123 0.0.0.0:*のように表示されていればサーバとして動作しています。
Linuxは立ち上がり時、BIOSが保持する時間をシステム時間としてセットします。これにより、立ち上がってからxntpdの補正が入るまで正確な時刻ではありません。これを解決するには、clockコマンドを使い正確なシステム時間をBIOS時間に書き込みます。
# clock;date ← clockはBIOS時間、dateはシステム時間を表示します。 Sun Dec 10 09:44:05 2000 -0.608239 秒 ← BIOS時間の表示 Sun Dec 10 09:42:02 JST 2000 ← システム時間の表示 (約2秒BIOS時間が進んでいます。) # clock -w ← システム時間をBIOS時間に書き込みます。 # clock;date ← 再度、BIOSとシステム時間を表示 Sun Dec 10 09:42:12 2000 -0.427271 秒 Sun Dec 10 09:42:11 JST 2000 (ほぼ一致しました。)システム運用中は'clock -w'をcron登録し、定期的にNTPで補正された正確なシステム時間をBIOSに書き込みましょう。毎日0、12時に合わせるには、以下の行をcron登録します。
#vi /etc/cron.d/clock 0 0,12 * * * /sbin/clock -wviを終了して、chmodでrootのみに実行権を与え、
crondデーモンを再起動する。
# /etc/rc.d/init.d/crond restartWindowsを使用している場合は、『TClock』をお奨めします(動作確認済みです)。『桜時計』を使用することもできますが、NTPサーバにLANカード(ボード)が2枚刺さっていると上手く動作しない場合があります。
/var/log/messagesに表示されるログについて
xntpd[19679]: kernel pll status change 89
xntp というNTP デーモンが、内部時計の進む速度をちょっと変えたよ、ということだと思います。