お勉強モードだった

スポンサーリンク

やる事も無いからネットあちこち渡り歩いてお勉強と。
最近ちょっと嵌っているのが NTP サーバー。Network Time Protocol ですわな。
1 秒の狂いも許されないサーバーでは入れて当然なけりゃなにそれってな感じ。


ぶっちの自宅サーバーは 2 台。
共に NTP サーバーである「ntpd」は動いている。
NTP としての構成はこんな感じ

the internet <--|--> LAN

NICT (ST1) <--->+----------------------+     +---------------------+
                | FrontendServer (ST3) |<-+--| Backendserver (ST4) |
ISP  (ST2) <--->+----------------------+  |  +---------------------+
 (prefer)                                 |
                                          |  +---------------------+
                                          +--|   Windows Machine   |
                                          |  +---------------------+
                                          |
                                          .            .
                                          .            .
                                          .            .

ST というのは Stratum の略。階級を表す。
NTP サーバーには上下関係があり、これを表現するのに「ST1」や「ST2」と書く。
数値の小さい方が偉いという訳。偉いからには時差も少なく揺らぎ等も小さい。原子時計持ってたりとかもある。
今回は ISP へ優先的に繋ぐよう設定したので、ST は上記の通りになる。

LAN 内全てが外部の公開 NTP サーバーに問い合わせを出したらはっきり言って迷惑なので止めましょう
図の様に外部参照するのは 1 台のサーバーのみ。クライアントは全て自宅サーバーを参照させる。
これでぶっちの自宅ネットワークは 4 台のマシンが 1 台のサーバーに時刻補正の問い合わせを出している。
外部に問い合わせを出すマシンはサーバーである 1 台だけである。5 台マシンがあっても外部問い合わせは 1 と。

NICT のサーバーは唯一 ST1 で一般人が使っても ok なサーバー。普通 ST1 は一般人は使えない代物。
参考 : 日本標準時プロジェクト 公開NTP

ISP はそのまんま ISP (Internet Service Provider)。契約してるプロバイダーが NTP を公開していたら
そこを使うのが一番かもしれない。サーバーまでの到達経路が短いからね。

今日はこの NICT と ISP に合わせるように設定。
設定ファイルの記述もオプションの意味も調べて書き直してみた。

# cat /etc/ntp.conf
# とりあえず問い合わせが来たら全部拒否する
restrict default ignore

# 問い合わせを許可するクライアントを自分自身と LAN 内マシンに限定
restrict 127.0.0.1
restrict 192.168.1.0 mask 255.255.255.0 nomodify noquery

# 外部の公開 NTP サーバーも参照出来るよう、アクセスを許可させる
# ntp.nict.jp (ST1)
restrict 133.243.238.163 mask 255.255.255.255 noquery nomodify notrap
restrict 133.243.238.164 mask 255.255.255.255 noquery nomodify notrap
restrict 133.243.238.243 mask 255.255.255.255 noquery nomodify notrap
restrict 133.243.238.244 mask 255.255.255.255 noquery nomodify notrap
# ISP
restrict 202.224.32.4 mask 255.255.255.255 noquery nomodify notrap

# 問い合わせる外部公開 NTP サーバーを指定しつつ問い合わせ間隔も調整。
# 設定は NICT の設定ページ通りお約束を守った物としている。
server -4 ntp.nict.jp iburst minpoll 6 maxpoll 8
server -4 ntp.nict.jp iburst minpoll 6 maxpoll 8
server -4 ntp.nict.jp iburst minpoll 6 maxpoll 8
server -4 ntp.asahi-net.or.jp prefer minpoll 6 maxpoll 10

# Drift
driftfile /var/lib/ntp/drift

プロバイダーの NTP は ST2 に位置し、NICT よりも下位だが prefer を指定することで
「出来ればこいつを使いたい」って意味になる。
prefer が無ければ NTPd は必ず上位の ST1 へ同期しに行くからね。

例え ST2 のサーバーが ST1 より精度が良くても階級には逆らわない。
事実、ST2 であるプロバイダーの NTP の方が、ST1 の NICT より到達経路の影響か精度が上。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp-b3.nict.go. .NICT.           1 u   86  128  377    9.257    0.085   0.759
+ntp-b2.nict.go. .NICT.           1 u   73  128  377    9.655   -0.059   0.777
+ntp-a3.nict.go. .NICT.           1 u   80  128  377    7.761   -0.190   0.475
*orion.asahi-net 202.224.53.11    2 u   71  128  377    3.922   -0.249   0.381

deley の項目がそれに当たる。
自宅サーバーの NTP との時差になる。単位は ms。1000 分の 1 秒な世界です (笑

という事で全て設定を行って NTP のデーモンを再起動と。
Windows マシンとかは全て Frontend に時刻補正の問い合わせを出して時間を合わせている。
FrontendServer 自体は日本標準時との誤差は 0.004 秒前後で一定。
Windows は OS の負荷によって時間が狂いまくるけどサーバーほど時間には気を付ける必要も無い。
一応 5~10 分置きに補正かけてるけどそれでも 1~2 秒狂う事も多い…。

とまぁこれ以上は書ききれない量なのでこの辺で (笑

参考
On-line Manual of “ntpd”
On-line Manual of “ntp.conf”

スポンサーリンク