社内や学内からしか見られないWebサイトを使っている人、結構いますよね。他にも、特定のWebサイトへの接続がブロックされているネットワークとか、日本国内からのアクセスしか受け付けていないWebサイトとか、逆に日本からのアクセスを制限しているWebサイトなんかもありますね。また、中国によく行く人はFacebookやTwitterが使えなくて不便だったりもするでしょう。
こうした「接続が制限されているWebサイト」にアクセスするなら、制限のかからない場所にある別のサーバーを経由させる必要があります。なんだか面倒そうですよね。でも大丈夫です!SSHサーバーにさえつながるなら、Webアクセスを中継させることができます。SSHサーバーと同じネットワークに自分のPCをつないでWebブラウザを使っているのと同じ状態にできます。SSHサーバーが動いていれば、自宅サーバーでも、社内サーバーでも、VPSでも、AWSでもいいです。
SSHサーバーを踏み台にすれば、接続先のWebサーバーにSSHサーバーのIPアドレスから接続してきたと思わせることができます。また、インターネットに公開していないWebサーバーがLAN内にあるなら、同じLANのSSHサーバーを「踏み台」にすることで、外部からアクセスすることもできます。さらに、個人宅で使われるようなブロードバンドルーターの設定は外部から変更できないのが普通ですが、外部から内部にあるSSHサーバーを踏み台にしてWebブラウザで管理画面を開き、設定を変更するなんてことも可能です。
これを可能にするのは、SSHサーバーの「ダイナミックフォワード」という機能です。この機能を使ってSSHサーバーまでの「トンネル」を作り、「SOCKSプロキシ」として利用します。主要なウェブブラウザはSOCKSプロキシに対応していますし、メールソフトやFTPソフトなども多くが対応しています。
SSHサーバーの設定確認
踏み台にするSSHサーバーが「ダイナミックフォワード」に対応している必要があります。「/etc/ssh/sshd_config」に、「AllowTcpForwarding no」や「AllowTcpForwarding local」の設定が無ければOKです。多くのディストリビューションではデフォルトでダイナミックフォワードを許可する設定になっているので、変更されていなければ大丈夫でしょう。
踏み台を使う前のIPアドレスを確認する
設定後に踏み台を経由しているかどうか判断するために、設定前のIPアドレスを確認しておきましょう。IPアドレスなどクライアントの情報を表示するページを作ったので、開いて確認しておいてください。
LinuxからLinuxのSSHサーバーを踏み台として使う
Linuxから使うなら簡単です。以下のようにオプションを指定してSSHサーバーに接続するだけで準備完了です。
ssh -D ポート番号 ユーザー名@ホスト名
たとえば、10000ポートを「トンネルの入り口」にして「[email protected]」に「ダイナミックフォワード」するなら、以下のようになります。
ssh -D 10000 [email protected]
接続できたら、WebブラウザにSOCKSプロキシとして「トンネルの入り口」を設定しましょう。Firefoxなら、右上のハンバーガーメニュー()をクリックして「設定」を開き、左側から「詳細」を選択、「ネットワーク」をクリックして「接続設定」を開きます。そして「手動でプロキシを設定する」を選び、SOCKSホストに「localhost」、ポートに「-D」の後に書いた番号(先ほどの例なら10000)を入力して「OK」をクリックします。
ダイアログを閉じたら、IPアドレスが変化しているか確認してみてください。
Google Chromeの場合、標準ではコマンドラインオプションで指定する必要があります。それでは不便なので、拡張機能「Proxy SwitchySharp」を使いましょう。
[appbox chromewebstore dpplabbmogkhghncfbfdeeokoefdjegm]
設定画面では、プロファイル名を入力して、Firefoxと同じような設定を行います。
「Save」して、右上の地球アイコンをクリックし、追加したプロファイルを選択します。
地球アイコンが青くなれば、設定完了です。IPアドレスの確認ページで、SSHサーバーのIPアドレスがWebサーバーに認識されているか確認してみてください。
しょっちゅうダイナミックフォワードを使うなら、わざわざsshにオプションをつけて実行するのは面倒ですよね。そういう時は、「.ssh/config」に設定を書いておきましょう。このファイル、ディストリビューションによっては、パーミッションを厳しくしないとエラーが出てしまいます。初めて作る時は、以下のようにパーミッションを設定しておきましょう。
touch .ssh/config
chmod 600 .ssh/config
あとは、エディタで開いて以下の例のように編集します。
Host ssh.example.com
User user
DynamicForward 10000
これで、以下のコマンドで接続するだけでダイナミックフォワードされるようになります。
ssh [email protected]
リモートのシェル(普通はbash)が必要ない場合は、以下のように実行すればバックグラウンドでダイナミックフォワードだけをしてくれます。
国
ssh -N -f [email protected]
この場合、終了するには「ps ax | grep ssh」などとしてプロセス番号を調べ、「kill」コマンドでシグナルを送ってください。
WindowsからLinuxのSSHサーバーをプロキシとして使う
Windowsの場合、「ダイナミックフォワード」に対応したSSHクライアントが必要です。WindowsのSSHクライアントといえば「Putty」や「Tera Term」が長年広く使われていますが、ここでは設定画面が分かりやすい「MobaXterm」を紹介しましょう。MobaXtermは、SSHクライアントだけでなくXサーバとしての機能も持つソフトウェアで、無料版でも多くの機能が使えます。MobaXtermを起動したら、ツールバーの「Tunneling」をクリックします。
表示されたダイアログで、「New SSH Tunnel」をクリックします。
次の設定画面は、トンネリングの全体像が分かりやすく表現されています。右上の「Dynamic port forwarding」を選び、左側に使用するポート番号を入力、右下に接続先のホスト名、ユーザー名、ポート番号を入力してください。入力後、「Save」をクリックします。
すると、設定が追加されるのでPlayボタンを押します。ダイアログの指示に従ってパスワードの入力などを行えば、ダイナミックフォワードによるSSHトンネルが動作しはじめます。
あとは、Linuxの場合と同じです。ブラウザにSOCKSプロキシとして「トンネルの入り口」を設定します。設定できたら、IPアドレスの確認ページを開いて、SSHサーバーのアドレスに変わっていることを確認してください。
まとめ
うまく接続できましたか?このように、SSHサーバーを踏み台にすれば、LAN内のWebサーバーに接続できたり、接続元によって制限されているサービスを使ったりすることができるようになります。海外のVPSを経由させて、国外向けのサービスを利用するのも面白いかもしれませんね。なお、このページでは「トンネルの入り口」を提供するsshクライアントとWebブラウザを同じPCで動かす形で解説しましたが、別PCで動くブラウザからSSHトンネルを使うことも可能です。ブラウザのSOCKSサーバー設定を、「localhost」から「sshクライアントが動作しているPCのIPアドレス」に変更するだけです。でも、トンネルPCにファイアウォールが設定されている場合は穴を空ける必要があります。興味のある方は、チェレンジしてみてください。
コメント