bmobile、DTIやIIJなどの速度のでないSIMで快適(高速)にWebブラウジングする方法


DTIワンコインSIMを使って9ヶ月くらいになります。

昨年まではそんなに遅さを感じなかったのですが、外出先でどうしてもWebを開かなくてはいけないことがちょっとずつですが多くなって来ました。

そこでWebコンテンツなどを最適化(圧縮)するようなプロキシをたてようかと思いました。

DTIの他にbmobileやIIJのSIMにも有効だと思います。

プロキシサーバは以下の3つを使用します。

  • Privoxy: 広告削除などの不必要なコンテンツをフィルタリングできるプロキシ。
  • Squidリバースプロキシ。キャッシュ。負荷分散に使われることが多いです。(nginxで代用する場合もありますね。)
  • Ziproxy: 画像などのコンテンツを圧縮するプロキシ。

通信の流れは以下の順番で行われます。

インターネット->Privoxy(フィルタリング)->Ziproxy(コンテンツ圧縮)->Squid(キャッシュ)->スマフォ

それでは構築はじめます。

環境はUbuntu 12.04 64bit

  1. Privoxyの構築
  2. Ziproxyの構築
  3. Squidの構築

1. Privoxyの構築

$ sudo apt-get install privoxy

※フィルタリングの設定等はここでは書きません。私の鯖ではアダルト広告をブロックするようなフィルタリングをしています。 他の広告は基本的にブロックしていません。

2. Ziproxyの構築

ziproxyは新しいstableを使用したいのでソースからビルド

$ wget “http://downloads.sourceforge.net/project/ziproxy/ziproxy/ziproxy-3.3.0/ziproxy-3.3.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fziproxy%2Ffiles%2Fziproxy%2Fziproxy-3.3.0%2F&ts=1366246950&use_mirror=jaist” -O ziproxy-3.3.0.tar.bz2
$ tar lxvf ziproxy-3.3.0.tar.bz2
$ sudo apt-get install libgif-dev libjasper-dev libsasl2-dev
$ make -j8
$ sudo make install
$ sudo cp -ra etc/ziproxy /usr/local/etc/
$ ziproxy -h
$ sudo mkdir -p /var/log/ziproxy
$ sudo chown ziproxy:ziproxy /var/log/ziproxy
$ sudo adduser –no-create-home –disabled-password ziproxy
$ sudo vim /etc/init.d/ziproxy
$ sudo chmod +x /etc/init.d/ziproxy
$ sudo update-rc.d ziproxy defaults
$ sudo service ziproxy start
$ sudo service ziproxy status

続いて設定

$ sudo vim /usr/local/etc/ziproxy/ziproxy.conf

3. Squidの構築

squidは新しいstableを使用したいのでソースからビルド

$ wget http://www.squid-cache.org/Versions/v3/3.3/squid-3.3.3.tar.gz
$ tar zxvf squid-3.3.3.tar.gz
$ cd squid-3.3.3
$ ./configure –prefix=/usr/local/squid
$ make -j8
$ sudo make install
$ sudo ln -s /usr/local/squid/sbin/squid /usr/local/sbin/
$ sudo ln -s /usr/local/squid/bin/squidclient /usr/local/bin/
$ squid -v
$ sudo chown nobody:nogroup -R /usr/local/squid/var/
$ sudo vim /etc/init.d/squid
$ sudo update-rc.d squid defaults

start-stop-daemonだと複数pid管理ができないっぽい?のかプロセスを殺しきれなかったのでこちらを参考にしました。

続いて設定
$ sudo vim /usr/local/squid/etc/squid.conf
以上で構築終了です。

各プロキシサーバを再起動します

$ sudo service privoxy restart
$ sudo service ziproxy restart
$ sudo squid -f /usr/local/squid/etc/squid.conf -z
$ sudo service squid restart

squid -zでスワップファイルを最初に必ず作ってください。

squidサービスを起動してもすぐに終了してしまう場合の一つにこれがあります。

以上で終了です。

ちなみに

$ squidclient mgr:info

でsquidのキャッシュ情報等が見れます。

Cache information for squidのヒット率を見ながらrefresh_patternを調整していけばいいと思います。

私はこの他にユーザ認証とクライアント-リモート鯖間で通信を暗号化したかったので

SSH Tunnelを使ってリモート鯖にあるプロキシへアクセスするようにしています。

そのためプロキシサーバを内側からのみアクセスできるようにsquidのaclはそのままにしています。

これをするとパフォーマンスが結構落ちちゃう場合がありますが、公衆無線LANなどでも安心して使えるようになります。

最後に、ポート等はデフォルトを避けるようにしましょう!

今後の予定:
よくアクセスするサイトのフィードから事前にクローラを走らせキャッシュさせる仕組みをつくろうかなと考えています。