iphoneからSSHのsocksプロキシを使う(macbookがあるとき)

iphonemacbookが同じwifiネットワーク上にあるとき、macbookからのSSH接続をiphoneからsocksプロキシとして使うメモ。
需要的には海外出張でキャリア回線が使えない上にどうにか日本からしか見られないコンテンツを見たい、自宅サーバーにSSHでトンネルすれば…みたいなものすごいニッチなのしかなさそうだけど、単純におもしろい気もするので書いておく。

やってることは

  • どこかhttpでアクセス出来る場所にプロキシ設定を書いた .pac ファイルを置く
  • iphoneから見えるコンピュータでsshを起動してダイナミック転送させる

なので、macbookである必然性はそこまでない。windowsでもcygwinとかで頑張れば行けそうな気がする。

環境:
macbook: OSX 10.9.5 (Mavericks)
iphone: iOS 9.0.2

手順

1. macbookのwebserver機能を有効にする。

Mavericksならターミナルから

$ sudo apachectl start

でよい。それ以外なら参考URLの一番上でいけるはず。
とりあえずmacbookのブラウザから http://localhost にアクセスして it Works! というページが出るのを確認する。

iPhoneから繋がることを確認する。ターミナルで

$ hostname

として nos-MacBook と出た場合iphonesafarihttp://nos-macbook.local と打つと it Works! が出るはず。出なければipアドレスを使うなりすればいいはず。

2. iPhone用のプロキシ設定ファイルを置く

/Library/WebServer/Documents/proxy.pac として

function FindProxyForURL(url, host)
{ 
     return "SOCKS nos-macbook.local:XXXX";
}

を置く*1。アドレスは手順1.で確認したやつ。XXXXは9999とか適当な数字にする。あんまり小さかったり大きかったりすると多分失敗する。

3. iphoneのプロキシを設定

設定 → WiFi → 接続のiマークを押すと詳細設定に行く。一番下のHTTPプロキシのところで自動を選ぶ。アドレスの欄に http://nos-macbook.local/proxy.pac を入れる。

手順4.でトンネルを用意する前のこの時点でも(プロキシなしで)ネットに繋がるが、これが"正しい"挙動なのかはよくわからない。

4. macbookからトンネルしたい先に繋ぐ

ターミナルから

$ ssh -g -D XXXX host

としてSSHを開く。XXXXは手順2.で指定した数字。

5. iPhone側でwifiに繋ぎ直す

WiFiの設定を一度切って入れ直す。Safarigoogle:ip 確認にあるようなページを見てipがトンネル先のものになっていれば完了。

手順4.で開始したsshを閉じるとプロキシなしでまたアクセスするようだが、これも"正しい"挙動なのかはよくわからない。

*1:実体はjavascriptらしい