10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RaspberryPi3で無線/無線ルータ

Last updated at Posted at 2016-08-16

Raspberry Pi 3 で無線ルータを作る話。brcmfmac な wifi の capability を見てみる。

valid interface combinations:
     * #{ managed } <= 1, #{ P2P-device } <= 1, #{ P2P-client, P2P-GO } <= 1,
       total <= 3, #channels <= 2
     * #{ managed } <= 1, #{ AP } <= 1, #{ P2P-client } <= 1, #{ P2P-device } <= 1,
       total <= 4, #channels <= 1

AP と managed 両方起動させられそう。試してみるとできる。rc.local に次のように追記して netdev を用意する。

/etc/rc.local
iw dev wlan0 interface add ap0 type __ap

実は wpa_supplicantmode=2 というのがあり、これで AP を作れる。/etc/network/interfaces への書き方は /usr/share/doc/wpasupplicant/README.Debian.gz に書いてある(Webにはあまり情報が出ていない)。具体的にはこんなファイルになる。

/etc/network/interfaces.d/ap0.conf
allow-hotplug ap0
iface ap0 inet manual
    wpa-ssid rpi3masq
    wpa-mode 2
    wpa-key-mgmt WPA-PSK
    wpa-psk "some preshared key"

static IPv4 addess を使うけれども、raspbian の歴史的経緯により dhcpcd.conf にアドレスを書く(さもないと IPv4 link local address も割り当てられて面倒を引き起こす)。dhcpcd は file include の仕掛けがないようなので、既存のファイルに追記する。

/etc/dhcpcd.conf
interface ap0
static ip_address 192.168.87.1/24
/etc/sysctl.d/97-ap0.conf
net.ipv4.ip_forward=1

dnsmasq を追加する。

/etc/dnsmasq.d/ap0.conf
dhcp-range=192.168.87.20,192.168.87.200,24
dhcp-option=option:router,192.168.87.1

iptables-persistent パッケージを追加する。

iptables -A FORWARD -o ap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o ap0 -j REJECT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
netfilter-persistent save

無線の周波数を国の割り当てに合わせておきましょう。/etc/default/crdaREGDOMAIN=JP を入れます。

最後にシステムを再起動させて、masquerade が動作することを確認する。

雑談(1)

hostapd で ap0 を制御する方式も試してみたけれど、結論から言うと、うまく動作させられなかった。具体的には kernel module が stack trace を吐き出して、association をうまく処理できなかった様子(未調査)。

brcmfmac: brcmf_update_bss_info: wl dtim_assoc failed (-52)

wpa_supplicant で構成した場合も、wlan0 を associate したまま ap0 を disable_network させるとかやると、同じバグを踏む様子。

雑談(2)

話の発端はこのスライド。ESP8266が特定のdhcpdからアドレスを取得できない問題への解決法のひとつ、という内容。内容自体は「そんなこともあるのか」という話だったけれど、raspi 3にUSB wifi dongleを追加していたのが、どうにも引っかかった。追加無しでできないのかと。というわけで、今回の記事。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?