miyoshitan’s blog

岐阜発。自動車サービス現場とPython・Flask・Raspberry Pi・M5Stackの実践記録。

AI・IoT・個人開発の実験ログと考察をまとめる技術ブログ

【実録】Raspberry Pi 5にWi-Fiモジュールを追加した話|詰まったポイントと解決策まとめ

Raspberry Pi 5でKali Linuxを使ったWi-Fiモニタリングを試みたところ、内蔵Wi-Fiではモニターモードへの移行はできたものの、SSIDをまったく拾えないという壁にぶつかりました。この記事では、外付けWi-Fiモジュールを購入してドライバをビルドするまでの実録と、各所で詰まったポイントおよびその解決策を詳しくまとめます。同じ状況で困っている方の参考になれば幸いです。

なぜ外付けWi-Fiモジュールが必要だったのか

Raspberry Pi 5には標準でWi-Fi機能が搭載されていますが、Kali Linuxでワイヤレスセキュリティのテストを行う場合、モニターモードパケットインジェクションに対応したアダプタが別途必要になるケースがほとんどです。

私の環境では、内蔵Wi-FiをKali Linux上でモニターモードに切り替えること自体はコマンドで成功しました。しかし「iwlist wlan0 scan」を実行しても周囲のSSIDをまったく拾えない状態が続きました。これはドライバレベルでの対応が不完全だったためと考えられます。

複数の電気屋に「モニターモード対応を明記したアダプタはあるか」と問い合わせましたが、「パッケージにはモニターモード対応の記載はない」という回答ばかり。結果として、Linuxコミュニティでの評判を頼りにBUFFALO製のWI-U2-433DMS(Realtek RTL8812AU チップ搭載)を選びました。

カーネルヘッダーのビルド手順|ここが最初の難関

WI-U2-433DMSをラズパイに挿しただけでは認識されません。RTL8812AUドライバはカーネルヘッダーが必要なため、まず手動でビルドする必要があります。Kali Linux for Raspberry Pi(arm64)の場合、公式リポジトリからヘッダーが取れないことが多く、ソースからのビルドが現実的な選択肢になります。

sudo apt-get update
sudo apt-get install linux-source
cd /usr/src/linux-source-$(uname -r)
sudo make headers_install

ここで注意が必要なのは、uname -r で表示されるバージョンと、インストールされている linux-source のバージョンが一致しているかどうかです。バージョンが食い違っているとヘッダーの展開後にドライバビルドが失敗します。私は最初にこのバージョンずれで1時間ほどハマりました。

確認コマンド:

dpkg -l | grep linux-source
uname -r

バージョンが一致していることを確認したら次のステップへ進みます。

RTL8812AUドライバのインストール手順

カーネルヘッダーの準備ができたら、Realtekのオープンソースドライバ(aircrack-ngチームがメンテナンスしているフォーク版)をビルドします。DKMSを使うとカーネルアップデート時に自動で再ビルドされるので、この方法が推奨です。

sudo apt-get install dkms git
git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au
sudo make dkms_install

DKMSインストールが正常に完了したら、念のため手動でもモジュールをビルドしておきます。

sudo make -j$(nproc)
sudo make modules_install
sudo make install

詰まりポイント: make dkms_install の途中で「kernel headers not found」というエラーが出た場合、/lib/modules/$(uname -r)/build へのシンボリックリンクが正しく張られていない可能性があります。以下で確認・修正します。

ls -la /lib/modules/$(uname -r)/build
# リンク切れの場合
sudo ln -s /usr/src/linux-headers-$(uname -r) /lib/modules/$(uname -r)/build

再起動後の動作確認とモニターモードのテスト

ドライバのインストールが完了したら再起動します。

sudo reboot

再起動後、アダプタが認識されているかを確認します。

ip link show
# もしくは
iwconfig

wlan1(またはwlan0)として新しいインターフェースが表示されれば認識成功です。続けてモニターモードに切り替えます。

sudo ip link set wlan1 down
sudo iw dev wlan1 set type monitor
sudo ip link set wlan1 up

モニターモードへの切り替えが成功したら、周囲のSSIDを拾えるか確認します。

sudo airodump-ng wlan1

今回の私の環境では、このコマンドを実行した瞬間に周囲のアクセスポイントが一気に表示され、内蔵Wi-Fiでは到達できなかった問題がようやく解決しました。作業開始から約3時間かかりましたが、原因が「ドライバの対応不足」だったと分かった時点で、正しいアダプタを選べば解決できると確信できたので、ゴールは見えていました。

詰まったポイントまとめと選択のコツ

今回の作業を振り返って、同じ状況に陥りやすいポイントと対策をまとめます。

  • アダプタ選び: モニターモード対応を明示的に謳っているアダプタは店頭では少ない。aircrack-ngやKali Linuxのコミュニティが動作確認済みとして挙げているチップ(RTL8812AU、RTL8814AU、AR9271など)を搭載したモデルを選ぶのが確実。
  • カーネルヘッダーのバージョン一致: uname -rlinux-source のバージョンが一致していないと必ず失敗する。バージョン固定での運用か、rpi-updateを避けることが重要。
  • DKMSを使う理由: 手動インストールだけだとカーネルアップデート後に認識しなくなる。DKMSを使えば自動再ビルドされるので安心。
  • シンボリックリンクの確認: Kali Linux ARM版では /lib/modules/$(uname -r)/build が存在しないケースがある。ビルドエラーの際は必ず確認。

Raspberry Pi 5でKali Linuxを使って本格的なWi-Fi解析環境を構築したい場合、外付けアダプタは最初から用意しておくことを強くおすすめします。内蔵Wi-Fiのモニターモード対応は環境によってムラがあり、時間を無駄にするリスクがあります。

今後はこのセットアップをベースに、Pythonスクリプトで周辺ネットワークのセキュリティ評価を自動化する仕組みを作る予定です。またその内容を記事にしたいと思います。

#RaspberryPi #KaliLinux #電子工作 #WiFi #DIY #ラズパイ #セキュリティ #Linux #RTL8812AU #モニターモード