Ralink と Realtek
安価な小型USB Wi-FiデバイスをhostapdでAPにしたい。
まずは、ドライバもhostapdもiwとnetlinkの素で行けるという、rt2800usbドライバで動くデバイスで試したところ、設定が素すぎたのか、pingがロスる。
rtl8192cuドライバで動くデバイスも手元にあったので試そう。と、その前に検索すると、素で動くけどいまいちとか、別ドライバがあるという情報が出てくる。
有線のr8168/r8169と似た展開か。
こちらによると、ドライバを変えると、hostapdも変える必要があるのか。
バイナリをコピーする記事も見かけるが、Raspberry Pi用だとARMで動かないし、Ubuntuではパッケージも無さそうだし、buildしてみるか…。
環境
- Ubuntu 16.04 amd64
- Planex GW-USNano2
ドライバ
検索すると、Realtekのドライバをベースにしたと思われるリポジトリが、github上にたくさんある。
正直どれが良いのかわからないが、Ubuntuでの情報があるのと、ほぼ最新のカーネルでも確認されていそうで、手順がご丁寧に書かれているので、こちらにしてみよう。
ドライバのbuild
迷いどころがないほど手順通りだったので、省略…
hostapd
これまたパッチ状態のもの、パッチ適用済みのものなど、色々あるが、パッチながら手順が明確なこちらにしてみる。
ただ、hostapdは、自分のど素人ぶりを発揮し、迷いどころが少しあった。
hostapdのバージョン
hostapdは、aptで入れた後、バイナリを置き換えることを想定していたが、両者でバージョンが違うようだ。
- xenialのhostapdは2.4?
- 最新版とRTLパッチは2.6
依存しているのはnetlinkくらいだし、入れるバイナリも2つだけなので、2.4が2.6になっても問題ない、と信じて2.6にしてみる。
hostapdのbuild
勘違いしていたが、パッチの手順には、hostapdのビルド手順が含まれているわけではない。
hostapdのビルド手順は、hostapdのREADMEを見る必要がある。が、Makefileのほうが詳しいような…。
本家をダウンロードし、パッチの手順と合体させて、
$ cd hostapd-2.6
$ patch -Np1 -i ~/git/hostapd-rtl871xdrv/rtlxdrv.patch
$ cd hostapd
$ cp defconfig .config
(.config編集)
$ echo CONFIG_DRIVER_RTW=y >> .config
$ make
(.configの編集)では、defaultのdefconfigから、
-
CONFIG_DRIVER_NL80211=y
を無効に -
CONFIG_IEEE80211N=y
を有効に
してみた。RTWはNL80211とは排他ではなさそうだが、依存ライブラリのインストールが必要で、かつRealtekのドライバが対応していないので、無効にしてみた。
hostapdのインストール
$ make -n install
install -D hostapd /usr/local/bin//hostapd
install -D hostapd_cli /usr/local/bin//hostapd_cli
で確認すると、Ubuntuのデフォルト設置場所である/usr/sbinと異なる。
$ BINDIR=/usr/sbin make -n install
install -D hostapd /usr/sbin/hostapd
install -D hostapd_cli /usr/sbin/hostapd_cli
これなら大丈夫そう。
hostapdの設定
aptで入れて入っている/etc/hostapd/hostapd.conf
をベースに、hostapd.conf.rtl871xdrvの部分を編集。
device_name
とmanufacturer
これはビルド時にCONFIG_WPS=y
になっていないと使えないようだ。
WPSは使わないので、設定しなかった。
ブリッジの設定
# For nl80211, this parameter can be used to request the AP interface to be
# added to the bridge automatically (brctl may refuse to do this before hostapd
# has been started to change the interface mode). If needed, the bridge
# interface is also created.
nl80211
でなくrtl871xdrv
だと、どうなるんでしょう。
よくわからないが、/etc/network/interfaces
にてbrctl
で作る、で何となく動いている…。
感想
- ドライバは毒が入っているとこわいので、複数あると選択が難しい…
- やっぱり11ac対応機が欲しい!