動かざることバグの如し

近づきたいよ 君の理想に

raspberryPiでアクセスポイント構築

ダウンロード

ここから落とす。マジで回線遅い。落としたイメージはddコマンド等でSDに焼くのが早い。

初期設定

  • piとrootのパスワード変更。特にrootは最初パスワードが設定されてないので
sudo passwd
  • キーボードレイアウトの変更
  • タイムゾーンの変更(Tokyo)
  • update&upgrade

第一戦 ~アクセスポイント構築まで

/etc/network/interfacesにてeth0部分を以下のように変更してIPアドレス固定化。IPアドレス部分はご自由に

iface eth0 inet static
address 192.168.101.123
netmask 255.255.255.0
gateway 192.168.101.1
broadcast 192.168.101.255

/etc/sysctl.confにて以下の1行コメントアウト

#net.ipv4.ip_forward=1

hostapdのインストール

sudo apt-get install hostapd

/etc/default/hostapdにてDAEMON_CONFを以下に書き換える

DAEMON_CONF="/etc/hostapd/hostapd.conf"

/etc/hostapd/hostapd.confに以下を記述(新規作成)

interface=wlan0
driver=nl80211
ssid=aaaaaa
hw_mode=g
channel=2
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_pairwise=TKIP

/etc/network/interfacesを再度編集してアクセスポイントのほうも固定化しておく

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
auto wlan0
iface wlan0 inet static
address 192.168.123.1
netmask 255.255.255.0
gateway 192.168.101.123

iptablesの設定

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

このままだと再起動すると設定がリセットされてしまうので以下をインストール

sudo apt-get install iptables-persistent

rootで以下を実行

iptables-save > /etc/iptables/rules.v4
service iptables-persistent restart

iptables -Lで確かめると吉

isc-dhcp-serverのインストール

sudo apt-get install isc-dhcp-server

/etc/default/isc-dhcp-serverにて以下の2点を変更

DHCPD_CONF=/etc/dhcp/dhcpd.conf

INTERFACES="wlan0"

/etc/dhcp/dhcpd.confも以下のように変更(変更点のみ抜粋)

(コメントで無効化)
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

(コメントアウト)
authoritative;

(追記)
subnet 192.168.123.0 netmask 255.255.255.0 {
    range 192.168.123.100 192.168.123.200;
    option broadcast-address 192.168.123.255;
    option routers 192.168.123.1;
    option domain-name "local";
    option domain-name-servers 8.8.8.8;
}

ifconfigして以下のようになっていたらいける

eth0      Link encap:Ethernet  HWaddr b8:27:eb:cd:6f:44  
          inet addr:192.168.101.123  Bcast:192.168.101.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:957 errors:0 dropped:0 overruns:0 frame:0
          TX packets:634 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:308763 (301.5 KiB)  TX bytes:81359 (79.4 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

mon.wlan0 Link encap:UNSPEC  HWaddr B0-C7-45-AB-19-5E-00-00-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:287 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:52148 (50.9 KiB)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr b0:c7:45:ab:19:5e  
          inet addr:192.168.123.1  Bcast:192.168.123.255  Mask:255.255.255.0          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:525 errors:0 dropped:0 overruns:0 frame:0
          TX packets:458 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:64401 (62.8 KiB)  TX bytes:285758 (279.0 KiB)

DHCPサーバー再起動

sudo service isc-dhcp-server restart

実行してみる

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

これでつながればアクセスポイントの構築までは成功

第二戦 ~認証情報GETまで

CoovaChilliを入れるんだけど、CoovaChilli自体にIPアドレスを割り振る機能があるのでDHCPサーバーを無効化する

sudo service isc-dhcp-server stop

再起動後も起動させなくするには以下を実行

sudo update-rc.d isc-dhcp-server disable

以下のコマンドで確かめると吉

ps ax | grep isc

ダウンロードして解凍

cd /home/pi
wget http://coova-chilli.s3.amazonaws.com/coova-chilli-1.3.0.tar.gz
tar zxzf coova-chilli-1.3.0.tar.gz

コンパイル&インストール

cd coova-chilli-1.3.0
./configure --enable-miniportal
make
sudo make install

wwwディレクトリ以下も必要 configureは不要

cd www
make install

/usr/local/etc/chilli/defaultsを変更 変更部分のみ抜粋

HS_WANIF=eth0
HS_LANIF=wlan0

HS_DNS1=8.8.8.8
HS_DNS2=8.8.4.4

サイトを表示させるのに必要

sudo apt-get install haserl

以下を実行。ユーザー名chilliは特に設定なし

sudo echo '/usr/local/lib/' >> /etc/ld.so.conf
ldconfig 
mkdir -p /usr/local/var/ 
ln -s /var/run /usr/local/var
sudo adduser chilli

/etc/network/interfacesでwifi0の構成をかえておかなきゃいけない

auto wlan0
iface wlan0 inet static
address 10.1.0.1
netmask 255.255.255.0
gateway 192.168.1.100

実行

sudo /usr/local/etc/init.d/chilli start

FreeRadiusのインストール

sudo apt-get install freeradius

/etc/freeradius/usersを変更してユーザーを全許可にする。Session-Timeoutは通常要らないが検証中は入れておくと吉

DEFAULT Auth-Type := ACCEPT
        Reply-Message = "Hello, %{User-Name}",
        Session-Timeout := 60

ちなみに一般的なログイン認証の場合は以下(ユーザー名:pi、パスワード:raspberry)

"pi" Cleartext-Password := "raspberry"

FreeRADIUS再起動して以下を実行してテストしておくと吉

sudo service freeradius restart
radtest user1234 pass1234 localhost 1 testing123

https

CoovaChilliの再コンパイルする必要がある

apt-get install libssl-dev

--with-opensslを付加

./configure --enable-miniportal --with-openssl

あとはmake&make install

/usr/local/etc/chilli/sslkeyに「例の一式」を入れて以下のコマンド実行

openssl rsa -in wifiauth.net.key -out wifiauth.net.key
openssl verify -CAfile intermediate.cer wifiauth.net.cer

/usr/local/etc/chilli/defaultsを書き換え。 変更点抜粋

(書き換え)
HS_UAMUIPORT=443
HS_UAMFORMAT=https://\$HS_UAMLISTEN/www/login.chi
HS_UAMHOMEPAGE=https://\$HS_UAMLISTEN:\$HS_UAMPORT/www/coova.html

(追記)
# enable ssl redirect
HS_UAMUISSL=on
HS_REDIRSSL=on
HS_SSLKEYFILE=/usr/local/etc/chilli/sslkey/wifiauth.net.key
HS_SSLCERTFILE=/usr/local/etc/chilli/sslkey/wifiauth.net.cer

/usr/local/etc/chilli/local.confに以下を追記

sslcafile=/usr/local/etc/chilli/sslkey/intermediate.cer

これなら証明書のエラーも出ないはず?

URL変更

apt-get install bind9

/etc/bind/named.conf.optionsに以下を追記

acl localnet{
        127.0.0.1;
        10.1.0.0/16;
        192.168.101.0/24;
        };

/etc/bind/named.conf.default-zonesに以下を追記

zone "wifiauth.net" {
        type master;
        file "/etc/bind/db.wifiauth";
};

/etc/bind/db.wifiauthで「localhost」から「wifiauth.net」に変換 以下のようになる

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     wifiauth.net. root.wifiauth.net. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      wifiauth.net.
@       IN      A       10.1.0.1