TurboLinux による NTP サーバの立ち上げ
CPU : 486DX2 66Mhz
MEMORY : 16MB
DISK : 520MB手元に空いているコンピュータがこれしかなかったため、やむなく使用してみた。
● Linuxのディストリビューション
インストール対象マシンの HDD が小さいため、 RedHatLinux 7.2 (FTP版) 、Turbolinux 6.0 (FTP版) ではインストールできなかった。
(方法はあるかもしれないが、マニュアル通りでは Xwindow をインストールしようとするため、 HDD の領域不足でインストールできなかった。)そこで、手元にあった TurboLinux4.0 (FTP版) で試してみた。
● インストール形態
- ワークステーションでは 600MB 以上必要な為 HDD に入らない。また、ネットワークサーバとして立ち上げても意味がない為、基本モジュール( 125MB ) のみのインストールとした。(Xwindow は使用しない)
- PC が APM に対応していないのでノーマルのカーネルを使用した。
- LILO はマスターブートレコードにインストールした。
● パーティションの切り方
HDD が 520MB と小さいため、どの程度のパーティションを切ればよいかわからなかったため、TurboLinux に自動で切らせた。
シリンダ
1- 894 /tmp/hda1/
895-1024 /tmp/hda2swap
● カーネルのアップグレード(得に必要ないが・・・)
# turbopkg
・kernel-source-2.2.13-17.i386.rpm
・kernel-2.2.13-17.i386.rpm
・kernel-headers-2.2.13-17.i386.rpm
・kernel-ibcs-2.2.13-17.i386.rpm
・kernel-pcmcia-cs-2.2.13-17.i386.rpm計5本でアップグレードする。
ダウンロード元: ftp://ftp.turbolinux.co.jp/pub/TurboLinux/TurboLinux/ia32/Workstation/4.0/ja/updates/RPMS/
● NTPソフトの導入
Install に使用した CD-ROM に NTP 関連のソフトウエアが入っているかと思っていたら入っていなかった。 TurboLinux のサイトを探したところ、 TurboLinux 3.0 には NTP 関連のソフトウエアが入っていたようなので、それをダウンロードして使用してみることにした。
# turbopkg
・xntp3-server-5.93-1TL.i386.rpm (サーバの機能を付加する。)
・xntp3-5.93-1TL.i386.rpm (クライアントとして動かす。)計2本をインストールする。
ダウンロード元
TurboLinux のサイトには、上記のバージョンより新しい xntp3 があり、インストールしてみたが動作しなかった。TurboLinux 4.0 では、今回、インストールしたバージョンないと動かないことを確認済み。
● ネットワーク管理用ツールの導入(これも、得に必要ではないが・・・)
Install に使用した CD-ROM からインストールする。
# turbopkg
・tcpdump.rpm (tcpdump :回線トレースを有効にする。)
・tracerou.rpm (traceroute:traceroute コマンドを有効にする。)
・netkit-b.rpm (netkit-base :Ping コマンドを有効にする。)
・tcp-wrap.rpm (tcp_wrappers:netkit-b を Install すると依存関係で必要。)
# ntpdate [NTP Server]
同期が取れると、
15 Dec 16:41:44 ntpdate[XXX]: adjust time server [NTP Server] offset -0.006573sec
と表示される.。
● ハードウエアクロックをシステムクロックに同期
Unix,Linux はハードウエア・クロックとシステム・クロックの2つを持っている。コンピュータ起動時にシステム・クロックをハードウエア・クロックに合わせているため、リブートの都度、時間が狂う。リブートする前に下記のコマンドを入力した方がよいと思われる。
# hwclock --systohc
● ntp.conf ファイルを作る。
# vi /etc/ntp.conf
server 210.173.160.27 # ntp1.jst.mfeed.ad.jp
server 210.173.160.57 # ntp2.jst.mfeed.ad.jp
server 210.173.160.87 # ntp3.jst.mfeed.ad.jp
server 133.31.180.6 # ntp.sut.ac.jp
driftfile /etc/ntp.driftesc->:wq-->Enterで閉じる。
server
どのサーバを時刻源にするかをIPアドレス、または、ホスト名を設定する。複数のサーバを記述し、対象となるサーバが信用できない時、精度を上げたい時などに使用する。
driftfile
コンピュータの内部クロックは一定の比率で遅れたり、早くなったりする。その傾向を計測してファイルに記憶しておく。そのファイルをここで指定する。
● ntp.drift ファイルを作る。
# vi /etc/ntp.driftesc->:wq-->Enterで閉じる。
● ntp を起動
# /etc/rc.d/init.d/xntpd start
最初は64秒おきに同期を取り、徐々に間隔を広げていく。実測では18分程度まで間隔を広げた。その後、18分ごとに同期を取るのかと見ていると、64秒おきに変わったり128秒ごとになったり変動していた。● 動作確認
# ntpq -p
ここで、サーバ名が表示され"st"の項目が16になっていなければOK。
サーバ名の前に"*","+","-"が表示されれば、同期が取れている。
remote refid st t when poll reach delay offset disp
===============================================================================
+ntp1.jst.mfeed. nttpf-isdn1.crl 2 u 246 256 377 35.90 2.263 7.13
*ntp2.jst.mfeed. nttpf-isdn0.crl 2 u 251 256 377 36.22 1.083 15.82
+ntp3.jst.mfeed. nttpf-isdn0.crl 2 u 236 256 377 37.66 3.482 7.03
-sutntp.sut.ac.j .GPS 1 u 248 1024 377 41.40 -0.414 29.28ntpq -p の表示の意味
Remote : 参照しているサーバ。
refid : Remote-Serverが参照している同期先サーバ、GPS時刻源等。
st : Remote-Serverの階層(Stratum)。1が時報源。
t : 動作モード Unicast,Multicast,Brordcast
when : 最後にパケットを受信した時間
poll : ポーリング間隔
reach : 到達可能性レジスタ(8進数)
delay : 遅延の推定
offset : ずれ
disp : ばらつき
● 起動時に起動させるようにする。
# terboservice
にて xntpd の Run Leve に3,4,5を設定
● 問い合わせ状況を確認するには
# tcpdump port 123
Port 123番を使用してのやり取りが見える。( NTP は Port 123 UDP を使用する。)
● セキュリティの確保
NTP 専用サーバなので必要の無いサービスは終了、起動しない。
# netstat -n -lProto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5680 0.0.0.0:* LISTEN
[State] の欄に LISTEN になっているところはクライアントからの接続要求を受けることを示している。
Local Address の最後が Port-No を示す。
# fuser -n tcp [Port-No]
5680/tcp: 221
最後に表示されるのが PID 。この場合、 221 とわかる。
# ps p [PID]
PID TTY STAT TIME COMMAND
221 ? S 0:00 /usr/sbin/cannaserver -syslog
cannaserver(かな漢字変換サーバ) が使用していることがわかる。
基本的に、 xntpd (Port-No:123) 以外のサービスは不要なので、 turboservice にて canna を停止し、起動時の実行を Disable にする。
同様に、jserver (Wnn4) についても行う。
ちなみに Port-No:1 は ICMP パケット、Port-No:6 は tcp パケット。
● 時間あわせの動き
内部クロックと時刻源とが大きく異なった場合には、少しずつ時間を掛けて修正する。いきなり時間を遅らせた場合などにソフトウエア、データに異常動作する可能性があるため。例えば、時刻をデータ中に持っていた場合、時間の逆転が発生する可能性がある。
どのくらいの時間をかけて行うか、どのくらいの範囲で修正するかは、<あとがき>の記述通り、長期の稼働実績が取れなかったため不明。
少しずつ時刻を合わせることで、時刻源の時間が狂ったときに、システム・クロックと driftfile の記録(どのくらい遅れる傾向、進む傾向にあるかを1時間おきに計測する。)、時刻源の時間を照らし合わせて、時刻源の時間が信用できるかどうかを検出する。
ここまでで、何とか設定を完了したと思う。 Linux は初めての為、とまどいもあり、何度もインストールし直したりもした。 NTP サーバとしてのみ使用するのであれば得に深い知識は不要のように感じた。実質、仕事の合間に3日程度で立ち上げることができたが、安定稼働を始めてまもなく、構築したPCを別用途で使用することになり、泣く泣く、 HDD をフォーマットする事になってしまった。長期での稼働実績が取れなかったのが残念で仕方がない。
また、 NTP が時間を同期する時間間隔が思ってより細かく、相手側サーバに迷惑を掛けていないか心配である。必要とする精度の問題もあるとが、この間隔を長くする事が必要だと感じた。どういう間隔で同期を取りに行くかは不明である。コンピュータの時間を安定するようにしたらどうだろうか?次回、サーバを立てるときには電源は UPS (無停電電源装置) で安定させ、温度保証付きマザーボード等を使って実験してみたいと思う。(ただ、いつになるかは、まったく、予想できない。。。。)そこまでやるなら、GPS から時間を採取する機器を使った方がやすくできる可能性がある。
「 xntp3-5.93-1TL.i386.rpm 」には、2001年4月4日にバッファ・オーバーフローを起こす可能性があり、リモートユーザーにより root 権限を奪取される可能性があることがわかっています。 TurboLinux では、対策パッケージ(xntp3-5.93-10)を出していますが、このバージョンでの動作確認をしていません。(2006/4/17 ダウンロードサイトにリンク切れが発生しましたのでリンクを削除します)
「 tcpdump 」にも同様なセキュリティ・ホールが発見されており、今回導入した「 tcpdump 」のバージョンは確認していませんが、時期からすると、セキュリティ・ホールが存在すると思われます。TurboLinux では、対策パッケージ(tcpdump-3.6.2-1)を出していますが、このバージョンでの動作確認をしていません。
できるだけ、最新のパッケージを使用するようにした方がいいでしょう。