RaspberryPiを無線AP化したかった話

hostapdでRaspberryPiを無線AP化したかったが遅すぎて使えなかった

BEAN

TL;DR(今北産業)

hostapdでRaspberryPi 3BをAP化してみたが、
速度が遅すぎて使い物にならない。
解散。

TL;DRの意味を勘違いして使っていたら顰蹙を買ったので気をつけて使おう!

あと、結構雑に書いてます。 ほぼほぼ自分のメモ用です。

やろうと思った経緯

前の記事で, イーサネットコンバータをつくりました。

このイーサネットコンバータは現役でバリバリ使ってる(実はDHCPサーバのところをDocker化してさらにDNSサーバとか立っていたりするんですがそれはまた別の話)んですが、不満が一つ。

自分の部屋にあるアンテナが弱いWi-Fi機器の接続が悪い。

サブPCだとか、iPhoneだとか、イーサネットポートがないRaspberryPiだとか。 こいつらの電波のつかみが悪い。

寝る前にYouTubeを消化したり、TikTokを研究したりするときに、体勢によってはWi-Fiが途切れたりします。これが若干ストレス。

さらにデスクトップPCにリモートデスクトップで操作するときがきつい。 デスクトップPCにベッド上からアクセスするときとかがこれなんですが、いったん部屋外のWiFi取って、 そこから目の前(しかし届かない)デスクトップPCに接続するのになんでそんなことしないとだめなんだ!!ってなります。

これを解決するのが、イーサネットコンバータがWi-Fiを飛ばすこと。

てことでトライしてみたって話です。

結論から言うと、失敗するんですが…。

弊環境

  • Dockerが入ったRaspberryPi 3B
    ほかは前の記事同様。

RaspberryPi 3 AP 化

目指す完成図は以下

Dockerで構築

hostapdはソフトウェアアクセスポイントを構築するソフトウェア。 これいれてゴニョゴニョすると無線アクセスポイントが建ちます。

構築のベースとしたのは Raspberry Pi 3で、Wi-Fi アクセスポイントルータ (Docker版) です。

↑の記事ではDockerコンテナのベースに resin/rpi-raspbian:stretch を使用していますが、Alpine Linuxでもイケます。あと、Dockerfileなんか書いてません(試用中に使い物にはならないことがわかったため。)

なので、ポチポチコマンドを投下します。

作業手順

// ホストのネットワークを使います。
docker run --net=host --privileged -it alpine:latest ash
// 以下Dockerコンテナ環境
apk update
apk add hostapd iptables iproute2 vim

Qiitaの記事と違って、DHCPサーバを入れていません。
これは、すでにRPi上にDHCPサーバ環境を構築しているからです。

手順としてはDHCPの設定をやっておきます。
自分メモですが…

// dnsmasqにおいて、<dev>,<ip_start>,<ip_end>,<time> でデバイス別で割り当てられる。
dhcp-range = wlan0,192.168.12.100, 192.168.12.200, 24h

NICの設定をします。 今回作成するネットワーク(192.168.12.0/24)の準備です。

ip link set wlan0 down
ip link set wlan0 up
ip addr flush dev wlan0
ip addr add 192.168.12.1/24 dev wlan0

iptablesの設定をします。

iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT

hostapdの設定をします。 SSIDはpifi3, パスフレーズはraspberry。

vim /etc/hostapd/hostapd.conf
// 以下を上書き
interface=wlan0
driver=nl80211
ssid=pifi3
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=raspberry
rsn_pairwise=CCMP
// ここまで上書き
// 以下でAP化完了
hostapd -B /etc/hostapd/hostapd.conf

使えるかテスト

スクショなど残していませんが、 iPhoneを繋いでで使うと fast.comで1Mbps~5Mbpsが出ました。
このときイーサネットコンバータに有線で接続しているデスクトップは20Mbps以上出ていました。 で、Wi-Fiの親に接続すると8Mbps以上という結果。

つまり 遅すぎる

これまでより速いというのが必須条件だったため、これは使えん。 あと、iPhoneとmacを同時接続すると、mac側はタイムアウトするぐらい遅い。

さらに構築したAPへの接続が遅いという問題もあります。 勝手に切れたりも…。 まぁ安定しないですね。

チャンネルを空いているとこに逃したりもしましたが、どうも安定しないし遅い。

Dockerでやってるのが悪いのかと思ったので、ホストで直で実行することに。

非Dockerで構築

sudo apt install hostapd

同じように設定。

実行時ですが、おそらく、systemctl startするとmaskがどうのこうの言われるので、

sudo sytemctl unmask hostpad
sudo sytemctl enable hostpad
sudo sytemctl start hostpad

使えるかテスト

これでも同じぐらい遅いです。

ダメです使えません。諦めました。

所感

Raspberry Pi 3B のアンテナが弱いのかどうかは定かではありませんが、使いものになりませんでした。
改善策としては、強いWi-Fiドングルを買ってやるとかですかね。
それか、hostapdは諦めて、ブリッジできるWi-Fiルータ買うとか。(あんまりわかってませんが)

あまりお金がないのでしばらくは長い有線をつかってリモートデスクトップを、iPhoneはYouTubeが途切れるぐらいの現象には広い心を持って接していきたいと思います。

あと関係ないですが、King Gnu の『傘』めっちゃ良いです。

参考文献

comments powered by Disqus