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-LinkArcher T4U 3.0ac/n/a/b/gOKOKrtl8812bu(raspberry用 git
TP-LinkTL-WN823Nac/n/a/b/gOKOK8192eu
TP-LinkTL-WN822Nac/n/a/b/gOKOK8192eu
BuffaloWI-U2-433DMSac/n/a/b/gOKOKrtl8812au または 88XXau  ※1
BuffaloWLI-UC-GNM2Sn/b/gOKOKなし ※2
I-O DataWN-AC867Uac/n/a/b/gOKOKrtl8812au または 88XXau  ※1
IO-DATAWN-G150UMKn/b/gNG
※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 に書いてある手順に従うのが無難です。