markdown
はじめに (対象読者・この記事でわかること)
この記事は、Linuxサーバーの時刻同期に困っている方や、Chronyの導入を検討しているシステム管理者・エンジニアの方を対象としています。特に、従来のntpdからの移行を検討している方や、高精度な時刻同期が必要な環境を構築したい方に最適です。
この記事を読むことで、Chronyの基本的な仕組みと特徴が理解でき、実際にNTPサーバーを構築する方法を習得できます。設定ファイルの書き方、動作確認方法、トラブルシューティングまで、実践的なノウハウを網羅しています。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- Linuxの基本的なコマンド操作
- ネットワークの基礎知識(IPアドレス、ポート番号など)
- NTPプロトコルの基礎知識(あるとより理解が深まります)
Chronyとは?なぜ今注目されているのか
Chronyは、Linuxシステム用の高精度な時刻同期デーモンです。従来のntpdに比べて、より正確な時刻同期を実現し、モバイルシステムや仮想環境でも優れた性能を発揮します。
主な特徴として、以下の点が挙げられます:
- 高速な時刻同期:起動後すぐに正確な時刻を設定
- 高精度:0.1秒未満の精度で時刻を維持
- 低負荷:システムリソースへの負荷が少ない
- 優れた安定性:ネットワークの遅延やジャitterに強い
特に、仮想マシンやコンテナ環境では、ntpdよりもChronyの方が適しているとされています。これは、Chronyが仮想環境特有の時刻のズレを効率的に補正できるためです。
Chronyのインストールと設定方法
それでは、実際にChronyをインストールし、NTPサーバーを構築していきましょう。ここでは、Ubuntu 22.04 LTSを例に解説しますが、他のディストリビューションでも基本的な流れは同じです。
ステップ1:Chronyのインストール
まずは、Chronyをインストールします。ターミナルで以下のコマンドを実行してください:
Bashsudo apt update sudo apt install chrony
インストールが完了したら、バージョンを確認してみましょう:
Bashchronyd --version
以下のような出力が表示されるはずです:
chronyd (chrony) version 4.2 (+READLINE +IPV6 +DEBUG)
ステップ2:設定ファイルの編集
Chronyの設定ファイルは/etc/chrony/chrony.confにあります。バックアップを取ってから編集しましょう:
Bashsudo cp /etc/chrony/chrony.conf /etc/chrony/chrony.conf.backup sudo nano /etc/chrony/chrony.conf
基本的な設定例を以下に示します:
# 日本のNTPサーバーを指定
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst
server ntp.ring.gr.jp iburst
# ログファイルの設定
log tracking measurements statistics
logdir /var/log/chrony
# クライアントからの接続を許可(例:192.168.1.0/24)
allow 192.168.1.0/24
# ローカルで正確な時刻を提供する設定
local stratum 10
設定ファイルを保存したら、Chronyを再起動します:
Bashsudo systemctl restart chrony sudo systemctl enable chrony
ステップ3:動作確認とトラブルシューティング
Chronyが正しく動作しているか確認しましょう:
Bash# 時刻同期の状態を確認 chronyc tracking # NTPソースの状態を確認 chronyc sources -v # クライアントからのアクセスを確認 chronyc clients
chronyc trackingの出力例:
Reference ID : 210.173.160.87 (ntp.ring.gr.jp)
Stratum : 2
Ref time (UTC) : Mon Jan 01 00:00:00 2025
System time : 0.000123456 seconds fast of NTP time
Last offset : +0.000123456 seconds
RMS offset : 0.000123456 seconds
Frequency : 12.345 ppm fast
Residual freq : +0.001 ppm
Skew : 0.012 ppm
Root delay : 0.012345 seconds
Root dispersion : 0.000123 seconds
Update interval : 64.2 seconds
Leap status : Normal
ハマった点:ファイアウォールでNTPパケットがブロックされる問題
実際に構築していてよく遭遇するのが、ファイアウォールによってNTPパケット(UDP 123番ポート)がブロックされる問題です。
症状としては、クライアントからサーバーにアクセスできない、あるいはchronyc sourcesで^?(到達不能)と表示されることがあります。
解決策:ファイアウォールの設定
Ubuntuの場合、UFWを使用していることが多いと思います。以下のコマンドでNTPサービスを許可します:
Bash# UFWでNTPを許可 sudo ufw allow ntp # または、明示的にポート番号を指定 sudo ufw allow 123/udp # 設定を確認 sudo ufw status
CentOS/RHELの場合は、firewalldを使用します:
Bash# firewalldでNTPを永続的に許可 sudo firewall-cmd --permanent --add-service=ntp sudo firewall-cmd --reload # または、ポート番号で指定 sudo firewall-cmd --permanent --add-port=123/udp sudo firewall-cmd --reload
高度な設定:認証機能の有効化
セキュリティを強化したい場合は、NTPの認証機能を有効にすることもできます:
# /etc/chrony/chrony.confに追加
keyfile /etc/chrony/chrony.keys
commandkey 1
generatecommandkey
認証キーファイルを作成:
Bashsudo sh -c 'echo "1 MD5 $(openssl rand -hex 16)" >> /etc/chrony/chrony.keys' sudo chmod 640 /etc/chrony/chrony.keys sudo systemctl restart chrony
まとめ
本記事では、Chronyを使った高精度なNTPサーバーの構築方法を解説しました。
- Chronyの特徴:ntpdよりも高精度で高速な時刻同期を実現
- 基本的な設定:設定ファイルの書き方と主要なパラメータ
- トラブルシューティング:ファイアウォール問題の解決方法
- セキュリティ強化:認証機能を使った安全な運用
この記事を通して、Chronyを使った時刻同期システムの基礎を習得できたことでしょう。実際の運用では、監視やログ解析、冗長化など、より高度なテーマにも取り組む必要があります。
今後は、Chronyと他の時刻同期プロトコル(PTPなど)の違いや、大規模環境での運用ノウハウについても記事にする予定です。
参考資料
