モチベーション
家から手元のブラウザでサクサク論文をダウンロードしたい
自宅で作業をしていて、研究室内のネットワークからならダウンロードできるのに・・・というときや、外部には公開していない学内ページ、社内ページに家からアクセスできない・・・というときがある。つまり特定のネットワーク経由でブラウザを使いたいときがある。そんな状況が前提。
色々な方法
たとえばVPNサーバーが用意されてるなら(あるいは問題が起きない形で自前で用意できるなら)、VPN につなげばいい。スタンダード。快適。解決。ここで終了。そんなのなのはないけどsshはできるときのお話。
sshできるなら、vnc serverを立ててssh
でポートフォワードすればブラウザに限らずなんだってできるけど、単にブラウザで特定のページにアクセスしたいときだと、ちょっとoverkill気味だし画面転送越しにRemote側のブラウザ操作って使い勝手がたいてい悪い。Local側の使い慣れたブラウザでサクサクアクセスしたい。
「ブラウザしかつかわない」 x 「sshできる」という状況ならSOCKS
その特定のネットワークに普段ssh
でアクセスしているならもっとお手軽な方法がある。ssh
によるSOCKS Proxyを使う方法である。これを行うと、Local側のブラウザが行う通信をsshのポートフォワードでremoteを経由して行うことができる。
用意するもの
sshの環境
アクセスしたいネットワーク内の端末にssh
できるようにしよう。UNIX系やmacなら環境は整っているはず。WindowsならたとえばWSLかcygwinがあればよい。
アクセスしたい端末に鍵を登録して、下が通ればOK。
$ ssh hogehoge@remote.sam.ple
ブラウザの環境
PROXYを通せればよい。どのブラウザでも問題ないはず。
windows環境の人でWSLでGUI環境を利用しているからといって、Ubuntu上のブラウザを使う必要はない。通常のwindowsアプリケーションのブラウザを使うことができる。
Chromeを使う場合、Proxy Helperエクステンションを追加するとネットワークの切り替えが楽になる。
Proxyの設定は、server typeをSOCKS5、addressを127.0.0.1、portを1080にすればよい。ここではChromeにProxy Helperをいれたとして具体的に説明する。
Proxy Helperを導入した人はアイコンを右クリックしてオプションページを開き、SOCKS5にチェックしてSOCKS Proxyを127.0.0.1にしてポートを1080にすればよい。
なお、127.0.0.1は「自分自身のネットワーク」すなわちlocal hostを意味し、指定した1080はSOCKSが通常利用するポート番号である。ポート番号は開いているなら、1025から65536の間の任意の整数でもOKだけど、普通はアサインされている番号を使う。
やってみる
SOCKS serverをたてる。
-D
オプションをつけてssh
すればよい。
$ ssh -D localhost:1080 hogehoge@remote.sam.ple
-D
オプションはダイナミックポートフォワーディングするときに用いるオプションでSOCKS5をサポートしており、このssh接続がSOCKS serverの役割を担う。
localhost:1080
はブラウザに設定した127.0.0.1とポート番号1080に対応している。
SOCKSプロキシを通してブラウザを使う
あとはSOCKS proxyを用いてブラウザを使えばhogehoge@remote.sam.ple
のネットワーク経由でブラウザを利用できる。Proxy Helperを導入した人はアイコンを左クリックしてSOCKS PROXYを選べばよい(戻すにはDIRECTにすればよい)。
うまくできているかのチェック
動作をチェックするために自分のglobal ipを調べてみる。ブラウザからならifconfig.ipやCMANなどにアクセスすれば簡単に調べられる。そういうサイトを使うのが嫌な場合はコマンドラインから、dig +short myip.opendns.com @resolver1.opendns.com
をそのまま打てばよい。
SOCKSがうまくいっているならプロキシを通す前後で出力されるアドレスが変わるはずである。
補足
ssh
のダイレクトフォワーディングにおいて-C
オプションを付けるとremoteとの通信を圧縮できる。また、ssh
をバックグラウンドにしたい場合は-f
と-N
をつけてssh -D 1080 -fCN hogehoge@remote.sam.ple
とすればよい。
注意点
SOCKSプロキシを通しているときはssh
しているサーバーごしに通信することになるので、必要な作業が終わったらプロキシを外すかsshを切るのをお忘れなく。
参考
How To Route Web Traffic Securely Without a VPN Using a SOCKS Tunnel