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
※.強制的にプロセスを終了します。