スマホのデータ通信量を激減させる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へポート転送するとか小手先の技では通用しませんのであしからず笑

以上、お疲れ様でした。



関連記事

シェア訴求文言

-CentOS
-, , , ,