【備忘録】Raspberry Piを長時間起動するとWi-Fiが認識されるのに繋がらなくなる件

Raspberry Pi

皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。

今年は雪降らないのかな?と思っていましたが、年明けから一気に積もりましたね。
ときどき新潟市の方に出かけたりするのですが、積雪量の違いに唖然。
同じ県なのにどうしてこんなに違うんでしょう…。(泣)

最近はラズパイを使ったシステム開発が多く、いろいろとネタが出てきます。
今回は、Wi-Fiが認識されているのに通信できない原因とその解決方法についてご紹介します。

まず結論:省電力設定はOFFにすべし

本記事は、調査した内容や設定手順を一通りまとめた、少し長めの記事です。

結論から言うと、Raspberry Piを長時間稼働させる場合、Wi-Fiの省電力設定(power_save)が原因で通信不能になることがあります。そのため、常時稼働させる用途では、Wi-Fi の省電力設定は基本的にOFFにしておくことをおすすめします。

以降では、その切り分け方法と恒久対策についてまとめています。

エージング中、Wi-Fiが繋がっていないことが判明

先日、ある案件のシステムのエージング(慣らし運転)を実施していました。
このシステムは、外部機器から取得したデータを、Wi-Fi経由でWeb配信する構成になっています。

ある朝、システムの状態を確認したところ、データの配信が停止していることが発覚しました。
接続状態を見ると、どうやらWi-Fiが切れているように見えました。
そこで、原因を特定するために、いくつか切り分けを行うことにしました。

べんぞうくん
べんぞうくん

複数機器を扱うシステム構成の場合は、まず機器ごとに切り分けて確認するのが基本だよ!

備考:動作環境
今回の動作環境は以下の通りです。
モデル:Raspberry Pi 5
OS:Trixie(13)

1. Wi-Fiの接続状態を確認する

まずはAPを再起動し、ラズパイ以外の機器で接続すると、問題なく接続できました。続いて、ラズパイを再接続したところ、こちらは接続できませんでした。IPアドレスを確認すると正常に割り振られており、画面右上のステータスを見ても、APへの接続は問題ないように見えます。

ラズパイ:画面右上のWi-Fiステータス

しかし、pingを実行してみると、通信は通りませんでした。

ラズパイ:ターミナルでのping実行結果
べんぞうくん
べんぞうくん

宛先ホストに到達できません(Destination Host Unreachable)と出ているね。

この時点で、ラズパイ側に原因があることが分かります。
ここまでの状況を整理すると、「ラズパイがWi-Fiに接続できているように見えるが、通信自体が正常に行えていない」という状態です。次に、どこが壊れているのかを調べていきます。

2. 設定状態を調べる

ここからは、Chat GPTを活用しながら原因を探っていきます。
今回の症状は、電源や高負荷をきっかけに、無線ドライバが正常に動作しなくなるケースに近いようです。そこで、Wi-Fiの状態を段階的に確認するため、以下の4つのコマンドを実行して、どの段階で問題が起きているのかを切り分けていきます。

※ コマンドの実行結果は必要なもののみ抜粋しています。

① 無線インターフェースの基本状態確認

まずは、無線インターフェースが OS・ドライバ・ハードのレベルで正しく認識されているかを確認します。

user@raspberrypi:~ $ iw dev
Interface wlan0
    ssid Buffalo-A-****
	type managed

wlan0は存在しているので、無線LANデバイス自体は認識されていることが分かります。
つまり、ハード故障やドライバ未ロードといった致命的な問題ではないと判断できます。

② 無線LANの論理的な接続状態確認

続いて、どのAPにどんな条件で接続していることになっているかを確認します。

user@raspberrypi:~ $ iwconfig wlan0
	ESSID:"Buffalo-A-****"
	Access Point: CC:E1:D5:**:**:**
	Frequency:5.5 GHz
	Power Management:on

正しいSSID/APに関連付けされており、周波数交渉も完了していることが分かります。
この時点で、「Wi-Fiが切断されている」可能性は低いと判断できます。
なお、「Power Management:on」については後々重要なポイントとなってきます。

③ 接続状態の詳細確認(802.11レベル)

次に、無線LAN(802.11)のリンク状態そのものを確認します。

user@raspberrypi:~ $ iw wlan0 link
	Connected to cc:e1:d5:**:**:** (on wlan0)
	SSID: Buffalo-A-****
	freq: 5500.0

APとの無線リンクは正常に成立していることが分かります。

④ ARP状態の確認

最後に、IP通信が実際に成立しているかを確認します。
各IPアドレスは以下を示します。
・192.168.**.1:アクセスポイント(ルーター)のIPアドレス
・192.168.**.230:外部PCの初期IPアドレス
・192.168.**.233:外部PCの再起動後IPアドレス

user@raspberrypi:~ $ ip neigh show dev wlan0
192.168.**.1 FAILED 
192.168.**.230 FAILED 
192.168.**.233 lladdr ae:f5:1d:**:**:** STALE

備考:ARPとは?
ARP(Address Resolution Protocol)は、IPアドレスとMACアドレスを対応付けるための仕組みです。
Wi-Fi や LAN で通信する際、実際のデータ送受信はMACアドレス宛てに行われるため、IP通信の前に必ず ARP による解決処理が行われます。そのため、ARP が失敗するとIPアドレスを持っていてもping や通信が通らなくなるという状態になります。

ここが今回の調査で最も重要なポイントです。
・FAILED → ARP要求を送ったが、応答が返ってきていない
・STALE → 過去には通信できていた痕跡が残っている

つまり、Wi-Fi 自体は接続されているものの、IP 通信に必要な ARP 解決が行われておらず、通信が成立していない状態であることが分かります。

ここまでの結果から、Wi-Fi が「切断」されているのではなく、通信処理だけが壊れている状態だと判断できます。

省電力設定が原因と考えた理由

ここまでの切り分けにより、通信処理が壊れているということは分かりました。
では、なぜこのような状態になるのでしょうか?

これまで実機でデバッグしていた際はこのような現象は一度も発生していませんでした。
つまり、長時間稼働させていること自体がトリガーになっている可能性が考えられます。

改めて各コマンドの出力結果を見直していたところ、「② 無線LANの論理的な接続状態確認」では次のように表示されていました。

Power Management:on

これは、Wi-Fi が省電力モードで動作していることを示しています。
無線LANの省電力機能は、ノートPCなどでは有効ですが、常時稼働させるシステムでは問題を引き起こすこともあります。そこで、省電力設定が今回の事象に関係しているのではないかと考え、「ラズパイ Wi-Fi 切断」などのキーワードで情報を調べてみました。
すると、省電力設定が原因で通信が不安定になる事例がいくつか見つかったため、実際に設定を変更して解決するか検証してみることにしました。

省電力設定の無効化

以下では、実際に省電力設定を無効化する手順について説明します。

1. 省電力設定の状態を確認する

まず、現在の省電力設定を確認します。

iw dev wlan0 get power_save

Power save: on」と表示されたら、Wi-Fiが省電力モードで動作していることが分かります。

2. NetworkManager経由で省電力を無効化する

実行時に、 iw / iwconfig で失敗するケースがあるため、NetworkManager経由で設定する方法を採用します。まず、現在の接続名を確認します。

nmcli connection show
NAME            DEVICE
Buffalo-A-****  wlan0

続いて、省電力設定を無効化します。末尾の「2」は省電力が無効であることを意味します。

sudo nmcli connection modify "Buffalo-A-****" 802-11-wireless.powersave 2

最後に、設定を反映します。

sudo nmcli connection down "Buffalo-A-****"
sudo nmcli connection up "Buffalo-A-****"

3. 変更が反映されたか確認する

「1. 省電力設定の状態を確認する」を再度実行し、「Power save: off」と表示されることを確認します。pingを送信し、正常に通れば設定は完了です。
その後、エージングを再開しましたが、数日間問題なく無事に動作できました。

べんぞうくん
べんぞうくん

NetworkManagerに設定が保存されているので、再起動しても大丈夫。

最後に

今回は「Wi-Fiが認識されているのに通信できない原因とその解決方法」についてご紹介しました。
省電力設定が原因だったとは盲点でした…。
よほどの理由がない限りは、設定をOFFにしておくのが良さそうです。

ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
https://www.net-nsi.co.jp/toiawase.html

べんぞうくん
べんぞうくん

この記事が役に立ったらいいねを押してね~

タイトルとURLをコピーしました