読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

NTPサーバ補足

以前のNTPサーバの構築には足りなかった部分を補足します。 単純だと思っていたら以外に落とし穴がいくつかあり時間がかかりました。 今回は「外部と切断されたローカル環境で、各サーバの時刻を同期する」を目的に設定したところ陥った注意点を書いていきます。 NTPは上位サーバに対してはクライアントとして時刻合わせをし、下位サーバに対してはサーバとして時刻を与えます。またPeerという相互同期用の機能もあります。 ◆NTPサーバがきちんと起動しているか $ ps aux | grep ntpd で、grep以外のプロセスでntpdがあるかを調べます。もしくは $ sudo netstat -untap で、ポート123を使用しているntpdサービスがあるかをチェックします。 動いていない場合は $ sudo service ntp start とします。 ◆ポートが開いているか ポートスキャンツールを使用します。詳しくはnmapの使い方を参考に。 $ sudo nmap -sU 192.168.xx.xx -p 123 PORT    STATE SERVICE 123/udp open  ntp となっていればポートは開放されています。開放されていない場合はファイアーウォールの設定を見直しましょう。 ここまでは準備段階です。次からは結構落とし穴があります。 ◆ntpdate で更新できない これにはいくつかの原因が考えられます。よくあるのは ①同期したいNTPサーバが起動してない(クライアント側はNTPサーバを停止する必要あり) ②ポートが開放されていない(サーバ側、クライアント側両方確認) ③NTPサーバの同期範囲が制限されている ④階層(Stratum)が低すぎて同期対象にされない 自分がどのケースか判断するのはntpdateのデバッグモードを使用するとわかります。 $ sudo ntpdate -d <同期したいサーバのIP or ホスト名> Server dropped: no data とあれば①、②、③のどれかです。 Server dropped: strata too high とあれば④ Server dropped: Leap not in sync とあれば、同期したいサーバの信頼度が足りない(当該サーバの稼働時間が少ないため)だけで時間が経てば問題ないです。 上2つは普通に ntpdate すると「no server suitable for synchronization found」と怒られます。「the NTP socket is in use, exiting」と出る場合は自分のNTPサーバが起動中だからです。ntpdate はNTPサーバを停止中でないと使えません。 ①②は先ほどの内容を参考にしてください。③④は以下説明していきます。 ③NTPサーバの同期範囲が制限されている これはNTPサーバのバージョンの違いで起きることが多いです。古い情報を参考にntp.confを設定すると、新しいバージョンでは逆に同期範囲を制限してしまったりします。4.1から4.2の変更でnotrustの動作が変わったりなどあるので、他の参考サイトを使用するときも注意してください。 $ sudo emacs -nw /etc/ntp.conf よく使われる制御フラグ
 ignore  全てのNTPパケットを無視する
 kod  "Kiss of Death" 規定以上の頻度でアクセスを行うクライアントに通知される。 kod を受け取ったクライアントはNTPサーバへのアクセスを停止する。
 nomodify  サーバーの状態を変更しようとすると ntpq および ntpdc クエリを拒否する。 時刻問い合わせには応答する。
 notrap  NTPのメッセージトラップを無効にする。
 nopeer  ピアを構成しない。
 noquery  サーバの状態に関する問い合わせ ( ntpq ) 、ntpdcクエリを拒否する。  時刻情報のクエリには応答します。
 notrust  ntp-4.1以前 : 時刻問い合わせに応答するが、自身の時刻合わせには使用しない。  ntp-4.2以降 : 認証を受けていないホストとのNTP通信は行わない。 時刻情報の提供も行わない。
なので以前は下位サーバへの時刻問い合わせに対し「notrust」フラグは問題なかったのですが、4.2以降では何らかの認証を付けないとはじかれてしまいます。 なので下位サーバに対しては restrict 192.168.11.0 mask 255.255.255.0 nomodify notrap という時刻の問い合わせのみ応じる設定がいいです。 ちなみにバージョンの確認は $ ntpdate -v でできます。 ④階層(Stratum)が低すぎて同期対象にされない NTPサーバには図のように階層を構成することで実質上のフォールト・トレラント(耐障害性)を確保したり、参照するNTPサーバが基準に対してどのくらい近いのかを判定したりします。 fig03.gif この階層の最低は16であり、16であるサーバは信頼度が低いため、たとえ上位サーバに設定しても時刻問い合わせの対象にみなされません。しかし外部から隔離した環境だと、同期していないためデフォルトの16になっています。そこで階層を偽装します。 $ sudo emacs -nw /etc/ntp.conf server 127.127.1.0 fudge 127.127.1.0 stratum 10 この設定をつけることで、本来16である階層が10に偽装できます。 「server 127.127.1.0」はNTPサーバーと同期化できなかった場合には、リアルタイムクロック(RTC)を使用するという意味です。これでサーバとして、時刻問い合わせの対象にすることができます。 NTPサーバはサーバであり、クライアントでもあります。しかもntp.confの中にサーバ、クライアントの記述がごちゃまぜになるのでややこしいですね。 ソース: NTP設定 NTPサーバの設定 ntpdate実行時に「no server suitable for synchronization found」というエラーが出る NTPとWindows時刻同期サービス