hgot07 Hotspot Blog

主に無線LANや認証連携などの技術についてまとめるブログです。ネコは見る専。

LinuxとTP-Link Archer T2U Nanoで基地局を作る

無線LAN子機として売られているTP-Link Archer T2U Nano AC600 (ながっ!)を使って、Linux箱を基地局に仕立てるお話しです。「hostapdで一発でしょ?」あっはい。でも、いざ試してみると、まともに動かないデバイスドライバばかりです。動く環境がなかなか見つからないのでした。チップベンダRealtekのサポートの悪さは、なんとかならないんでしょうか。

この記事を起こそうと思った時には、既に11ac Wave2とWPA3、MU-MIMOに対応したT3U Nanoが登場していました。ところが、動きそうで動かないちょっとだけ動くドライバばかりで、結局APモードでうまく動く環境が作れませんでした。

ちなみに、中身のチップは以下のようです。

こんなちっちゃなドングルがアクセスポイントとして動いているのは、見ていて楽しいです (VirtualBox上のopenSUSE Tumbleweedで動作中)。

APとして動作中のT2U Nano

APとして動作中のT2U Nano

 

openSUSEを使う

最近はUbuntuで動けばそれでいいみたいなソフトウェアばかりで、困ってしまいます。私はUbuntuとはどうにも仲良くなれないので、openSUSE Leapばかり使っています。今回もこれで行くつもり……のはずが、うまくいきませんでした。何がだめかというと、現在のkernel 5.xベースのLeap 15.5では、なぜかhostapdが刺さってしまうのです。openSUSE Tumbleweedがkernel 6.xで、試してみたらうまく動いたので、今回は泣く泣くこちらで様子を見ます。

Ubuntuが使える人は、その方がよさそうです。

 

デバイスドライバ

RTL8811au, RTL8812au用のカーネルドライバがないと、wlan0みたいなデバイスが生えてきません。標準では提供されていないので、野良ビルドすることになります。

GitHubを覗くと88x2au用のドライバが幾つか見つかりますが、まともに動かないものが多かったです。唯一、APモードまできちんと動いた神ドライバが、こちら

ドライバのインストールは、git cloneしてから、make && make install で済みます。もちろんカーネルドライバをコンパイルする環境が必要なので、予め kernel-devel などのパッケージを入れておかないといけません。

カーネルがアップデートされたら、またmakeからやり直し。これだから標準でディストリビューション入るようにしてくれないベンダはダメなんです (ぶつぶつ)。

iw phyと打って、何か表示されるようになったら、おそらく無線LANバイスが生えているでしょう。ip addrでデバイス名が見えるはず。openSUSE Tumbleweedでは、wlan0みたいな簡単なやつではなくて、wlp0s20f0u1みたいに長ったらしいデバイス名で表示されます。(grubの設定をいじって、wlan0みたいに表示する方法もありますが、ここでは省略)

無線LANバイスができたら、IPアドレスを振って、確認してみます。

# ip addr add 192.168.0.1/24 dev wlan0
# ip -br addr

openSUSEyast無線LANバイスにアドレスを振ろうとすると、クライアントモードで設定しようとしてハマってしまいます。仕方がないので、DHCPサーバのスタートアップスクリプトに紛れ込ませるなどして、対処するとよいでしょう。

 

IP forwardingとIP masqueradeを設定

IP forwardingと、IP masqueradeを有効にします。

お使いのディストリビューションとバージョンによって設定方法が異なるので、各自で調べてください。

 

DHCPサーバの設定

「大したことをするわけでもないのにISC DHCP (今時ならKEA)をいじるのは面倒くさいなぁ」と思う貴方にお奨めなのがDnsmasqです。DHCPサーバとDNSサーバの機能が、恐ろしく簡単に設定できます。

色々と解説ページがあるので、詳しくは検索してみてください。

DHCPサーバとして設定が必要なのは、これ ↓ ぐらいです。/etc/dnsmasq.conf に書きます。

interface=wlan0
no-dhcp-interface=eth0
dhcp-range=192.168.0.10, 192.168.0.250, 255.255.255.0, 1h
dhcp-option=option:netmask, 255.255.255.0
dhcp-option=option:router, 192.168.0.1
dhcp-option=option:dns-server, 8.8.8.8

ちょっとハマりどころがありまして、同一ホスト上でDnsmasqが動いていても、端末がアドレス取得できない問題がありました。Firewallでポート67/udpを開けておく必要があります。

(こんなんわかるかい!🫠)

 

hostpadの設定

なにやらすごく難しい印象のhostapdですが、パラメータの意味がちょっと難しいだけで、設定箇所はそれほど多くありません。デフォルトのテンプレートはここにあります。

2.4GHz帯、WPA2-PSKのAPを設定する場合、デフォルトから以下のパラメータを変更するだけで済むはず。

interface=wlan0
driver=nl80211
ssid=testap
country_code=JP
hw_mode=g
channel=11
wpa=2
wpa_passphrase=testPass
wpa_pairwise=CCMP

hostapdを起動して、AP-ENABLEDの表示になったら、ssid= で指定したSSIDのビーコンが出ているはずです。

# hostapd /etc/hostapd.conf
wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

端末を接続して、無線LANがつながるか、アドレスが取得できるか、DNSが引けるか、インターネットの通信ができるかを確認します。

おや、54Mbpsという低速でリンクアップしていますね?素の11bなら、それで正しいです。

ieee80211n=1 と設定すれば、少しだけ高速になります。しかし、2.4GHz帯でチャネルボンディングを使うのは極悪なので、諦めましょう。HT40の設定はしないこと。

 

5GHz帯でVHT80の設定

「速度が欲しいか?」

5GHz帯で、VHT80の設定をしてみます。hostapd.confの変更点は以下のとおり。

hw_mode=a
channel=48
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
ieee80211ac=1
vht_capab=[SHORT-GI-80][HTC-VHT]
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42

まず11nの設定をして、HT40が使えるようにしています。続いて11acの設定をして、VHT80が使えるようにしています。

ht_capabとvht_capabの設定が分かりにくいですが、テンプレートでコメントアウトされているものを有効化しただけです。HT40には+と-があり、HT40-はchannelに指定されたチャネルより低い方のチャネルと組み合わせて40MHz幅にする方法です。

 

バァーーン

VHT80が有効化されたチャネルグラフ

VHT80が有効化されたチャネルグラフ

端末の接続状況 (IPアドレスは説明と異なる)

端末の接続状況 (IPアドレスは説明と異なる)

SSIDとバンド幅の様子

SSIDとバンド幅の様子

仕様上は最高433Mbpsですが、T2U Nanoは超小型なので、こんなものでしょうか。ビームフォーミングがないので、普通の基地局として使うには厳しいこともあると思います。過度な期待はしないでください。

 

宿題

近くに多数の基地局がある環境では、T2U Nanoはそれらの電波に負けてしまい、端末が接続しにくくなるようです。のろのろと遅いビーコンを出しているせいもあるかもしれません。この辺の最適化は今後の課題です。

 

(ギター演奏)
To Be Continued

 

[2023/11/24追記] T2U Nanoと似た型番で、Bluetooth対応のT2UB Nanoというモデルがあります。試してみたところ、rtw88_8821cuドライバで認識するのですが、"failed to get tx report from firmware" というエラーが出て、電波を吹くに至りませんでした。TOKAIZ TWA-001 (RTL8811cu)も同症状で、電波が出ませんでした。残念!