読者です 読者をやめる 読者になる 読者になる

😃 mattintosh note 📝

Hello Raspberry Pi!

Arch Linux ARM で hostapd を使って無線LANアクセスポイントを作成する

Raspberry Pi Arch Linux Linux

レンタルで借りている回線終端装置兼無線LANルータの無線が RTP 通信をブチブチ切ってしまうので Raspberry Pi をアクセスポイントにした。

今回使用した無線LANアダプタは手元にあった以下の2種類。以前、試しにと買ってみたものだが結局ギガビットイーサネットアダプタを購入したので放置していた。どちらも RTL8192cu が使われている(たしか dkms-8192cu を入れたような…)。

  • Logitec LAN-WH300NU2
  • Planex GW-USNANO2A

hostapd パッケージをインストール。

pacman -S hostapd

今回は「無線ルータ」ではなく「無線アクセスポイント」を作成するのでブリッジ接続になる。ブリッジ接続を作成する方法はいくつかあるらしいが、Raspberry Pi 2 Model B+ にインストールしている Arch Linux(armv7l)では systemd で作成できるようなのでそちらの方法を選択した。

現在の Raspberry Pi の構成は有線LAN×2、無線LAN×1で、ブリッジとして使うのは eth1 と wlan0。

まず、起動時に自動でブリッジインタフェイスを作成させるために /etc/systemd/network/br0.netdev を用意する。このあたりのことは man systemd.network を読めば例などが載っている。

[NetDev]
Name=br0
Kind=bridge

次に br0 用の /etc/systemd/network/br0.network を用意する。IP アドレスは固定にしているが DHCP でも恐らく問題ない。

[Match]
Name=br0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1

次に /etc/systemd/network/eth1.network と /etc/systemd/network/wlan0.network を作成する。中身は [Match] セクションの Name の値が異なるだけ。

[Match]
Name=eth1

[Network]
Bridge=br0
[Match]
Name=wlan0

[Network]
Bridge=br0

ネットワークを再起動(した気がする)が、再起動した方が手っ取り早いかもしれない。

sudo systemctl restart systemd-network

再起動してみて br0 が作成されていれば hostapd のテストを行う。設定ファイルのサンプルが /usr/share/doc/hostapd に収録されているので hostapd.conf を適当な場所にコピーする。

cp /usr/share/doc/hostapd/hostapd.conf ~/

interface と bridge 部分を環境に合わせる。これで準備は出来たのだけど、8192cu の場合、通常の hostapd が 8192cu に対応していないらしい…。色々調べた結果 http://www.adafruit.com/downloads/adafruit_hostapd.zip で置き換えて、driver=rtl871xdrv を指定すればいいらしい。

interface=wlan0
bridge=br0
# RTL8192CUの場合
driver=rtl871xdrv

hostapd を起動する。設定ファイルに誤りがある場合は場所を教えてくれる。

sudo hostapd ~/hostapd.conf

適当なデバイスで接続して問題なく接続できれば hostapd を終了する。

誰でも気軽に接続できる状態なのでこれはこれで使い道があるかもしれないが、セキュリティの設定をしていく。WPA のパスワードを hostapd.conf に直接書くこともできるが、ここでは wpa_passphrase を使ってパスワードを作成する。SSID と PASSWORD は任意。ちなみに SSID は日本語でもOK。

wpa_passphrase SSID PASSWORD

hostapd.conf を編集する。以下はコメントアウトされていない部分だけを引っこ抜いたもの。(SSID とパスワードはダミー)

interface=wlan0
bridge=br0
driver=rtl871xdrv
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=おやき
hw_mode=g
channel=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
ieee80211n=1
eapol_key_index_workaround=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP

設定ファイルを所定の位置に移動。

sudo mv ~/hostapd.conf /etc/hostapd

権限を変更しておく。

sudo chown root:root /etc/hostapd/hostapd.conf
sudo chmod 0600 /etc/hostapd/hostapd.conf

再起動したときに hostadp が自動起動するようにしておく。

sudo systemctl enable hostapd
sudo systemctl start hostapd

前日に RTP で音楽のストリーミングをしていたときはブチブチ切れていたけど、親機を Raspberry Pi に変更したら安定するようになった。ただ、極端に負荷をかけるとネットワークが切れることがあるようだが、タブレットに地デジのデータなどを飛ばしていたりするくらいなら大丈夫っぽい。

NAS に VPN サーバに無線アクセスポイントと大活躍の Raspberry Pi。そろそろ1年だし新しいモデル出たりしないかなぁ…なんて。

Raspberry Pi 2 Model B (1)

Raspberry Pi 2 Model B (1)