Wi-Fi Hotspot + CaptivePortal

Raspberry Pi A+ CaptivePortal
Raspberry Pi A+ CaptivePortal
Raspberry Pi A+ CaptivePortal
Raspberry Pi A+ CaptivePortal


CaptivePortalの再検証のためこの記事は古くなっています。
「野良Wi-Fiでコンテンツ配信」をご参考にしてください。

不動産デベロッパー向けバーチャルモデルルームの運用向けに作成しました。

WiFiホットスポットとかWiFiアクセスポイントルーターといわれる部類の機能にWebサーバ機能を合体させた機器です。
自らコンテンツ配信できるWiFiホットスポットになります。

PL法など

心配される場合、既存のパソコンであればどれでも同様の機能の搭載は可能です。今回の場合、最安値のパソコンを選んで搭載していますが、コレでもオーバースペックパソコンになります。

開発環境

開発手順

OSを最新の状態にアップデート

$ sudo apt-get update
$ sudo apt-get upgrade

ファームウェア更新

$ sudo rpi-update

WiFiのタイプを確認

lsmodして、ドライバを確認

$ /sbin/lsmod

こちらを参考にさせていただきました。http://d.hatena.ne.jp/penkoba/20130806/1375742819

以下、mac80211ベースで作業します。

Webサーバのインストール

$ sudo apt-get install lighttpd
$ sudo apt-get install php5-common php5-cgi php5

属性変更

$ sudo chown www-data:www-data /var/www
$ sudo chmod 775 /var/www
$ sudo usermod -a -G www-data pi

fastCGI有効

$ sudo lighty-enable-mod fastcgi-php
$ sudo service lighttpd force-reload

アクセスポイントの設定

※hostapdを設定してしまうとインターネットにつながらなくなるためdnsmasqも先に入れておきます。

$ sudo apt-get install hostapd
$ sudo apt-get install dnsmasq

mac80211ベースWi-Fiアダプタはhostapdを入れ替える必要があります。
本家のhostapdがサポートしているのですが、apt-getでインストールされるものはバージョンが古く未対応。

$ wget http://w1.fi/releases/hostapd-2.0.tar.gz
$ tar xvf hostapd-2.0.tar.gz

またコンパイルに以下のパッケージが必要なのでインストールします。

$ sudo apt-get install libnl-genl-3-dev libssl-dev

ソースツリー内のhostapdに移動し、defconfigを.configとしてコピーし、.configにCONFIG_LIBNL32=yを追加してからコンパイルします。

$ cd hostapd-2.0/hostapd
$ cp defconfig .config
$ echo CONFIG_LIBNL32=y >> .config
$ make

コンパイルされたhostapdでオリジナルのバイナリを置き換えます。

$ sudo mv /usr/sbin/hostapd{,.orig}
$ sudo mv hostapd /usr/sbin/
$ cd ~
$ sudo leafpad /etc/network/interfaces

wlan0全てコメントアウトし以下追記

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0
$ sudo leafpad /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
$ sudo leafpad /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=応仁のLAN
hw_mode=g
channel=11
beacon_int=100
auth_algs=3
wmm_enabled=1

(hostapdは日本語SSID名が使えるそうです。)

再起動

DNSの設定

$ sudo leafpad /etc/dnsmasq.conf

末尾に追記

interface=wlan0
dhcp-range=10.0.0.2,10.0.0.50,255.255.255.0,12h
address=/#/10.0.0.1
$ sudo service hostapd start
$ sudo service dnsmasq restart
$ sudo leafpad /etc/hosts

末尾に追記

10.0.0.1 MyPi

再起動

不具合出たのでココも設定

デスクトップ右上のWiFi Networks(dhcpcdui)Setting

Configure interface wlan0
checked Automatically…
IP 10.0.0.1
Router 10.0.0.1
DNS Server 10.0.01


必要に応じて、/var/www内に強制表示させたいwebコンテンツ一式をUSBメモリとUSBハブを付けて追加

再起動

最後に

sudo raspi-configでコンソール起動に変更

既知の問題点

sudo leafpad /etc/dnsmasq.conf
address=/#/10.0.0.1
の/#/10.0.0.1でWEB参照を強制できると思ったら例外がありました。
例えば、
apple.comはOK。
apple.com/jp/はNGで404を返します。
でした。回避策探してます。
WiFi接続認証画面を用意して接続成功後にブラウザ自動起動ができれば理想と思います。