外部アクセス高速化用proxy設定メモ
出典: Wiki@browncat.org
目次 |
[編集] 外部アクセス用proxyサーバでPHS/携帯経由のアクセスを高速化する
PHSや携帯電話を使って外出先からwebをブラウズしたりしておられる方は多いと思います。 AirH"や@FreeDなどの定額接続サービスを使用すると 電波さえ届いていれば、いつでも好きなだけネットにアクセス出来ます。 また、携帯電話経由の通信ではさらに高速で安定した通信が出来ます。 いつでもどこでもネットにつながるというのは非常に便利で、 ひとつの理想の環境となりつつあります。
ただ、ここで問題なのは速度と料金(携帯電話の場合)です。 PHSの場合32-256Kbps程度の低速な回線では ブロードバンド向けにグラフィックの多い昨今のWebページを閲覧するにはかなり非力です。AirH"では実際のスペックの速度が出ることは非常にまれで、かなりいらいらします。対して携帯電話経由だと速度はまあまあ(64Kbps~数Mbps)ですがちょっと接続したらすぐに接続料金やパケット代が数千円かかります。
これを改善するためには
- 回線の高速化
- 画像を表示しない
- 流れるデータを圧縮する
という方法が考えられます。 1は現在提供されているサービス自体が遅く、課金も問題となるため限界があります。2はかなり有効ですが画像がないとさみしいですし、みたい場合もあるでしょう。以下、3を行ってその高速化のための設定をいくつか書いてみます。
AirH"ではこれを改善するためMEGA PLUS(旧Fourelle Venturi for AirH")というサービスを提携プロバイダ向けに行っています。またi-accelという同様の有料サービスが存在します。しかしながら、このサービスはWindowsクライアント専用で、PDAやLinuxからでは使えません。
[編集] 使えそうな方法の検討
まずIPパケットそのものを圧縮する方法が考えられます。これはIPsecなどを使って圧縮する方法です。問題はIPスタックレベルで対応が必要なのでクライアントOSが限られます。次の方法として、プロトコルごとに圧縮する方法が考えられます。できればプロトコルごとに専用の圧縮proxyを置いて圧縮出来れば最高の結果が得られそうです。また出来るだけLinuxやPalmなどで使えるようクライアントを選ばないようにしたいものです。さらには誰にでも使われたりしないようセキュリティもしっかり確保したいものです。
[編集] sshで行ってみる
まずはLinuxなどから使うにはもっとも簡単な方法としてsshでトンネリングするという手があります。 PDAからは使用出来ませんがPCから使うのにセキュアで簡単な方法です。ネットに接続したら以下のコマンドを叩くとローカルマシンのLportとserverのSportが sshでトンネリングされます。経路は圧縮され、暗号化と認証も行われるため安心して使えます。
ssh -C server -L<Lport>:server:<Sport>
欠点として 画像データは圧縮できないことが上げられます。そこで私はwebは別な方法で行うことにし、popやimapのトンネリングを行っています。データが1/2以下に圧縮されるのでかなりレスポンスが向上します。
[編集] webのproxyの検討
webを高速化するに最も有効な方法は画像の圧縮でしょう。最近のwebページはブロードバンド向けに最適化されており、Flashや大きな画像がデータ転送の大半を占めるからです。またテキスト部分は多くのブラウザでgzip圧縮が使えるため、これを利用することで上記のsshと同様に高速化が期待出来ます。
そこで画像圧縮の出来るhttpのプロクシサーバを調査してみると以下の2つが候補になりました。
RabbIT2はjavaで記述されておりまさに今回の用途のために作成されたプログラムです。まずは適任と思ったのです。導入してみると、残念ながらサーバとの相性があります。見れない画像やページが多いのです。内部で日付の解析に失敗している箇所があり、修正を試みたのですがなかなかうまく行きません。RabbIT3も試してみました。2よりはいい結果でしたが、やはりかなり挙動がおかしい感じです。
2005/9にHIRUKAWAさんがAirproxyというJavaベースの圧縮プロキシが公開されています。 Airproxyは国内で開発されているもので、なかなかいい感じではありますが、少し挙動がおかしいことがあります。
次の候補はなんでも出来る(^^ Delegateです。こちらの方は特に画像圧縮に特化した機能が入っている訳ではありませんが、自分でスクリプトを作成して実行させる強力なカスタマイズ機能があります。
[編集] Delegateの設定
Delegateのスクリプト機能 CFIはサーバ-Delegate間、Delegate-クライアント間で指定出来、 mimeなどの条件でコマンドを実行させることが出来ます。以下の指定の実行にはImageMagickが必要です。
delegated -P<Lport> SERVER=http CACHEDIR=$DELEGATE/cache LIBPATH=$DELEGATE/CFI \ FTOCL=my.cfi LOGDIR=$DELEGATE/logs \ HTTPCONF=acc-encoding:-thrugzip HTTPCONF=gen-encoding:gzip \ RELIABLE='<client domain>,.localnet'
delegate 9.*では以下の設定でいけるかもです。
delegated -P<Lport> SERVER=http CACHEDIR=$DELEGATE/cache LIBPATH=$DELEGATE/CFI \ FTOCL=my.cfi LOGDIR=$DELEGATE/logs \ HTTPCONF=acc-encoding:-thrugzip HTTPCONF=gen-encoding:gzip \ RELAY=proxy REMITTABLE=+,http \ RELIABLE='<client domain>,.localnet' PERMIT='<client domain>,.localnet'
ここで指定しているmy.cfiは以下の通り。$DELEGATE/CFI/my.cfiとして配置します。
#!cfi Content-Type: image/jpeg Output/Content-Type: image/jpeg Body-Filter: convert -quality 10 - - -- Content-Type: image/gif Output/Content-Type: image/jpeg Body-Filter: convert -quality 5 - jpeg:- -- Content-Type: image/png Output/Content-Type: image/jpeg Body-Filter: convert -quality 5 - jpeg:-
ちなみに-qualityで指定する値を変えることで圧縮率を変えることが出来ます。テストで画像の圧縮率を出して見たところ以下のような結果が得られました。上記設定だとかなり画質が落ちますが、転送量が1/4近くになります。 PDAだと見れる程度の画質ですがPCだともう少し圧縮率を落とした方がいいかもしれません。
| quality | 圧縮率 |
| 10 | 19% |
| 20 | 29% |
| 30 | 42% |
| 40 | 45% |
| 50 | 72% |
| 60 | 87% |
| 70 | 97% |
元画像に大きく影響されますが-quality 45で約半分くらいの画質になると思います。
[編集] 仕上げ:セキュリティ強化
さて折角立ち上げたサーバですが、誰にでもアクセスされると困ります。そこで以下のような対策を行います。
- ip firewallで接続出来るIPアドレスを制限します。(iptables, ipchainsなど)
- DelegateのRELIABLEで外部から使用するプロバイダのipかドメインを指定します。
- ちょっと危険ですがbasic認証を行います。
- 必要な時以外は起動しないようにします。(CGIなどを使って起動する) また、そのapacheは接続可能なIPや接続出来るブラウザを制限します。
などです。私のところでもいくつかを組み合わせて制限をかけています。
[編集] 使用感
ノートPCとClieから使用していますが、RabbIT2と比べ非常に安定しています。広告のカットなどはしていませんので、転送レートは落ちるかもしれませんが、ほとんど見れないページがなく、サーバのリソースを食い過ぎることもありません。なかなかいい感じです。
上にも書きましたが画像は品質を落として圧縮するため汚くなります。また、表示始めにタイムラグが起こるようになります。が、全体の転送量が減るためトータルで速くなります。この辺りはサーバに高速なCPUを使用することで改善されるでしょう。ちなみにVIA C3 Eden 600Mhzで使用していた時にはちょっと待たされる感じがしました。
また、おまけ的な利点として、CLIEのネットフロントでページが大きすぎて表示できないというエラーを見る率がかなり減りました。画像が圧縮されるため、使用するメモリが減ったためでしょう。これでCLIEでのwebブラウズの実用度が上がりました。同様にノートPCでもブラウザのリソース消費が減ります。
