スマホのデータ通信量を激減させるVPN+Ziproxyサーバの作り方

2017/05/16

centos.logo_
お久しぶりです。
今回はスマホのhttp通信量を激減させるVPN+Ziproxyサーバの作り方を紹介します。仕組みとか作り方は後で書くとして、まずメリット・デメリットから。

メリット

  • 画像を低解像度に圧縮するので通信量を約40%~80%減できる
  • スマホ->自宅->外部Webサーバ の流れで通信を行うので、普段の スマホ->外部Webサーバ と比べてかなり安定安全
  • 拡張性が高い。広告フィルタのPrivoxy、キャッシュのSquid を多段プロキシとして併用すれば更に通信量を削減可能

デメリット

  • 常にVPNとZiproxyを稼働させておかないといけない
  • スマホ側は常にVPN通信を確立しておかないといけない
  • 画像がボケるので見にくい

 

VPNサーバの作り方

まず普通にL2TP(通信部)+IPsec(暗号化部)でVPNサーバを作成します。
L2TPは"xl2tpd"というソフトウェア、IPsecは"OpenSwan"というソフトウェアで構築できます。どちらもフリーウェアです。

私はここここ参考にして作成しました。



時間はかかりますが、そんなに難しくないので今回は割愛します。

最後にサーバのファイアウォールのポート開放とISPルータのポート開放をお忘れなく。
以下の6種を開放しておけば間違いないと思います。
TCP/UDP 500
TCP/UDP 1701
TCP/UDP 4500

透過型Ziproxyサーバの作り方

次に透過Ziproxyサーバの作り方です。まずは通常通りZiproxyサーバを作成します。

ではZiproxyのインストール方法です。
1. 起動に必要なライブラリ群をインストールします。
# yum install zlib-devel giflib-devel libjpeg-devel libpng-devel libjasper-devel cyrus-sasl-devel

2. 次にZiproxyをインストールします。
# yum install ziproxy

★yumでZiproxyが見つからない場合は以下の操作★
=========================
以下のリンクから最新のZiproxyをダウンロード
ziproxy - Browse Files at SourceForge.net

解凍とコンパイルとインストール
# bunzip2 ziproxy-3.3.1.tar.bz2
# tar xvf ziproxy-3.3.1.tar
# cd ziproxy-3.3.1
# ./configure --with-jasper
# make
# make install
=========================

3. 続けて保存場所の変更とユーザ設定。コピペでどうぞ
# cp -arv etc/ziproxy /etc
# chown -R root:root /etc/ziproxy
# useradd -s /sbin/nologin ziproxy
# mkdir /var/log/ziproxy
# chown ziproxy:ziproxy /var/log/ziproxy
# cp -v etc/init.d/ziproxy /etc/init.d/

 

4. 起動用スクリプトの修正
# vi /etc/init.d/ziproxy

修正前)ZIPROXY=/usr/bin/ziproxy
修正後)ZIPROXY=/usr/local/bin/ziproxy

さらに、/etc/init.d/ziproxy 内の gprintf の箇所を全て printf に変更。
コマンドモードで /gprintf で検索できます。nキーで次を検索します。便利ですよ。

5. コンフィグ
# vi /etc/ziproxy/ziproxy.conf
ポート番号を変更します。お好きな4桁数字で
修正前)# Port = 8080
修正後)Port = 8080

透過型にするためのhttp転送を有効にします
修正前)# TransparentProxy = false
修正後)TransparentProxy = true

JavaScriptを圧縮しないようにします。
修正前)# ProcessJS = false
修正後)ProcessJS = false
修正前)# ProcessHTML_JS = true
修正後)ProcessHTML_JS = false

画像圧縮を有効にします。今回はjpg2000へ圧縮変換するように設定します。変換パラメータはここを参考にしました
修正前)# ProcessToJP2 = false
修正後)ProcessToJP2 = true

修正前)# JP2ImageQuality = {25,25,25,25}
修正後)JP2ImageQuality = {25,20,20,17}

 

6. 仕上げ
OS起動時の自動起動のオン
# chkconfig ziproxy on

Ziproxyの起動
# /etc/rc.d/init.d/ziproxy start

7. 透過型にする。以下の *nat ~ COMMITを範囲を追記
# vi /etc/sysconfig/iptables

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to ports 8080
-A PREROUTING -o eth0 接続許可するネットワークアドレス/サブネット2桁 -j MASQUERADE
COMMIT

 

8.iptablesの再起動
# /etc/rc.d/init.d/iptables restart

 

iPhoneから接続してみる

やってみます。「設定」アプリから「VPN」を選んでVPNサーバの認証情報を入力します。
ここで、「すべての信号を送信」をオフにして下さい。
次に下部のプロキシ欄にZiproxyサーバのアドレス(プライベートIP)とポート番号を入れて、VPN接続開始。

その状態でここにアクセスしてみて下さい。
「判定:プロクシです」と表示されたら成功です。

広告ばかりのまとめサイトやニュースページ、Twitterのタイムライン表示で効果を発揮します。Safariだけではなく全てのアプリのhttp通信で効果が発動します。

Google検索などのhttps通信には使えません。httpsはhttpと通信方法が異なり、TCP:443をTCP:8080へポート転送するとか小手先の技では通用しませんのであしからず笑

以上、お疲れ様でした。

adsense under_kizi


adsense_ bottom_kizi336


関連記事

シェア訴求文言

☆僕の記事はどうしたか?共感していただけたら、シェアしてもらえるととても嬉しいです!
読んでくれる方の数が多くなると、為になる記事を書こうという気持ちが高くなりますのでよろしくお願い致します!

-CentOS
-, , , ,