【FreeRADIUS講座 第8回】最終回!トラブルシューティング完全ガイドと止まらない冗長化構成の構築

「認証サーバーダウン」=「全社員業務停止」の恐怖。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
全8回にわたるFreeRADIUS講座も、今回でついに最終回です。

これまで、基本構築からDB連携、GUI管理、証明書認証、多要素認証、ログ分析と、FreeRADIUSの機能をフル活用してきました。
しかし、どんなに高機能なサーバーでも、機械である以上いつかは壊れます。

コウ君

先生、想像しただけで胃が痛いです…。
もし朝出社して、Wi-Fiが繋がらなくなってたら。
もしOSのアップデートでFreeRADIUSが起動しなくなったら。
全社員から「ネット繋がらないぞ!」って電話が殺到するんですよね? 僕一人じゃ対応しきれません!

リナックス先生

そう、認証サーバーはインフラの「心臓部」。ここが止まると全てが止まるわ。
だからこそ、トラブルが起きた時に「3分で原因を特定するスキル」と、そもそも1台壊れても動き続ける「冗長化(冗長構成)」が不可欠なの。
最後は、インフラエンジニアとして最も大切な「守り」の技術をマスターして締めくくりましょう!

今回は、FreeRADIUS運用の総決算。
エラーログから原因を特定するフローチャートと、サーバーを2台並べて可用性を高めるフェイルオーバー構成、そして自作スクリプトによる死活監視までを徹底解説します。


第1章:トラブルシューティングの基本フロー

「繋がらない!」と連絡が来た時、闇雲に設定ファイルをいじってはいけません。
以下の手順で冷静に切り分けを行いましょう。

Step 1: サービスの状態確認

まずはFreeRADIUS自体が起動しているか確認します。

sudo systemctl status radiusd
  • Active: active (running) → プロセスは生きています。Step 3へ。
  • Active: failed → プロセスが死んでいます。Step 2へ。

Step 2: 起動エラーの原因特定(radiusd -X)

サービスが落ちている場合、systemctl start で無理やり起こそうとする前に、必ずデバッグモードで起動して「なぜ死んだか」を聞き出します。

# まずサービスを完全に止める
sudo systemctl stop radiusd

# デバッグモードで起動
sudo radiusd -X

画面の最後の数行に ErrorFatal という文字と共に原因が表示されます。

Step 3: ネットワークとポートの確認

プロセスは生きているのに繋がらない場合、ファイアウォールかネットワークの問題です。

# ポートが開いているか確認
sudo ss -ulnp | grep radiusd

udp 1812udp 1813 が表示されていますか?
表示されていなければ、設定ファイル(radiusd.conf)の listen セクションが間違っている可能性があります。
表示されているなら、firewall-cmd --list-all でファイアウォールの設定を確認してください。

Step 4: 認証テスト(radtest)

サーバー内部からは繋がるかを確認します。

radtest testuser password localhost 1812 testing123
  • これで成功する → クライアント(AP)とサーバー間の通信経路や、Shared Secretの間違いが疑われます。
  • これで失敗する → ユーザーID/PASS間違い、DB接続エラーなどが疑われます。

第2章:よくあるエラーメッセージと対処法(逆引き事典)

デバッグモード(radiusd -X)で表示される代表的なエラーとその対策をまとめました。

Case 1: “Address already in use”

意味: ポート(1812/1813)が既に使用されています。
原因: systemctl で起動したまま、radiusd -X を実行しようとした場合によく起きます。
対策: sudo killall radiusd で全てのプロセスを殺してから、再度実行してください。

Case 2: “Could not link driver rlm_sql_mysql”

意味: MySQL用のドライバが見つかりません。
原因: 第3回で解説した freeradius-mysql パッケージがインストールされていないか、バージョン不整合です。
対策: sudo dnf install freeradius-mysql を実行してください。

Case 3: “Ignoring request to auth address … from unknown client”

意味: 知らないクライアント(ルーター)からのリクエストなので無視しました。
原因: clients.conf に、接続元のルーター(AP)のIPアドレスが登録されていません。
対策: clients.conf に正しいIPとSecretを登録し、再起動してください。

Case 4: “Access-Reject” (Password incorrect)

意味: パスワードが間違っています。
原因: 単純な入力ミスか、DBへの登録形式ミス。
対策: EAP-PEAP(MSCHAPv2)の場合、パスワードは Cleartext-Password で登録する必要があります。MD5などでハッシュ化していないか確認してください。

Case 5: “Child PID … is dying”

意味: 処理プロセスがクラッシュしています。
原因: メモリ不足、またはスレッド数の設定ミス。
対策: radiusd.confmax_servers などの値を下げるか、サーバーのメモリを増設してください。


第3章:冗長化(Redundancy)の基本戦略

トラブル対応も大事ですが、そもそも「1台壊れてもサービスを止めない」構成にしておくのがプロの仕事です。
RADIUSサーバーの冗長化には、大きく分けて2つのアプローチがあります。

方式 仕組み 難易度 コスト
クライアントサイド
フェイルオーバー
Wi-Fi APの設定で「プライマリ」「セカンダリ」の2台を指定する。
ロードバランサ
(VIP) 方式
RADIUSの前にロードバランサ(仮想IP)を置き、負荷分散する。

今回は、追加機材が不要で、AlmaLinuxサーバーをもう1台用意するだけで実現できる「クライアントサイドフェイルオーバー(Active/Standby)」構成を採用します。


第4章:セカンダリサーバーの構築と同期

2台目のサーバー(セカンダリ)を用意し、1台目(プライマリ)と同じ設定をコピーします。

1. セカンダリサーバーの準備

第1回〜第3回の手順に従い、FreeRADIUSとMariaDBをインストールします。
IPアドレスは 192.168.1.101 とします。

2. 設定ファイルの同期

プライマリサーバーの設定ファイル(/etc/raddb/)を、セカンダリにコピーします。
rsync コマンドを使うのが便利です。

プライマリサーバー上で実行:

# raddbディレクトリをセカンダリへ転送
sudo rsync -avz -e ssh /etc/raddb/ root@192.168.1.101:/etc/raddb/

※特に clients.confmods-enabled/sites-enabled/、そして certs/(証明書)の同期が重要です。
証明書が異なると、フェイルオーバーした瞬間にクライアントPC側で「証明書エラー」が出て繋がりません。

3. データベースの同期(レプリケーション)

ユーザー情報はDBにあるため、DBも同期する必要があります。
本格的には「MariaDBレプリケーション(Master-Slave)」を組むべきですが、簡易的には mysqldump で定期コピーでも運用可能です。

プライマリでバックアップ:

mysqldump -u root -p radius > radius_backup.sql

セカンダリでリストア:

mysql -u root -p radius < radius_backup.sql

これをcronで夜間に実行すれば、前日までのユーザー情報は同期されます。


第5章:Wi-Fiアクセスポイント側の設定

サーバーが2台あっても、Wi-Fiルーター(NAS)がそれを知らなければ意味がありません。
APの管理画面で、RADIUSサーバーの設定を変更します。

設定項目(例)

  • プライマリサーバー IP: 192.168.1.100
  • プライマリ ポート: 1812
  • プライマリ Secret: mysecret123
  • セカンダリサーバー IP: 192.168.1.101
  • セカンダリ ポート: 1812
  • セカンダリ Secret: mysecret123

多くの業務用AP(Cisco, Aruba, Yamaha, Buffalo Proなど)には、このように2台目を設定する欄があります。
これにより、APは普段プライマリに問い合わせ、応答がない場合(タイムアウト)のみセカンダリに問い合わせるようになります。

⚠️ 重要:タイムアウト設定
AP側の「RADIUSタイムアウト」設定が長すぎると(例:30秒)、プライマリが死んだ時にユーザーは30秒待たされることになります。
推奨は「3秒〜5秒」程度です。


第6章:自作スクリプトによる死活監視

サーバーが死んだらすぐに気づけるよう、簡単な監視スクリプトを作ってみましょう。
radtest コマンドの結果を見て、失敗したらメールやSlackに通知する仕組みです。

監視スクリプト例(monitor_radius.sh)

#!/bin/bash

# 監視対象
TARGET_IP="192.168.1.100"
USER="monitor_user"
PASS="monitor_pass"
SECRET="testing123"

# radtest実行
RESULT=$(radtest $USER $PASS $TARGET_IP 1812 $SECRET)

# 結果判定
if echo "$RESULT" | grep -q "Access-Accept"; then
    echo "OK: RADIUS is alive."
    exit 0
else
    echo "CRITICAL: RADIUS is DOWN!"
    # ここにメール送信やSlack通知コマンドを書く
    # mail -s "RADIUS DOWN" admin@example.com < /dev/null
    exit 1
fi

このスクリプトを、監視用の別サーバー(またはセカンダリサーバー)のcronに登録して、5分おきに実行させれば、簡易監視システムの完成です。

*/5 * * * * /path/to/monitor_radius.sh

講座まとめ:あなたはもう「認証基盤の守護者」だ

全8回、本当にお疲れ様でした。
ここまで読み進め、手を動かしたあなたは、もうFreeRADIUS初心者ではありません。
認証基盤の構築から、セキュリティ強化、ログ分析、そして障害対応までこなせる「認証のエキスパート」です。

FreeRADIUS完全攻略講座 修了チェックリスト:

  • FreeRADIUSのインストールと基本設定ができる。
  • MySQL(MariaDB)と連携し、大量のユーザーを管理できる。
  • daloRADIUSを使ってGUIで運用できる。
  • 電子証明書を発行し、EAP-PEAP認証を構築できる。
  • Google Authenticatorで多要素認証を実装できる。
  • アカウンティングログを分析し、利用状況を可視化できる。
  • ログからトラブル原因を特定し、冗長構成で可用性を担保できる。

認証システムは、地味ですがインフラの中で最も重要な役割を担っています。
あなたが構築したこのサーバーが、会社のセキュリティを守り、社員が安心して働ける環境を支えていくのです。

この講座で得た知識を武器に、ぜひ現場での課題解決に役立ててください。
リナックス先生は、あなたのエンジニアとしてのさらなる飛躍を応援しています。
また別の講座でお会いしましょう!

▼ エンジニアとしてのキャリアを加速させる ▼

冗長構成を試す
「VPS」で実験環境

おすすめVPSを見る

サーバー知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント