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をインストールします。ターミナルで以下のコマンドを実行してください:

Bash
sudo apt update sudo apt install chrony

インストールが完了したら、バージョンを確認してみましょう:

Bash
chronyd --version

以下のような出力が表示されるはずです:

chronyd (chrony) version 4.2 (+READLINE +IPV6 +DEBUG)

ステップ2:設定ファイルの編集

Chronyの設定ファイルは/etc/chrony/chrony.confにあります。バックアップを取ってから編集しましょう:

Bash
sudo 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を再起動します:

Bash
sudo 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

認証キーファイルを作成:

Bash
sudo 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など)の違いや、大規模環境での運用ノウハウについても記事にする予定です。

参考資料