Raspberry Pi3 を使用してCaptive Portalを作る事にしました。

また、CoovaChilli は日本語の情報が少ないのでメモ書きする事にしました。

 

ネットワーク設定(固定IP)

①.vi /etc/dhcpcd.conf

interface eth0
static ip_address=192.168.11.2/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

interface wlan0
static ip_address=192.168.43.1/24
static routers=192.168.43.1
static domain_name_servers=192.168.43.1

②.vi /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual

 

Raspberry Pi3の設定

①.apt-get update

②.apt-get upgrade

③.rpi-update

※.「-bash: rpi-update: コマンドが見つかりません」の設定方法

wget https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update
mv ./rpi-update /usr/bin/rpi-update
chmod +x /usr/bin/rpi-update
rpi-update

④.reboot

 

hostapd導入と設定

①.apt-get install hostapd

②.zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz > /etc/hostapd/hostapd.conf

③.vi /etc/hostapd/hostapd.conf

※.以下の内容を最後に記入します。

interface=wlan0
driver=nl80211
ssid=xxxx
country_code=JP
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=xxxx
rsn_pairwise=CCMP

ssid、wpa_passphrase は環境に合わせて設定します。

④.vi /etc/default/hostapd

※.以下の内容を最後に記入します。

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

⑤.WPASupplicantを無効

※.以下のコマンドを実行して無効にします。

mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service ~/

 

isc-dhcp-server導入と設定

①.apt-get install isc-dhcp-server

②.vi /etc/dhcp/dhcpd.conf

※.以下の内容を最後に記入します。

authoritative;

subnet 192.168.43.0 netmask 255.255.255.0 {
option routers 192.168.43.1;
option broadcast-address 192.168.43.255;
option subnet-mask 255.255.255.0;
option domain-name "local";
option domain-name-servers 8.8.8.8,8.8.4.4;
default-lease-time 600;
max-lease-time 1800;
range 192.168.43.2 192.168.43.254;
}

WiFiの情報になるので環境に合わせて設定してください。

③.vi /etc/default/isc-dhcp-server

変更前

INTERFACES=""

変更後

INTERFACES="wlan0"

④.vi /etc/sysctl.conf

※.#を解除しています。

変更前

#net.ipv4.ip_forward=1

変更後

net.ipv4.ip_forward=1

⑤.iptables の登録

※.以下のコマンドを実行します。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptables-save > /etc/iptables.ipv4.nat

⑥.vi /etc/network/interfaces

※.以下の内容を最後に記入します。

pre-up iptables-restore < /etc/iptables.ipv4.nat

⑦.WiFiの接続確認

※.WiFiが正常に接続出来る事を確認します。

⑧.chkconfig isc-dhcp-server off

※.isc-dhcp-server の自動起動を無効にします。

CoovaChilliがDHCPの機能があるので必ず無効にする必要があります。

 

haserl導入

①.mkdir /root/tmp

②.cd /root/tmp

③.wget http://ftp.cn.debian.org/debian/pool/main/h/haserl/haserl_0.9.35-2_armhf.deb

※.必ず最新版(0.9.35以上)を導入してください。

④.apt-get install liblua5.2-0

⑤.dpkg -i haserl_0.9.35-2_armhf.deb

⑥.rm haserl_0.9.35-2_armhf.deb

 

FreeRadiu導入

①.apt-get install freeradius

 

PostgreSQL導入と設定

①.apt-get install freeradius-postgresql postgresql-9.4

※.パッケージを導入します。

②.su – postgres

※.postgres のユーザーに変更します。

③.psql

※.コマンドが実行出来るようにします。

④.alter role postgres with password ‘xxxxx’;

※.パスワードを変更します。

ALTER ROLE と表示すれば成功です。

⑤.\q

※.コマンドを終了します。

⑥.createdb radius

※.freeradius用のDBを作成します。

⑦.psql -l

※.radiusが作成出来ている事を確認します。

名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
radius | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres

⑦.vi /etc/postgresql/9.4/main/postgresql.conf

変更前

#listen_addresses = 'localhost'

変更後

listen_addresses = '*'

変更前

#password_encryption = on

変更後

password_encryption = on

⑧.vi /etc/postgresql/9.4/main/pg_hba.conf

変更前

# IPv4 local connections:
host all all 127.0.0.1/32 md5

変更後

# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.11.0/24 md5
host all all 192.168.43.0/24 md5

⑨.権限を変更する。

※.以下の内容に変更する。

chmod 666 /etc/freeradius/sql/postgresql/schema.sql
chmod 666 /etc/freeradius/sql/postgresql/admin.sql
chmod 666 /etc/freeradius/sql/postgresql/nas.sql

⑩.su – postgres

⑪.psql -h localhost radius

※.radius にログインします。

⑫.SQLファイルを実行する。

※.以下のSQL文を実行します。

\i /etc/freeradius/sql/postgresql/schema.sql
\i /etc/freeradius/sql/postgresql/admin.sql
\i /etc/freeradius/sql/postgresql/nas.sql

⑬.\q

※.コマンドを終了します。

⑭.exit

※.終了します。

⑮.権限を変更する。

※.以下の内容で変更する。

chmod 640 /etc/freeradius/sql/postgresql/schema.sql
chmod 640 /etc/freeradius/sql/postgresql/admin.sql
chmod 640 /etc/freeradius/sql/postgresql/nas.sql

 

FreeRadiu設定(PostgreSQL)

①.vi /etc/freeradius/sql.conf

※.28行目を変更する。

変更前

database = "mysql"

変更後

database = "postgresql"

※.36行目を変更する。

変更前

server = "localhost"
#port = 3306
login = "radius"
password = "radpass"

変更後

server = "localhost"
port = 5432
login = "postgres"
password = "xxxxx"

passwordは環境に合わせて変更します。

※.114行目を変更する。

変更前

#$INCLUDE sql/${database}/dialup.conf

変更後

$INCLUDE sql/postgresql/dialup.conf

※.114行目を変更していないと以下のエラー内容が表示します。

Unable to open file "/etc/freeradius/sql/ postgresql/dialup.conf": No such file or directory
Errors reading or parsing /etc/freeradius/radiusd.conf

②.vi /etc/freeradius/radiusd.conf

※.751行目を変更する。

変更前

# $INCLUDE sql.conf

変更後

$INCLUDE sql.conf

#を解除します。

③.vi /etc/freeradius/sites-available/default

※.177行目を変更する。(authorize部分を変更)

変更前

# sql

変更後

sql

#を解除します。

※.406行目を変更する。(accounting部分を変更)

変更前

# sql

変更後

sql

#を解除します。

※.475行目を変更する。(post-auth部分を変更)

変更前

# sql

変更後

sql

#を解除します。

④.vi /etc/freeradius/sites-available/inner-tunnel

※.132行目を変更する。(authorize部分を変更)

変更前

# sql

変更後

sql

⑤./etc/init.d/freeradius stop

※.freeradiusを停止します。

⑥.freeradius -XXX

※.freeradiusを検証します。

... adding new socket proxy address * port 59613
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814
Ready to process requests.

設定に問題無い場合は上記の内容が表示します。

⑦./etc/init.d/freeradius start

※.freeradius を起動します。

⑧.su – postgres

※.postgres のユーザーに変更します。

⑨.psql -h localhost radius postgres

※.radius にログインします。

⑩.SQL文を実行する。

※.ログイン時に使用する情報を登録します。

INSERT INTO radcheck(username, attribute, op, value) VALUES ('ユーザー名', 'Cleartext-Password', ':=', 'パスワード');

ユーザー名とパスワードは環境に合わせて設定します。

⑪.接続確認を実行する。

※.radiusで認証出来る事を確認します。

radtest ユーザー名 パスワード localhost 1 testing123

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=65, length=20 と

表示すれば問題ないです。

 

CoovaChilli導入

①.apt-get install debhelper libssl-dev gengetopt libtool automake

※.リビルド用のパッケージを導入します。

②.wget https://github.com/coova/coova-chilli/archive/1.3.1.4.tar.gz

※.最新版のcoova-chilli-1.3.1.4をダウンロードします。

③.tar xvf 1.3.1.4.tar.gz

※.解凍します。

④.cd coova-chilli-1.3.1.4

⑤.export CFLAGS=”-Wno-error”

※.エラーを回避するためのおまじないです。

⑥.export CXXFLAGS=”-Wno-error”

※.エラーを回避するためのおまじないです。

⑦.echo 9 > debian/compat

※.パッケージの互換性を保つための設定です。

⑧.vi /root/tmp/coova-chilli-1.3.1.4/debian/rules

※.52行目の部分を修正します。

変更前

$(MAKE) DESTDIR=$(CURDIR)/debian/coova-chilli install

変更後

$(MAKE) DESTDIR=/ install

⑨.dpkg-buildpackage -us -uc

※.リビルドを実行します。

⑩.cd ..

※.パッケージが出来た場所に移動します。

⑪.dpkg -i coova-chilli_1.3.0_armhf.deb

※.リビルド後のパッケージを導入します。

⑫.スクリプト確認

※.Y か I  : パッケージメンテナのバージョンをインストールする を選択する。

 

CoovaChilli設定

①.vi /etc/chilli/defaults

※.以下の内容で設定します

HS_WANIF=eth0
HS_LANIF=wlan0

HS_NETWORK=192.168.43.0
HS_UAMLISTEN=192.168.43.1

HS_DNS1=8.8.8.8
HS_DNS2=8.8.4.4

環境で合わせるようにしてください。

②.vi /etc/default/chilli

変更前

START_CHILLI=0

変更後

START_CHILLI=1

③.vi /etc/chilli/wwwsh

変更前

haserl=$(which haserl 2>/dev/null)

変更後

haserl=/usr/bin/haserl

 

CoovaChilli起動

①./etc/init.d/chilli start

※.coova-chilli を起動します。

②.WiFi に接続します。

WiFi に接続する事でCaptive Portalの状態が確認できます。

 

補足情報

CoovaChilliのリビルド時の追加オプション

機能を追加する時に必要かも知れないのでメモ書きです。

vi /root/tmp/coova-chilli-1.3.1.4/debian/rules

※.19行目の「config.status: configure」に追加する。

--enable-statusfile --enable-dhcpopt --enable-sessgarden \
--enable-ipwhitelist --enable-miniconfig

 

CoovaChilli デバッグコマンド

※.通信状態などが確認できます。

chilli --fg --debug

パケットキャプチャ

※.Wiresharkで解析する時に使用したコマンドです。

tcpdump -n -i tun0 -s 0 -w dumpfile.cap

CoovaChilli強制終了方法

①.ps alx | grep chilli*

※.CoovaChilliのプロセスを確認します。

②.kill プロセスID

※.強制的にプロセスを終了します。