ことの経緯
- 子供がネトゲばかりで勉強しないので困ってる、と友人が言ってた。
- ずっとSNS疲れを実感してて、ネット依存の自分を見つめ直したい。
- 世の中にはネット依存の人がわんさか。
とりあえず、自宅Wi-Fi環境にあれやこれや接続制限をかけてみようと思いました。
しっかり利用制限するなら、ペアレンタル・コントロール・アプリの導入や、SIMデータ通信プランの見直しが有効なのは言うまでもありません。
考え方は簡単
Free Wi-Fiを利用する時、ユーザ認証を経て一時的にネットが使える仕組みがありますよね。Captive Portalと言いますが、早い話それと同じシステムを自宅で構築しようという試みです。
接続制限は
- 何時から何時まで使えるようにする。
- 一日何時間まで使えるようにする。
- それらの組み合わせ
- 他にもいろいろ
といった感じになります。
一日に何時間までといったルータ機能がなかなかないんですよね。
システム構成
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2F51fc36a4-e5ac-fb0a-e645-8e3c0dd420ed.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=94025835e6d6d2dfcf478c304861cc8b)
- 既存インターネット・ルータ(ルータA)の下に、接続制限するルータ(ルータB)をぶら下げます。クライアント側でどちらにするか振り分けます。
- ルータB(ラズパイ+WN-G300UA)のファームウェアはOpenWrtを使い、Captive PortalのパッケージCoovaChilliをインストールします。Wi-Fi APへ接続した時に認証画面を表示し、認証サーバへ取り次ぎをします。
- 認証サーバはIronWifiのサービスを利用します。機能はFreeRADIUSがベースになっています。無料で1アクセスポイント、10ユーザまで利用できます。IronWifi - Captive Portal Demosでデモできます。本当はOpenWrtでFreeRADIUSをインストールできるようですが、私には難しそうなので外部サービスを利用することにしました。
いざ実装
- ironwifiの設定
####(A). サインアップします
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2F59cef376-7a4a-9dd1-5049-f652dc5da678.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a3cf03ea830ba01ba24526029bbdc605)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2F74af4d7d-bcad-fe1d-a5e0-402a970fad65.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=831d650c952689ec6f1571460b78c4b4)
Regionを**Tokyo(asia-northeast1)**にします。
####(B). Networksを設定をします
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2F653aea19-2d03-f459-c349-b29d9562ff0a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0f36db8e6f4c94c3e482d3eafd9ace80)
Name(ネットワーク名)を入力します。ルータの識別名です。
####(C). Captive Portalsを設定をします
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2F660b3f90-e62c-0550-3bb0-fb7e6b6e31cc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=767e09b1bf71e9322b30cc01b73a1452)
Name(最初に表示されるログイン・ページの名前)を入力します。
Networkは、(B)で登録したネットワーク名を指定します。
VendorをCoovaChilliを指定します。
Authentication ProvidersをLocal Accountにします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2Ffec29762-bcc5-b8e6-3802-59b958477c38.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f88ed1b97fff5bc04c9db4f3af2b3895)
####(D). Usersを設定をします
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F63318%2Fcb45c6d5-b9e9-48f9-2d24-899f73e7bfd5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=981a71a48798f98f69f1bdbf22ee1ca3)
詳細情報が表示されます。
Authentication Source(認証方式)をlocalにします。
Passwordを設定します。
ラズパイ、WN-G300UA、OpenWrt、CoovaChilliをインストールします
参考:
- GitHub - coova/coova-chilli - releases
- GitHub - coova/coova-chilli - INSTALL
- にたまご。- Coova Chilli 1.4のインストール方法
####(A). ラズパイとWN-G300UAとOpenWrtを、しなやかに融合させてみた(ルータモード編) の通りにインストールします
####(B). CoovaChilli 1.4をインストールします
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install tar grep diffutils patch
root@OpenWrt:~# opkg install libustream-openssl ca-bundle ca-certificates
root@OpenWrt:~# opkg install gcc autoconf automake libtool-bin make
root@OpenWrt:~# opkg install tcpdump kmod-tun
root@OpenWrt:~# opkg remove wpad-mini
root@OpenWrt:~# opkg install wpad
root@OpenWrt:~# wget https://sources.lede-project.org/gengetopt-2.22.6.tar.gz
root@OpenWrt:~# tar zxvf gengetopt-2.22.6.tar.gz
root@OpenWrt:~# cd gengetopt-2.22.6
root@OpenWrt:~gengetopt-2.22.6# sh ./configure --prefix=
root@OpenWrt:~gengetopt-2.22.6# make
root@OpenWrt:~gengetopt-2.22.6# make check
root@OpenWrt:~gengetopt-2.22.6# make install
root@OpenWrt:~# cd
root@OpenWrt:~# wget https://github.com/coova/coova-chilli/archive/1.4.tar.gz -O coova-chilli-1.4.tar.gz
root@OpenWrt:~# tar zxvf coova-chilli-1.4.tar.gz
root@OpenWrt:~# cd coova-chilli-1.4
root@OpenWrt:~# wget https://raw.githubusercontent.com/openwrt/packages/master/net/coova-chilli/patches/100-fix_compile_kmod.patch
root@OpenWrt:~# wget https://raw.githubusercontent.com/openwrt/packages/master/net/coova-chilli/patches/200-fix-compile-with-musl.patch
root@OpenWrt:~# patch -p1 < 100-fix_compile_kmod.patch
root@OpenWrt:~# patch -p1 < 200-fix-compile-with-musl.patch
root@OpenWrt:~# ./bootstrap
root@OpenWrt:~# ./configure --enable-miniportal --prefix= --bindir=/usr/bin --sbindir=/usr/sbin --includedir=/usr/include
root@OpenWrt:~# make
root@OpenWrt:~# chmod 755 /usr/share/automake-1.15/install-sh
root@OpenWrt:~# make install
####(C). CoovaChilliの環境設定をします
root@OpenWrt:~# mkdir ironwifi
root@OpenWrt:~# cd ironwifi
Captive Portalsの設定ページからOpenWrt/CoovaChilli用設定ファイルをダウンロードします。ダウンロード・リンク名はDefaultsとChilli Init Scriptですが、実際のファイル名はそれぞれdefaultsとchilliになります。
ダウンロードしたchilliとdefaultsを環境に合わせて修正します。
その際ダウンロードしたファイルに**^M**がある場合はすべて削除します。
root@OpenWrt:~/ironwifi# chmod 755 chilli
root@OpenWrt:~/ironwifi# cp -p chilli chilli.org
root@OpenWrt:~/ironwifi# cp -p defaults defaults.org
root@OpenWrt:~/ironwifi# vi chilli
(変更前)
config_load hotspot > /etc/chilli/config
(変更後)
#config_load hotspot > /etc/chilli/config
root@OpenWrt:~/ironwifi# vi defaults
(変更前)
HS_WANIF=eth1 # WAN Interface toward the Internet
(変更後)
HS_WANIF=br-lan # WAN Interface toward the Internet
設定ファイルを修正したものに置き換えます。
root@OpenWrt:~/ironwifi# mv /etc/chilli/defaults /etc/chilli/defaults.org
root@OpenWrt:~/ironwifi# cp defaults /etc/chilli/defaults
root@OpenWrt:~/ironwifi# ln -s /etc/chilli/defaults /etc/chilli/config
root@OpenWrt:~/ironwifi# mv /etc/init.d/chilli etc-init.d-chilli.org
root@OpenWrt:~/ironwifi# mv chilli /etc/init.d/chilli
root@OpenWrt:~/ironwifi# reboot
OS起動時に自動でプロセスchilliが自動実行されるようにします。
root@OpenWrt:~# /etc/init.d/chilli start
root@OpenWrt:~# /etc/init.d/chilli enable
####(D). スマホで動作確認をします
Wi-FiのSSID OpenWrt を選択し、そのパスワードを入力します。
すると Wi-Fiネットワークにログイン OpenWrt が表示されるのでそれを選択します。
その後IronWifiで設定したユーザ名とパスワードを入力すると通常通りネット接続できます。
![]() |
![]() |
![]() |
---|---|---|
![]() |
![]() |
![]() |
![]() |
||
![]() |
####(E). IronWifiで接続制限をかけます
参考:
Usersの設定ページのAttributesで接続制限の設定をします。
一日の接続時間を 1時間=60分=3600秒 に制限する。
ATTRIBUTE | TABLE | OPERATOR | VALUE |
---|---|---|---|
Max-Daily-Session | radcheck | := | 3600 |
Session-Timeout | radcheck | := | 3600 |
接続時間帯を 「19:00-20:30 JST」=「10:00-11:30 UTC」 に制限する。
参考:
ATTRIBUTE | TABLE | OPERATOR | VALUE |
---|---|---|---|
Login-Time | radcheck | := | Al1000-1130 |
時間帯 「19:00-20:30 JST」=「10:00-11:30 UTC」 のうち、1時間=60分=3600秒 接続できるようにする。
ATTRIBUTE | TABLE | OPERATOR | VALUE |
---|---|---|---|
Max-Daily-Session | radcheck | := | 3600 |
Session-Timeout | radcheck | := | 3600 |
Login-Time | radcheck | := | Al1000-1130 |
結び
あれこれと解放されたい気持ちでいっぱいです。(=^・^=)