NTP

提供: きまぐれ手記 Kimagurenote
移動先: 案内検索

ntp (Network Time Protocol) による時刻同期(自動時計合わせ)。標準設定のまま使っている人が多いようですが、近いサーバに設定を変える方が良いですよ、という話。

主要OSの中では最も遅かったWindowsもXPから標準対応し(実装自体はWindows2000からあったのかな、でも筆者は「桜時計」のお世話になっていましたが)、今では主要OS全てが標準対応していますが、標準設定のままで使っている人が少なくないようです。

しかし、一部のサーバにアクセスが集中して不安定になったり、遠くのNTPサーバにつなぎに行くと不正確になったりするので、なるべく近くのサーバにつなぐように設定変更しておきましょう。(要root権限)

FreeBSD

設定例

/etc/rc.conf

ntpd_enable="YES"

/etc/ntp.conf

#server	0.freebsd.pool.ntp.org iburst
#server	1.freebsd.pool.ntp.org iburst
#server	2.freebsd.pool.ntp.org iburst

server	ntp.nict.jp iburst
server	ntp.jst.mfeed.ad.jp iburst
server	ntp.ring.gr.jp
server	jp.pool.ntp.org

タイムゾーン

標準のインストーラを使ってタイムゾーンを設定済みの場合が多いと思われるが、そうでない場合はタイムゾーンを設定する。

# ls /etc/localtime
ls: /etc/localtime: No such file or directory
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

アクセス制限

2013年12月頃より公開ntpdサーバのモニタ機能を悪用したDDoS攻撃が流行り始めたようで、FreeBSDでは1月に FreeBSD-SA-14:02.ntpd で修正されてはいるものの、NTPサーバへの不正アクセスの増加が懸念されています。

個人や事業所等がインターネットにつながっているサーバでntpdを動かす場合は、セキュリティパッチを適用するとともに、第三者からのアクセスには応じないように設定すると良いでしょう。具体的には、/etc/ntp.conf に下記のような設定を記述します。

例:localhost と 192.168.0.* からの接続は許可する。それ以外からの接続は拒否する。

server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
restrict default ignore
restrict -6 default ignore
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.0.0 mask 255.255.255.0
restrict 133.243.238.0 mask 255.255.255.0 nomodify nopeer noquery notrap        # ntp.nict.jp
restrict 210.173.160.0 mask 255.255.255.0 nomodify nopeer noquery notrap        # ntp.jst.mfeed.ad.jp

この要領で、/etc/ntp.conf に restrict を指定してIPアドレスまたはドメイン名ごとにアクセス制限ができますが、注意点が2つ。上位NTPサーバ(nictやmfeedなど)もアクセス許可リストに加えておく必要があることと、複数のAレコードを持つサーバはドメイン名指定ができないこと。

予め下記のように上位ntpdサーバ (ntp.nict.jp, ntp.jst.mfeed.ad.jp) のAレコードを取得してみて、下記例のように上位サーバが複数のAレコードを持っている場合は、ドメイン名指定ではなくIPアドレスの範囲で許可指定します。

% dig ntp.nict.jp
...
;; ANSWER SECTION:
ntp.nict.jp.            32212   IN      A       133.243.238.244
ntp.nict.jp.            32212   IN      A       133.243.238.163
ntp.nict.jp.            32212   IN      A       133.243.238.164
ntp.nict.jp.            32212   IN      A       133.243.238.243
...

ただし、nictやmfeedはIPアドレスの範囲を特定しやすいのでこの手法が使えますが、pool.ntp.org ではこの手法は使えないでしょう。その場合はipfw等でアクセス制御するか、NTPサーバ機能を停止する(cron から ntpd -q で起動する)か、アクセス制御を諦めるかの選択になるでしょう。

この設定後、ntpdを再起動してしばらく待ち、ntpdc で上位NTPサーバと接続しているか確認しておきます。

# /etc/rc.d/ntpd stop
# /etc/rc.d/ntpd start
(しばらく待つ)
# ntpdc -l
client    ntp2.jst.mfeed.ad.jp
broadcast 192.168.0.255
client    ntp-b2.nict.go.jp

上記のように接続相手が確認できればOK。


この他、もしすぐにパッチを適用できない事情がある場合は、悪用が問題になっているモニタ機能を切り離しておく方が良いでしょう(/etc/ntp.conf に下記の設定を加える)。

disable monitor

参考

NetBSD

設定例

/etc/rc.conf

ntpd=YES

/etc/ntp.conf

#server		0.pool.ntp.org
#server		1.pool.ntp.org
#server		2.pool.ntp.org

server		ntp.nict.jp
server		ntp.jst.mfeed.ad.jp
server		ntp.ring.gr.jp
server		jp.pool.ntp.org

タイムゾーン

タイムゾーンを指定していない場合は、指定しておくこと。

# ls /etc/localtime
ls: /etc/localtime: No such file or directory
# ln -s /usr/share/zoneinfo/Japan /etc/localtime

参考

Windows Vista/7

設定方法

タスクバーの時計を右クリック→日付と時刻の調整(またはコントロールパネル→日付と時刻)→インターネット時刻→設定変更→サーバー ※Windows XP も同様に設定可。

参考

NTPサーバ

日本(JST)

  1. ntp.nict.jp (stratum 1)(IPv6対応)
  2. ntp.jst.mfeed.ad.jp (stratum 2)
  3. ntp.ring.gr.jp
  4. jp.pool.ntp.org

筆者の感覚では、mfeed が運営経験が長く安定していて良い。JPNAP内に設置されており、国内プロバイダを使っている人ならほぼ最短経路(筆者設置のサーバから接続した際のレイテンシは2ms以内)。

それに比べるとnictは少々不安定だが、1秒間に100万リクエスト以上の処理が可能だそうなので、アクセス集中による不安定はおそらく無いだろうし、JPIXに直結でレスポンスが良い(同3-5ms)。

ringやpoolは当たり外れが大きく、ほとんどの場合IX直結の上記2者よりは遠いだろうから、あえて設定しなくてもいいかもしれない(Unix系OSのntpdでは自動的に重み付けして使い分けるはずなので書いておいてもいいと思うが、Mac OS X や Windows などNTPサーバを1つしか指定しない場合はmfeedかjpixが良い)。ただし学情(SINET)につながっている場合(大学など)はringを入れておくと良いかも。

この他、契約しているプロバイダがNTPサーバを提供している場合は追加しておくべし。ただし正式に公開されていない場合も多く、その場合は多数の利用が想定されていないサーバだと思われるので、mfeedやnictを使う方が良いかもしれない。

なお、stratum 値の大小よりは、レイテンシやレスポンス(近さやサーバの処理能力、混雑の程度)の方を重視すべし。(stratum がいくらか違ったところでエンドユーザが気になるほどの誤差は出ない。)

参考

nictやmfeedを推奨するが、参考までに。特にプロバイダのNTPサーバは、プロバイダの外からは使わないようにすべし。