どこへ行っても安心!SSHサーバーを踏み台にしてWebアクセスする方法

社内や学内からしか見られない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」を使いましょう。

Proxy SwitchySharp
Proxy SwitchySharp
Developer: 提供
Price: Free
  • Proxy SwitchySharp Screenshot

設定画面では、プロファイル名を入力して、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にファイアウォールが設定されている場合は穴を空ける必要があります。興味のある方は、チェレンジしてみてください。