こんにちは、こじろうです。
会社への出退勤の時、タイムカードとか入館証で出勤時間/退勤時間を管理していると思うのですが、時計がズレていたら大変ですよね?
僕は一回、この時計の時間ズレ被害に遭ったことがありまして…勤怠システムの時間がズレて、定時より5分早く帰ってしまったことになっちゃったことがあったんですね。
「システムとかパソコンの時間ってズレるのかよ!」ってかなり苛立ちを覚えたのですが、実はシステムの世界にも電波時計的なものがありまして、これが本記事のテーマであるNTP(Network Time Protocol)になります。
この記事では、文系SEの方々やITビギナーの方々向けに正確な時間設定を提供してくれるNTPについて紹介していきたいと思います。
【この記事でわかること】
- NTPとは何か?
- 具体的にはどんな仕組みなの?
- NTPの知識・スキルってどこで役立つの?
NTP:原子時計の時間と同期してくれる
時を刻むのに誤差が発生しない物質は存在しない。
腕時計やPCの内蔵時計は、水晶の振動周期を時間計測に利用します。水晶は電気を流すと、延々と一定の周期で振動するそうで、この性質を利用してPCの時計は刻まれているようです。しかし、一か月に15秒-30秒程の誤差が生じてしまうようです。https://ja.wikipedia.org/wiki/%E3%82%AF%E3%82%A9%E3%83%BC%E3%83%84%E6%99%82%E8%A8%88
個人のPCなら、時間がズレたタイミングで逐一修正する、というのも全く問題ないように感じますが、冒頭に述べた勤怠管理用のサーバや、不特定多数の方が24時間アクセス・利用されるようなサーバには、より細かい頻度で、更に欲を言えばより誤差の小さい計測を期待したいところです。
そこで、多くのシステムでは水晶振動ベースの計測ではなく、原子の旋回周期を利用した計測(いわゆる原子時計)を利用しています。こちらの誤差は、3000年に1秒程度の誤差が発生するそうです。https://ja.wikipedia.org/wiki/%E5%8E%9F%E5%AD%90%E6%99%82%E8%A8%88
実質、誤差は無いようなものですねw
しかしこの原子時計、小型するのがなかなか難しいんですね。研究は進んでいるようですが、実用化はまだまだ難しい様です。(https://pc.watch.impress.co.jp/docs/news/1102621.html)
そこで、原子時計を世界各地に配置し、インターネットを通じて時刻を合わせてしまおう、というのがNTPのざっくりとした仕組みになります。
これより詳細な仕組みはリナックスアカデミーさんのエンジニアの入り口ブログに分かりやすい説明が記載されているため、是非、こちらをご覧ください。https://eng-entrance.com/what-is-ntp
ポート番号123番を使って時刻を同期
Linux(Macも)
- まずはrootユーザになって、NTP機能(ntpd)をインストール
$ su – root
# yum install ntp - ntpd が起動している場合は停止する
# /etc/init.d/ntpd status
➡”ntpd (pid xxxx) を実行中…”といったメッセージが出てきたら起動中# /etc/init.d/ntpd stop - ntpdate コマンドで、一度手動で時刻合わせを実施
# ntpdate ntp.nict.jp
➡ntp.nict.jpが、原子時計で時刻を刻んでいる、今回ntpで時刻を同期したいサーバ。
➡日本国内にはこういった原子時計ベースのntpサーバが数か所公開されている。(http://jjy.nict.go.jp/tsp/PubNtp/index.html) - ntpd の設定( /etc/ntp.conf の編集)を行う。
# vi /etc/ntp.conf(修正前)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org(修正後)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
server -4 ntp.nict.jp
server -4 ntp1.jst.mfeed.ad.jp
server -4 ntp2.jst.mfeed.ad.jp
server -4 ntp3.jst.mfeed.ad.jp➡今後は上記のNTPサーバへ一定周期で時刻を合わせに行くよう設定する。 - ntpd を起動する
# /etc/init.d/ntpd status - ntpd の働きぶりを確認する
# ntpq -premote refid st t when poll reach delay offset jitter
================================================================
*ntp-b2.nict.go. .NICT. 1 u 54 64 377 17.349 0.297 0.733
+ntp1.jst.mfeed. 172.29.2.50 2 u 52 64 377 17.371 -0.814 1.657
+ntp2.jst.mfeed. 172.29.2.50 2 u 46 64 377 17.486 0.372 2.005
+ntp3.jst.mfeed. 172.29.3.50 2 u 48 64 377 16.239 -0.070 2.101➡各サーバの前に*とか+がつくと同期完了。(コマンド実行から15分くらいかかります) - 自動起動を設定をする
# chkconfig ntpd on
# chkconfig –list ntpd - ハードウェアクロックの時刻をシステムクロックの時刻で合わせる
# hwclock -w
この知識・スキルの生かしどころ
トラブルシューティングの際の引き出しの一つになる。
システムの運用保守をしていると、原因不明だがとにかくシステムが動かない、または不具合が発生するといったことはよくあります。
そういった状況においては、多くの場合アプリケーション側に問題は無く、こういったネットワークやシステムインフラ側の不整合が原因となっていることが多いです。
システムを構築できる、プログラミングができるというのは立派なスキルですが、実はそういった人は世の中にたくさんいます。一方で、発声した不具合を調査し、適切な処置ができる人ってあまりいなんです。面倒くさいし、他人が作ったシステムを理解するのって作るより大変ですからね。
実はこの機能がDDoS攻撃に利用されることがある
NTP Project が提供する ntpd の一部のバージョンには、NTP サーバの状態を確認する機能 (monlist) が実装されており、同機能は遠隔からサービス運用妨害 (DDoS) 攻撃に使用される可能性があります。
NTP は、通常 UDP を使用して通信するため、容易に送信元 IP アドレスを詐称することができます。また、monlist 機能は、サーバへのリクエストに対して大きなサイズのデータを送信元 IP アドレスへ返送するため、攻撃者は攻撃対象の IP アドレスを送信元 IP アドレスに偽装した問い合わせパケットを
NTP サーバに送信することで、大きなサイズのデータを攻撃対象 (Web サイトなど) に送りつけることができます。
それでは、Chao◎
こじろう
※冒頭の写真ははむぱんさんによる写真ACからの写真でした。