遅いネットワークに対応する懐かしい話 ー クラウド上にプロキシ+SSHトンネルで圧縮

日本以外でインターネットを使うと、これがいかんともしがたいほどウェブサイトのブラウジングが遅い。特に、日本のサイトは極端に遅い。

定番的に、最初に疑うのは名前解決。ローカルのプロバイダのDNSに、普段アクセスされない日本の種々のサーバのIPアドレスはキャッシュされていない感じがする。まあ、名前解決だけならむりやりDNSを8.8.8.8にすると、若干改善されるのだが、アクセス認証のために透過プロキシーなどで認証ページに飛ばされるケースは多々あり、そのような場合には8.8.8.8とかってDNSを設定していることが妨げになる。こればっかりは仕方ない。

そこで懐かしのプロキシーだ。

ネットワーク回線が細いときに大変お世話になったSquidを、雲の上のサーバにセットアップすることにした。

最近のSquidパッケージでは、最初からオープンプロキシーにはならないようになっている。そこで、自サーバとlocalhostからの応答だけにしか応答しないようにした。

数行以外はオリジナルまま。(改善提案お寄せください)

利用認証とかつけたら良いような気がするが、認証ではじかなきゃいけないレベルまでアクセスされたらそもそも負けなので、とりあえずそこは端折る。

コメント行を抜くとこんな感じ。(squid.conf)

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl thishost src そのサーバのIPアドレス/255.255.255.255

acl SSL_ports port 443
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access allow thishost

http_access deny all
icp_access allow all
http_port 3128

hierarchy_stoplist cgi-bin ?
cache_mem 32 MB
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
forwarded_for off
coredump_dir /var/spool/squid

さて、次に、ローカルのデスクトップまで、sshでトンネルを張る。コマンドオプション -Cで圧縮してみたらちょっと速いような気がした。

ssh -C -N -f -L 3128:プロキシーサーバ:3128 riotaro@プロキシーサーバ

ローカルでテスト。

/opt/local/bin/squidclient -h 127.0.0.1 -p 3128 http://yahoo.com

squidclientコマンドはMacPortssquidを入れればついてくる。
ブラウザでテストするより便利。

あとはブラウザに設定するとかネットワーク設定でHTTP/HTTPSのプロキシを127.0.0.1で、ポートを3128に設定するなどすればよい。

上記二行を、実行しやすいように適当な名前をつけてHOMEに保存した。

日本でもそこそこ快適です。

プロバイダが混んでいると、セッション数で制限されたりする。この方法で一本化すると、まるで良いことをしてあげたような感じすらあるかも。