SOCKS プロキシを使って学内 (社内) 限定ページに接続する

学内ネットワークに接続している場合にだけ閲覧可能な、学内限定ページというものが世の中には存在します。大学に限らず、民間企業でもそういうものが存在するでしょう。名古屋大学の場合は全学の事務連絡や給与明細の閲覧がこれに該当し、自宅で仕事しているとき、出張中のときに非常に不便です。また学外からだと論文の閲覧もできません。

解決方法は以下のようにいくつか存在しますが、今回は SOCKS プロキシを使う方法をまとめておきます。知っている人には当たり前の情報かもしれませんが、複数の同業者がこれを知りませんでした。

  1. VPN を使う。ただし、名古屋大学は全学の VPN を用意してくれていないので駄目。
  2. SSH で学内のサーバに接続し、Firefox などを X で飛ばす。ただし、海外出張中の場合 (=遅延時間が長い) や回線が細い場合には X を飛ばすのは速度面から現実的ではない。
  3. VNC で画面を飛ばす。海外出張中の場合は、X を飛ばすよりは体感速度が圧倒的に優れるが、それでもまだ遅く、firewall の設定等も必要。
  4. VNC と同様だけど、Mac の場合は Back to My Mac (どこでも My Mac) を使って学内の Mac に接続して画面を飛ばす。Firewall の設定を気にしなくて良い場合が多いものの、Back to My Mac を使えない外部環境があったり (例えばレスター大学の eduroam)、接続先が反応しない場合がある。
  5. SOCKS プロキシを使う。簡単で早い。

用意するもの。

  • OS X の動いている Mac (別に Windows でも Linux でも同様にやれるので、"SOCKS Linux" などでググってください)
  • 学内に存在する SSH サーバ

さて、やることは簡単で、学内サーバに外から SSH で入れるものに接続します。ただし、-D という option をつけてやることで、SOCKS を使った port forwarding が可能になります。

$ ssh -D 1080 MY_ACCOUNT@foo.bar.ac.jp

  このあと、Mac の System Preferences から Network → Advanced… → Proxies で SOCKS Proxy を入にし、SOCKS Proxy Server の欄を 127.0.0.1:1080 にしておきましょう。

以上の作業で、SSH の接続している間は学内からネット接続をしているように見えるはずです。

ただし、SSH の接続が切れたのに SOCKS Proxy が動作したままだと、ネット接続ができなくなります。また GlimmerBlocker を使って広告ブロックをしている場合は Web Proxy (HTTP) が入になっているため、SOCKS とぶつかってしまうようです。そのため、SOCKS Proxy を入にするときは Web Proxy (HTTP) を切に、またその逆のときは入にという作業を手でやらなくてはいけないため面倒です。

そこで、OS X の networksetup コマンド使って shell から操作しましょう。

Automatic SOCKS proxy setup through SSH connection ...

自分の場合は Web Proxy (HTTP) の切り替えも自動でやりたいので、少し改造した script を使っています。

gist16c55d8b451b431848c0

この networksetup コマンドは /usr/sbin にあって、sudo じゃないと走りません。いちいちパスワードを聞かれるのも面倒なので、必要な場合は visudo で /usr/sbin/networksetup に実行権限を与えておきましょう。

$ sudo visudo 

として、

# For SOCKS proxy

YOUR_ACCOUNT ALL=(root) NOPASSWD: /usr/sbin/networksetup

とでも追加しておきましょう。