壁を越え、鎖を砕け

支那大陸におけるインターネットの実状は多分皆が知っておる。「Across the Great Wall we can reach every corner in the world.」と、支那から世界へ始めてのメールだった。今、その偉い壁はすでに、いと高し。しかし、自由を求めるものは、その努力をやめない。

その壁を越える常規の方法は、VPNとプロキシだ。VPNなら、使用は簡単だが、サーバーを維持することは結構高い金額が必要だ。VPNの接続を商業化して販売することが多見したから、いよいよ天朝に注目され、審査が必要になってしまった。VPNの接続は、今成功率はかなり低下してしまった。プロキシもその状況で、どの方法が人気になったら、すぐ閉鎖命令が来るらしい。べにあんずは二週間前から接続不能、まだ回復へ努力してると書いただけ。ゴーエジントは最近、GitHubでのプロジェクトを削除した、たくさんのありがとうのコメントに私も一言残した。自由の代価は、もっと大きくなる。

今度実践した方法は、個人向けの専用も分かち合いも可能な壁越える方法だ。まず、必ず、物理的に自由世界に存在いるサーバーが持つが前提。そのサーバーはVPSとかECSとかレンタルサーバーとか構わないが、SSHによる接続可能という機能を確保すべきだ。そのサーバーのホストとドメインは、後使うところがある。例として、ホストは9.9.9.9で、ドメインはserver.comだと設定する。また、そのサーバーには、普通の通路用ユーザーはfreeと設定して、通路のポートは4444とする。

よし、いまからクライアントで、このサーバーとポートマッピングをする。OS XやLinuxなどの端末で以下の命令を実行すればいい。
ssh -D 4444 -l free 9.9.9.9 -N -f -o GatewayPorts=yes -o ServerAliveInterval=60
それで、ポートマッピングが完了。

※ ポートマッピングとは、ブロードバンドルータなどが持つ機能の一つで、プロバイダなどから割り当てられたグローバルアドレスの特定ポートに対する接続要求を、特定のプライベートアドレスの特定のポートに自動的に転送する機能。 IT用語辞典 e-Words より

ポートマッピングは、クライアントで指定ポートでSOCKSによるプロキシを支援する。OS XにてChromeは、SwitchySharpというプラグインがある。直接SOCKSを設定するもいいが、PACファイルを作成して利用することもできる。とにかく、パソコンで利用することはそれでよし。

PACファイルはなんだと、多分突っ込むが、これはプロキシ自動設定だ。一つのファイルで、URLを一定的なルールを経て、プロキシを使うかどうか、またどのプロキシを使うなどを自動的に決めることができる。そのファイルの利用には、Content-Type: application/x-ns-proxy-autoconfigというヘッダが必要。個人サイトに、PHPとFlightで、簡単な例を作ってみた。


Flight::route('GET /pac/@method/@host/@port',function($method,$host,$port){
	header("Content-Type: application/x-ns-proxy-autoconfig");
	echo "function FindProxyForURL(url, host) {
		var autoproxy = '".strtoupper($method)." ".$host.":".$port."';
		if (isPlainHostName(host) ||
			host.indexOf('127.') == 0 ||
			host.indexOf('192.168.') == 0 ||
			host.indexOf('10.') == 0 ||
			shExpMatch(host, 'localhost/*')
		) {
			return 'DIRECT';
		} else {
			return autoproxy;
		}
	}";
});

たとえそのホストマピングのIPは192.168.1.1であれば、上記のPAC生成は、http://server.com/pac/SOCKS/192.168.1.1/4444で請求すると、利用できるPACファイルのURLが整備する。同じネットであれば、iOSのWiFi設定に、プロキシを自動にして、URLをそれを入力すれば、iPhoneなどでも利用できる。

ククク、よいではないか。

紹介

クリスチャンです。

タグ:

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください