2015年1月22日木曜日

Androidのブラウザを高速化する(外部プロクシ)

まー、きっかけは、ウザいバナー抑止だったんだが。

Webのフィルタリングの為に、自宅PCにPROXYサーバーを立てる事にした。
せっかくなんで、フィルタリングだけではなく、他の弱点も補強しよう。
Android側の設定は前回の記事を読めし。

今回補強するのは、フィルタリング、キャッシュ、プリフェッチだ。

フィルタリングには、Proxomitronを使う。日本語パッチが当たったバージョンが公開されている。
コイツ、最強。
URLフィルタなんて序の口。さまざまな不要なスクリプトも消して、改ざんされたWebページを見せてくれる。改ざんされすぎて、まともに表示されないページも出てくるが、一つ毎、フィルタを外し、ページの見え具合を調節しろし。
ま、最悪の場合、バイパスリストにURLを追加すりゃいい。
詳細は、十年以上前から、色んな人が解説してる。グぐれし。

キャッシュはBlackJumboかSquidあたりかな。
Androidのブラウザは劣化の少ない大容量ストレージを無いため、大きなキャッシュが取れない。
一度読み込んだWebページを2回目以降、1回目の読み込み結果を再利用する機能だ。
自宅プロクシにキャッシュを持たせると、Android側の通信量は変わらないが、応答速度が早くなる。

プリフェッチはPROXY伝説ぐらいかな。コイツはキャッシュもあるけど、設定がブラックボックスすぎ。長時間動作安定性も不安なんで、おっちゃんはWebBoosterNinjaなる13年前の市販ソフトを使っている。
しかし、、プリフェッチって、モラル的にダメな技術だよな。。。。。。

さて、ここまでは割と当たり前の話。

WebはHTTPとHTTPSの両方のプロトコルで構成されてるが、Windowsのブラウザなら、それぞれ別のプロクシを設定できる。用意したプロクシがHTTPSを処理できないのなら、HTTPのみプロクシ設定すりゃいい。…が、Androidは両方同じポートで処理しなくてはいけない。
少なくとも、ProxyDroidを使う場合は同ポートだ。

HTTPSはProxomitronでフィルタリングしてしまうと、ブラウザ側でエラーが発生してしまう。
Proxomitronの[CONFIG]-[HTTP]画面で「Use SSL…」のチェックを外せば、HTTPSをフィルタリングせず、スルーしてくれるのだが、それは上位のプロクシに渡される。
上位プロクシがHTTPSを処理できなければ、ここで拒否され、エラーになる。

多段串構成では、トラフィックを減らすためProxomitronは最上位に配置したい。
フィルタリングされる前のHTMLを元にプリフェッチが動くと、無駄なトラフィックが増える事となる。
又、キャツシュの下位にプリフェッチがあると、不用な確率が高いプリフェッチでキャツシュが消費される事となる。
つまり、上段(インターネット)側からフィルタリング、プリフェッチ、キャッシュの順に配置することになり、Androidと接続される最下段のプロクシはsquid(キャッシュ)になるわけだ。

都合がいい事に、squidは上位プロクシを指定していても、上位プロクシ経由で接続出来ない場合、直接接続しデータを取得する。
squidの設定の注意点
squidはVer2.7のSSL対応版の方をダウンロードしろし。

squid.confは、

・http_port,https_portは、同じ値で、プロクシとして公開するものを設定する。

・上位プロクシのポートはcache_peerに設定
 ex. 
cache_peer 127.0.0.1        parent 8081  0  no-query default
※IPC(プロクシ間問い合わせポート)はないので0番"no-query"

・never_direct allow all は設定しない。SSL(HTTPS)をsquid自身に取得させる為

・Access deny のエラーが出るならhttp_access deny allをhttp_access allow allに変えろし。

・Android版Chromeの設定で「データ使用量を節約」をOnにしているとProxyが無効になる。

プロクシを通すので、もっさりとした表示になるが、極端に遅いページが無くなるぞ。

2015/1/25

Proxomitronの設定変更だが、敷居が高いようなので、ポイントだけ書いておくぞ。

・標準で設定されているフィルターは誤爆するぞ
 default.cfgにフィルターが記述されてるが、”Match = "<start>"”が記載されたフィルターは誤爆するので、すべてFalseに設定するか、default.cfgから削除しろし。
 あまりにも乱暴な書き換えしてるから、Web表示が壊れまくる。

・Proxomitronの調整をするときは、多段串はやめろし。Proxomitronのみを使い、串サーバのWebブラウザとリモート接続のAndroid両方で見栄え確認だ。

・Proxomitronの調整をするときは、ProxomitronのGUIで操作するとフリーズすることが多々ある。
 外部エディタでdefault.cfgを直接編集し、設定反映/保存のボタンを押して設定変更しろし。

・外部エディタの代わりにWinMergeを使うと便利。バックアップのdefault.cfgと動作環境のdefault.cfgを比較しながら編集できる。

・フィルタの記載中に日本語は入れられない。UTF8とSJISそれぞれにエンコードした文字で日本語を書く。"proxomitron 日本語フィルタ"でググれば、それらしいアプリが見つかるが少なくてもWindows8.1環境では不具合がある。だまして使えば何とかなるが。

オッチャン設定中のdefault.cfgのフィルター部分だ。先頭6個はオリジナルで、まとめサイトのアフィリエイト広告対策。



で、コイツがブロックリスト。URL Killfile.txtの一部だ。上のフィルタでも使用している。




2015年1月21日水曜日

(最終版)広告ポップアップ抑止、効かないじゃん on Android

FiltterProxyは、安定性や確実性が低いんだよな。
だが、広告抑止の決定版は、意外と簡単だ。アプリを使わなくても、
/system/etc/hosts の書き替えをすればいい。
こんな感じだ。

root化されている端末なら、これで、完璧に広告を抑止できる。…が、問題もある。

・root化されていないとhostsを変更出来ない。
・ブロックするURLの調査が面倒。

ブロックするURLは、ブラウザ上で長押しして取得できるアドレスではなく、広告表示の為のスクリプトのアドレスだ。
HTML Page Source Viewer

ブラウザからこんなアプリにHTMLソースを共有して、広告スクリプトのURLを探し出さなくてはいけない。

無理ではないが、面倒だよな。

新しい広告が見つかるたびに、HOSTSに追加するのも手間がかかる。第一、非ROOT端末じゃこの方法は使えんぞ。



そこで、決定版第二弾(ぉぃ)が外部プロクシサーバでのフィルタリングだ。
自宅サーバにフィルタリング設定ができるプロクシサーバを立てて、Androidから串経由でWebを見ればいい。

次回の記事で、プロクシを紹介するが、その前にAndroidからPROXY経由でWebにアクセスする環境を整えろし。

以前の記事で紹介したProxyDroidは秀逸だ。
2015/1/25 (※すまぬ。 proxyDroid自体、root化が必要だった。非root化端末でProxy設定する方法はあるのだが、グローバルプロクシになるので、使いでが悪い→APNの設定でProxy指定したり、DroidPhoneMenuで見れるWiFi設定でProxy指定する方法など)

・Individualプロクシに設定すれば、特定アプリだけプロクシ経由に設定できる。
 ChromeとChromeBetaの両方をインストールして、片側だけプロクシ経由にすれば、プロクシの切り替えもする必要がない。

・自宅サーバのプロクシを自宅WiFiから使うとローカルアドレスになるが、宅外からだとDDNSで公開しているグローバルアドレスになる。
 ProxyDroidは、バインドする接続毎に定義を切り替えられるから、宅内SSID(WiFi)ではローカルアドレス、その他ではDDNSのURLを使う、2つの定義を設定すればいい。
 AutoConnectにしとけば、宅内・宅外でのプロクシの切り替えは自動になる。
 (ただし、VPNはバインドできないから手動になる。)

ま、プロクシサーバ以前に、自宅PCをインターネットに公開するために、VPNを設定したり、ポート解放したり、DDNSを使ったりする方法は、Google先生に聞けし。