2019/06/15

6/15/2019
1

この記事について

この記事を最後まで読んで実践してもらえれば、Raspberry Piで自由に制限がかけられる、WiFiルータが作れてしまいます。

しっかり正確に記載していますので、是非実践してみてください。


はじめに

もうかれこれ2年以上になりますが、筆者の長男自身より、ネットを使いすぎるので制限をかけてほしいとの相談があり、どうせならプロキシーサーバのsquidを利用した細かい制限をかけていこうということで、WiFiルータを組む事になりました。

Wifiルータサーバ機器はどうしようということで、今流行りのRaspberry Piで作成することにしました。

筆者はLinuxは得意なのですがシングルボードコンピュータは初めで、少々手こずりましたが、無事快適に制限が掛けられるWifiサーバを完成させ運用しております

youtubeなどの動画サイトは制限なく観てしまいますから、大人であっても制限を掛けたほうが良いかもしれませんね。

それでは、ご説明をいたします。


ネットワーク構成

ネットワーク構成は次のようになります。

 光ルータ ⇔(ワイヤード) Wifiルータ(大人用) ⇔(ワイヤード) Raspberry Pi WiFiルータ
  • WiFiルータ(大人用) 192.168.10.1
  • Raspberry Pi WiFiルータ 192.168.150.1

各ルータ間はすべてLANケーブル接続されている構成です。

Raspberry PiはWiFiクライアントと、WiFiサーバの両方になることはできないようなので、WiFiルータにするのであれば、上位回線とはLANケーブル接続するしかないようです。

この構成でWiFiルータ(大人用)は制限なく、Raspberry Piルータ側にはいろいろと制限をかける構成に仕上げます。


RasberryPiの購入とインストール


・RasberryPi 3B+の購入

Raspberry PiはAmazonなどで簡単に買えます。WiFiを国内で使うなら、技適取得者を購入したいところです。次なら技適も採取しているようなので、よろしかったらどうぞ。

また、SDカードも必要です。32GBで十分です。以下にリンクをおいておきますね。


・RasberryPiのインストール

Raspberry Piのインストールは、まず、PCを使ったインストールファイルのダウンロード及びSDカードへのコピーを行います。

出来上がったSDカードをRaspberry Piへセットして起動します。

初回起動時にインストーラが起動しますので、順当に進めれば作業完了となります。

注意点として、PCでSDカードへコピーする際、PCで使っているファイルシステムと違う形式での書き込みになるので、処理中にPC側から認識できないメディアとのメッセージが出ることがあります。メッセージは無視して進めてください。

筆者は以下サイトの記事を参考にインストールしました。

最近のRaspberry Piイメージ(Raspbian)をインストールするメモ


RasberryPI WiFiルータ構築

WiFiサーバ機能をhostapdで、dhcpサーバとdnsキャッシュでdnsmasqを、制限などを付与するproxyにsquidをproxyの自動設定スクリプトの配布用にapache2をインストールして、設定していきましょう。

・必要パッケージのインストール

次のコマンドにて必要パッケージをインストールしましょう。

# sudo apt-get update && apt-get upgrade
# sudo apt-get install hostapd squid dnsmasq apache2
# systemctl enable hostapd
# systemctl enable squid
# systemctl enable dnsmasq
# systemctl enable apache2

・hostapdの起動順変更

hostapdの起動をdnsmasqより後する必要がありますので、次のようにsystemdのファイルを修正します。

Filename: /lib/systemd/system/hostapd.service
[Unit]
Description=Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
#After=network.target    ←コメントアウト
After=dnsmasq.service    ←追加

修正が終わりましたら、次のコマンドにてsystemdに読み込みを行ってください。

# systemctl daemon-reload

・WiFiサーバのipアドレス設定(dhcpcd)

次のファイルの最終行に追加してください。WiFiサブネットを「192.168.150」、WiFiサーバを「192.168.150.1」とした設定です。変更される場合は、その設定を記載してください。

Filename: /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.150.1/24

・WiFiサーバの設定

WiFiサーバの設定を行います。以下設定はSSIDをRasberry、パスワードをxxxxとした設定です。設定するときは変えてくださいね。

Filename: /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
country_code=JP
#SSIDを設定
ssid=Rasberry
hw_mode=g
channel=7
ieee80211n=1
ieee80211d=1
beacon_int=100
dtim_period=2
macaddr_acl=0
wmm_enabled=1
macaddr_acl=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
#パスワード
wpa_passphrase=xxxx
rsn_pairwise=CCMP

DAEMON_CONFの行を次のように変更してください。これをしないと、hostapdが起動されません。

Filename: /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

・WiFiサーバ配下のipアドレス発行

Wifiクライアントに発行するipアドレスの範囲を設定してください。以下では、192.168.150.2から192.168.150.40までの範囲で、48時間を期限で発行する設定をしています。

また、ファイル中のwpad.datは、後続で設定するsquidプロキシーサーバを自動配布で参照する設定です。どうも最近のスマホなどは、セキュリティーの関係からプロキシーサーバの自動設定は完全自動では行われないようになっておりますが、この設定があれば一部の手間が省けるので設定をされたほうが良いと思います。

Filename: /etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.150.2,192.168.150.40,255.255.255.0,48h
dhcp-option=252,http://192.168.150.1/wpad.dat
Filename: /var/www/html/wpad.dat
function FindProxyForURL(url,host)
{
       return "PROXY 192.168.150.1:8080";
}

・ipv4パケットの転送設定

net.ipv4.ip_forwardの行を次のように変更してください。

Filename: /etc/sysctl.conf
net.ipv4.ip_forward=1

ファイル変更が終わったら、次のコマンドで反映します。

sysctl -p

ここまで設定が終わったら、wifiルータとしてはほぼ可動しているはずです。最後にプロキシーで制限を掛けて完成です。


・squidプロキシーサーバの設定

いよいよ、制限設定です。squidの設定は結構奥が深いので、こちらなどを参考にさせてもらいました。

条件のトレース方法は、【squid.conf】acl設定書式 ~複数条件や正規表現(url_regex), http_accessの順番, whitelist~を参考にさせてもらいました。

どうも条件を上からトレースして、条件に合致したらそれで終わり(先に禁止条件が合致したら、後続にOK条件があっても評価してくれない、逆もしかり)になるようです。

長男からは、動画サイトを制限してほしいとのオーダーでしたので、ブラックリストを定義して、そちらに時間指定で制限を掛けてみました。

動画サイトについては、7:00-8:00,19:00-20:00のみ閲覧可能、土日については、19:00-21:00まで延長の設定で対処してみました。

Filename: /etc/squid/squid.conf
acl blacklist dstdomain "/etc/squid/blacklist"
acl ok_black_time1 time 7:00-8:00      #許可時間を定義
acl ok_black_time2 time 19:00-20:00    #許可時間を定義
acl ok_black_time_weekend time 19:00-21:00 SA     #許可時間を定義 土曜と日曜
acl tomo src 192.168.150.27/255.255.255.255   #長男のスマホIPアドレス
acl tomopc src 192.168.150.4/255.255.255.255  #長男のパソコンIPアドレス
http_access allow blacklist ok_black_time_weekend tomo tomopc
http_access allow blacklist ok_black_time1 tomo
http_access allow blacklist ok_black_time2 tomo
http_access deny blacklist
http_access allow tomo tomopc
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl home src 192.168.12.0/24
acl home src 192.168.150.0/24
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow home
http_access deny all
http_port 8080
coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
acl NOCACHE src 192.168.150.0/24
cache deny NOCACHE
Filename: /etc/squid/blacklist
.googlevideo.com
.youtube.com
.nicovideo.jp
.pixiv.net
.bokete.jp

・スマホ側プロキシー設定

スマホからは全自動認識させたいところですが、Wifi接続の際にプロキシー設定をしないといけないようです。次のように詳細をクリックいただければ入力欄が表示されますので、そちらで指定して接続してください。

以上で、動画制限付きの家庭用Wifi環境ができました。みなさんも参考にしてみてください。

1 コメント:

  1. 失礼致しました。Amazonで日本のラズベリーパイを販売している林遠です。
    ブログを拝見しました。弊社のラズベリーパイ3b+レビューブログ記事を書きしてくれませんか。
    こちらは無料でサンプルを提供します。
    連絡メールはjp02@vertue.cnです。
    御返事お待ちしております。どうぞよろしくお願いします。

    返信削除