monitor mode ができるUSB wifi アダプタに関する最新情報がほとんどないため、技適のあるUSB wifi アダプタを数種類購入して検証した結果です。
検証環境
- ハードウエア:Raspberry pi 4
- OS (raspbian):Buster (debian_vesion 10.1)
- カーネル:Linux raspberrypi 4.19.66-v7+
調査結果
メーカー | 型番 | 対応802.11規格 | monitor mode | 安定性 | 追加ドライバー |
TP-Link | Archer T4U 3.0 | ac/n/a/b/g | OK | OK | rtl8812bu(raspberry用 git) |
TP-Link | TL-WN823N | ac/n/a/b/g | OK | OK | 8192eu |
TP-Link | TL-WN822N | ac/n/a/b/g | OK | OK | 8192eu |
Buffalo | WI-U2-433DMS | ac/n/a/b/g | OK | OK | rtl8812au または 88XXau ※1 |
Buffalo | WLI-UC-GNM2S | n/b/g | OK | OK | なし ※2 |
I-O Data | WN-AC867U | ac/n/a/b/g | OK | OK | rtl8812au または 88XXau ※1 |
IO-DATA | WN-G150UMK | n/b/g | NG ※3 ※4 | — | なし ※5 |
※1
両方インストールされている場合は両方ロードされますが、問題なくmonitor mode が動作します。
※2
ロードされるドライバは、 raspberry pi に標準で入っている rt2800lib,rt2x00lib,rt2x00usb でした。
※3
raspberry pi に標準で入っている 8192cu のドライバーで通常のNICとして認識され、通常のIP通信用NIC(managed)としては問題なく利用できます。
※4
iw list などのコマンドで認識されたNICの詳細を確認すると、supported interfaces に monitor がリストされています。しかしながら、iwconfig wlan1 mode monitor でmonitor mode を設定しようとすると “SET failed on device wlan1 ; Invalid argument.” のエラーになり、monitor modeを設定できません。iw phy phy1 interface add mon0 type monitor の場合だと mon0 インターフェースをエラー無く作成できますが、tcpdump などを実行しても何のフレームもキャプチャできない結果となりました。
※5
なお、「realtek 8192cu のチップセットの場合は、標準でロードされる 8192cu を/etc/modprobe.d/ の blacklistに入れて、代わりに rtl8192cu を blacklist から外し、rtlwifi 経由でロードすると動くよ」という2015年のブログ記事があります。rtlwifi もrtl8192cu も標準で入っていたため試してみましたが、WN-G1650UMK の場合は ifconfig でも iw でもNICとして認識されない結果になりました。
Raspberry Piへの追加ドライバーのインストールTIPS
調査結果表にある ドライバーへのリンクはどれも github のリポジトリになります。基本的には git clone したリポジトリの README.md に書いてあるインストール方法(make またはdkms)の通りに行えば、インストールできます。ここでは、共通するTIPSを記載しておきます。
1.raspberry pi のカーネル、パッケージを最新にする
カーネルやパッケージが古いと、ドライバーのmake の際にヘッダと参照するディレクトリなどのバージョンミスマッチが起きやすいため、最初に最新パッケージと最新カーネルにしておくのが無難です。下記のコマンドでアップデートできます。
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo reboot
2.必要なpackageをapt-get でインストールする
ドライバーやヘッダファイル、git など、おおむね下記のパッケージが必要になります。
sudo apt-get -y install linux-image-rpi-rpfv linux-headers-rpi-rpfv raspberrypi-kernel-headers dkms build-essential bc git
3.ドライバーのgit リポジトリをclone する
前項のapt-get で /usr/src/ にlinux カーネルヘッダもインストールされているので、/usr/src/ 以下にclone するのがわかりやすくてよいかと思います。例として、下記に rtl8812eu のドライバーのgit リポジトリをcloneする場合を記載します。
cd /usr/src
sudo git clone https://github.com/Mange/rtl8192eu-linux-driver
4.Makefile をRaspberry Pi 用に編集する
git clone したドライバーのディレクトリ内にある Makefile の初期設定は、ほとんどの場合 CONFIG_PLATFORM_I386_PC が有効になっています (y になっている)。Raspberry Pi 用にするには、CONFIG_PLATFORM_ARM_RPI が有効になるように vi などのエディタで編集します。このとき、CONFIG_PLATFORM_I386_PC を無効(n にする)のを忘れないように注意して下さい。
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y
4.ドライバーをmake する
git clone したドライバーのREADME.md には、多くの場合 dkms を利用する場合と make を実行する場合と両方書かれています。また、ドライバーによっては競合する他のドライバーを /etc/modprobe.d/ に blacklist として追加するように書かれている場合もあるので、 README.md に書いてある手順に従うのが無難です。