SSHポートフォワーディング(トンネリング)とは

SSHポートフォワーディング(トンネリング)とは

Posted at September 15,2016 12:03 AM
Tag:[SSH]

SSHポートフォワーディング(トンネリング)について調べてみました。

1.はじめに

目的のサーバに接続できないとき、「SSHポートフォワーディング」というテクニックをよく使うのですがいまひとつ機能が理解できていません。

ということで、「SSHポートフォワーディング」についてもう少しきちんと調べてみました。

2.よくある説明

「SSHポートフォワーディング」とは下図のように、SSHによって確立した通信経路を利用して、クライアントのポートを、クライアントが直接アクセスできないウェブサーバのhttpのポート(80)に転送してくれる仕組みを指します。

SSHポートフォワーディング(トンネリング)

ユーザーはローカルPCのクライアントポート(10000)に接続すれば、SSH接続されたサーバ(10.10.10.10)を介してウェブサーバ(10.10.10.123)の80ポートに接続してくれます。

この方法を用いれば、ウェブサーバがイントラネットのPCからのアクセスのみしか許可していない場合でも、外部からアクセスすることが可能になります。

…という説明でなんとなく理解はできるのですが、もう少し具体的な仕組みが知りたいところです。

3.SSHとは

まずSSHとは「Secure Shell(セキュアシェル)」の略で、暗号や認証の技術を利用して、安全にリモートコンピュータのリモートホストのシェルを利用するためのプロトコルです。

SSHを利用するには、サーバー側は端末からのsshコマンドを受け付けられるよう、サーバー上の常駐プログラム(デーモン)として動作している必要があります。

クライアントはWindowsの場合、TeraTermやPuttyなどがありますが、Gowをインストールすればコマンドプロンプトから実行できるようになります。

4.SSHのポート転送機能

sshコマンドにはデフォルトでポートを転送するオプションがあります。

このオプションを使った接続が、いわゆる「SSHポートフォワーディング」です。

ただ、ネット上の説明では概念図やクライアントの設定画面ばかりで、SSHの機能であることについてはあまり言及されていないように思われます。

ということで、sshコマンドを使ったポートフォワーディングを試してみます。

まず、sshコマンドでサーバに接続(ログイン)するとき、接続先のサーバをIPアドレスなどでパラメータに指定するのはご存知かと思います。

% ssh 10.10.10.10

ポート転送するには、sshログイン時に「-L」オプションを付与します。

% ssh -L 10000:10.10.10.123:80 10.10.10.10

「-L」オプションの値には、

ローカルポート番号:リモートホストアドレス:ホストポート番号

とし、これでログインすれば、SSHの機能でローカルホスト上のポート(に送ったデータ)がリモートホストのポートに転送されるようになります。

上記の例では、ローカルホスト上の10000ポート(に送信したデータ)が、リモートホスト「10.10.10.123」の80ポートに転送されることになります。

ただ、これだけではsshコマンド自体が実行されてしまうことになります。

ログイン時にポート転送のみをおこないたい場合は、「-N」オプションを付与します。

% ssh -N -L 10000:10.10.10.123:80 10.10.10.10

sshによるログイン後、通常プロンプト(%など)が表示されますが、「-N」オプションを付与するとアカウント・パスワードを入力した後、応答が戻ってこなくなります。

これでポート転送のみが行われる状態になったので、この画面はこのままそっとしておきます。

ここではhttpを使いたいので、任意のブラウザからローカルホストを指定し、さらに先ほどsshコマンドで指定したローカルポートをアドレスバーに入力します。

http://localhost:10000/

これでローカルホストの10000番ポートに送ったHTTPリクエストは、10.10.10.123:80にそのまま転送されることになります。

SSHクライアントでSSHポートフォワーディングの設定を行えるのは、クライアントが上記のsshコマンドを代わりに実行してくれているのだと思います。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)