InfraAcademy

InfraAcademy Blog

LinuxでNTPサーバーを構築する方法|chronyの設定と同期確認を解説

| #Linux #ネットワーク #ntp
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、LinuxへNTPサーバーを構築し、ネットワーク内のクライアントへ正しい時刻を配信する方法を解説します。

元記事ではntpdを利用していましたが、現在のUbuntuやRed Hat系Linuxでは、chronyを使う構成が一般的です。

時刻がずれると、ログの調査、証明書の検証、認証、バックアップ、監視などへ影響します。数分程度のずれでも、障害発生時刻を正しく追えないことがあります。

この記事では、chronyのインストール、上位NTPサーバーの設定、クライアントからのアクセス許可、ファイアウォール、同期確認まで順番に解説します。

NTPサーバーの設定方法解説

今回の記事では、NTPサーバーの設定方法について解説します。Linuxにchronyをインストールして、NTPサーバーとして動作させます。

手順は次のとおりです。

手順 作業内容
1 chronyをインストールする
2 上位NTPサーバーを設定する
3 クライアントからのアクセスを許可する
4 UDP 123番ポートを許可する
5 chronycで同期状態を確認する

すでに別の時刻同期サービスが動いている場合は、複数のデーモンを同時に動かさないようにします。

NTPとchronyの基本

NTPは、Network Time Protocolの略で、ネットワークを通じてコンピューターの時刻を同期するためのプロトコルです。

chronyはNTPを実装したソフトウェアで、chronydというデーモンと、確認・操作に使うchronycコマンドで構成されています。

NTPサーバーを社内に置く理由

今回構築するLinuxサーバーは、上位のNTPサーバーから時刻を受け取り、社内のLinuxやネットワーク機器へ配信します。

上位NTPサーバー
       ↓
社内NTPサーバー(chronyd)
       ↓
Linux・ルーター・スイッチ

問い合わせ先を社内NTPサーバーへ集約すると、外部への通信経路や参照先を管理しやすくなります。

ログの時系列や認証、監視を正しく動かすためにも、時刻同期が必要です。

chronyをインストールする

timedatectl status

System clock synchronizedNTP serviceの項目を確認してください。

Ubuntu・Debian系の場合

次のコマンドを実行します。

sudo apt update
sudo apt install chrony

インストールコマンドを入力するとこちらのようになります。

特にエラーが出なければ問題ありません。

画像は旧記事でntpパッケージをインストールしていた画面です。現在はchronyパッケージを使用してください。

主な設定ファイルは次の場所です。

/etc/chrony/chrony.conf

Rocky Linux・AlmaLinux・RHEL系の場合

Red Hat系では、次のコマンドです。

sudo dnf install chrony
sudo systemctl enable --now chronyd

主な設定ファイルは/etc/chrony.confです。

Linuxによってサービス名と設定ファイルが異なるため、OSが不明な場合は次のコマンドで確認します。

cat /etc/os-release

上位NTPサーバーを設定する

chronyをインストールしたら、時刻の取得元を設定します。

ディストリビューション標準のNTPプールを利用できる場合は、無理に変更する必要はありません。

設定ファイルをバックアップする

Ubuntu・Debian系の例です。

sudo cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak
sudo vi /etc/chrony/chrony.conf

Red Hat系では、パスを/etc/chrony.confへ変更します。

NICTの公開NTPを指定する

NICTの公開NTPサービスを利用する例は次のとおりです。

server ntp.nict.jp iburst

iburstは、起動直後などに複数回問い合わせを行い、初回同期を早めるためのオプションです。

本番環境では、会社やクラウド事業者が提供するNTP、ディストリビューション標準のプールを優先する場合もあります。

単一の時刻源だけに依存せず、運用方針に合った複数の信頼できる時刻源を利用しましょう。

serverとpoolの違い

serverは指定したホストを時刻源として使い、poolは名前解決で得られた複数のサーバーを入れ替えながら利用します。

pool pool.ntp.org iburst

既存のpoolserver行を残したまま追加すると、複数の時刻源が使われます。

クライアントからのアクセスを許可する

chronydは、インストールしただけでは通常、ネットワーク上のクライアントへNTPサーバーとして応答しません。

allowディレクティブで、利用を許可するネットワークを指定します。

allowで接続元を制限する

クライアントのネットワークが192.168.10.0/24の場合は、次の行を追加します。

allow 192.168.10.0/24

元記事では、次のntpd用設定を紹介していました。

restrict 192.168.10.1 mask 255.255.255.0 notrust

この例はネットワークアドレスではなくホストアドレスを指定しており、現在のchrony設定としても使いません。

最小構成は次のようになります。

server ntp.nict.jp iburst
allow 192.168.10.0/24

allow allは設定しない

次の設定は、すべてのIPv4・IPv6アドレスからの問い合わせを許可します。

allow all

社内NTPサーバーでは、実際に利用するサブネットだけを許可してください。

インターネットへ無制限に公開すると、不要な問い合わせや攻撃に悪用される可能性があります。

chronyの設定を反映する

設定後は、再起動する前に内容を確認します。

設定内容とログを確認する

chronyが読み込む設定は、次のコマンドで確認できます。

sudo chronyd -p

サービスのエラーはログでも確認します。

sudo journalctl -u chrony -n 50

Red Hat系では、サービス名をchronydへ変更します。

サービスを再起動する

Ubuntu・Debian系では、次のコマンドです。

sudo systemctl restart chrony
sudo systemctl status chrony

Red Hat系では、次のコマンドを使います。

sudo systemctl restart chronyd
sudo systemctl status chronyd

正常に再起動できたら完了です!

クライアントからNTPサーバーへ同期する

画像は旧ntpdの実行例です。現在はsystemctl statuschronycを使って確認しましょう。

クライアントを同期する前に、サーバー側でUDP 123番を許可します。

ファイアウォールでUDP 123番を許可する

別のコンピューターから利用する場合は、NTPが使うUDP 123番ポートを許可します。

firewalldの場合

sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
sudo firewall-cmd --list-services

可能であれば、ゾーンやリッチルールで接続元ネットワークも制限します。

UFWの場合

UbuntuでUFWが有効な場合は、社内ネットワークからだけ許可します。

sudo ufw allow from 192.168.10.0/24 to any port 123 proto udp
sudo ufw status

chrony.confallowとファイアウォールの両方で範囲を絞ると、不要な公開を防ぎやすくなります。

chronycで同期状態を確認する

サービスが起動しているだけでは、上位NTPサーバーと同期できているとは限りません。

sourcesで時刻源を確認する

chronyc sources -v

表示例は次のとおりです。

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-a3.nict.go.jp             1   6   377    30   -120us[-150us] +/- 10ms

主な記号は次のように読みます。

記号 意味
^* 現在同期に選ばれている時刻源
^+ 組み合わせて利用可能な時刻源
^? 到達できない、または測定値が不足
^x 不正確と判断された時刻源

trackingで時刻のずれを確認する

chronyc tracking

Reference IDSystem timeLast offsetLeap statusなどを確認します。

Leap status : Normalで、利用中の時刻源が表示されていれば、同期できている可能性が高いです。

OS全体の状態はtimedatectl statusでも確認できますが、詳細な同期状態はchronycを使用しましょう。

クライアント側へNTPサーバーを設定する

NTPサーバーのIPアドレスを192.168.10.10とします。

クライアント側のchrony.confへ、次の行を追加します。

server 192.168.10.10 iburst

会社の方針で社内NTPだけを使う場合は、既存の外部poolserver行をコメントアウトします。

設定を反映したら、同期先を確認します。

sudo systemctl restart chrony
chronyc sources -v

Red Hat系ではサービス名をchronydへ変更します。

NTPサーバー側では、接続してきたクライアントを確認できます。

sudo chronyc clients

問い合わせが届かない場合は、allow、UDP 123番、ルーティング、クライアントの参照先を確認してください。

【関連記事】NTPとは?時刻同期の仕組みを解説

NTPサーバーと同期できない場合

問題が起きたときは、設定を何度も書き換える前に原因を分けて確認します。

chronydが起動しているか

systemctl status chrony

Red Hat系では次のとおりです。

systemctl status chronyd
journalctl -u chronyd --since today

上位NTPサーバーを名前解決できるか

getent hosts ntp.nict.jp

名前解決できなければ、chronyより先にDNS設定を確認します。

時刻が大きくずれている場合

設定に次の行があれば、起動直後の大きなずれを即時補正できます。

makestep 1.0 3

これは最初の3回の更新中に1秒を超えるずれがある場合、時計をステップ補正する設定です。

手動で即時補正する場合は、次のコマンドがあります。

sudo chronyc makestep

稼働中のデータベースなどでは、時計が急に変わる影響を確認してから実行してください。

AWS EC2で時刻同期する場合

EC2では、VPC内から利用できるAmazon Time Sync Serviceがあります。

IPv4のリンクローカルアドレスは次のとおりです。

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

AMIによっては最初から設定されているため、既存設定を削除する前にchronyc sources -vを確認してください。

AWS入門講座を見る

NTPサーバー設定方法まとめ

今回の記事では、Linuxへchronyをインストールし、NTPサーバーとして時刻を配信する方法を解説しました。

基本設定は次のようになります。

server ntp.nict.jp iburst
allow 192.168.10.0/24

設定後は、サービスが起動しただけで終わらせず、次のコマンドで同期状態を確認します。

chronyc sources -v
chronyc tracking
chronyc clients

クライアントから利用する場合は、chronyのallowとファイアウォールの両方で、UDP 123番を必要なネットワークだけに許可してください。

NTPサーバーを自分で構築する機会は多くないかもしれませんが、ログ・認証・証明書などを支える重要な仕組みです。

このようなインフラに関連する技術を当ブログで紹介しているので興味のある方は是非ご覧ください。

参考資料

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る