Windows/Linuxでの SSHポートフォワーディングの方法

ALL
スポンサーリンク

リモートマシンにアクセスしたいけれど、ファイアウォール等で直接ローカルマシンからアクセス出来ない場合があります。
この場合、リモートマシンにアクセス出来るSSHサーバを経由することで、ローカルマシンから間接的にリモートマシンにアクセスする方法があります。
SSHポートフォワーディングと呼ばれるものです。

SSHポートフォワーディングでは、下図のように、ローカルマシンの XX番ポートにアクセスすることで、SSHサーバを経由して、リモートマシンの YY 番ポートにアクセスします。

画像

例えば、社内LANからしかアクセス出来ない社内WEBシステムがあるとします。
ここで、SSHポートフォワーディングによって、ローカルマシンの8888番ポートにアクセス(ブラウザで http://127.0.0.1:8888にアクセス)すると、SSHサーバを経由して、社内WEBシステムのWEB(80番ポート)にアクセスすることが出来るようになります。

このSSHポートフォワーディングが出来るには、
・ローカルマシンは SSHサーバに sshでアクセスできること
・SSHサーバはリモートマシンの YY番ポートにアクセス出来ること
が必要です。

まず、この2点が出来ることを確認しておいて下さい。

確認出来たら、SSHポートフォワーディンの為の設定です。

以降では、Windows上で PuTTY , PortForwarder を使う2通りの方法と、Linux上で sshコマンドを使う場合を説明します。

設定例として、「ローカルマシンの 1234番ポートにアクセスすることで、SSHサーバを経由して、リモートマシン www.yahoo.co.jp の 80番ポートにアクセスする」設定を説明します。

設定後、ブラウザで http://127.0.0.1:1234 にアクセスすると、SSHサーバを経由して、www.yahoo.co.jp の WEBポート(80番)にアクセスするので、yahooのページが表示されます。

PuTTY の場合

PuTTY のダウンロード・インストールについては、下記を参照して下さい。

ターミナルエミュレーター PuTTY(日本語版) パソコン鳥のブログ

PuTTY 起動後、接続先の指定で SSHサーバのホスト名またはIPアドレスを指定します。
以降でまだ設定があるので、ここでは「開く」ボタンを押さないいでください。

画像

次に画面左側のツリーから、接続-SSH-トンネル を選択し、「源ポート」に ローカルマシンのポート、「送り先」に リモートマシンのアドレスとポートを設定し、「追加」ボタンを押します。
リモートマシンのアドレスとポートは、「アドレス:ポート番号」のように、「:」でアドレスとポート番号を区切って指定します。
アドレスは、ホスト名またはIPアドレスで指定します。

画像

なお、「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。

ここでは、源ポートに「1234」、送り先に「www.yahoo.co.jp:80」とすると、以下のように、フォワードするポート一覧の箇所が「L1234  www.yahoo.co.jp:80」となります。

画像

最後に「開く」ボタンを押して、SSHサーバに接続します。

ログイン画面になるので、ユーザ名とパスワードを入力すれば、SSHサーバにログインします。
これで、ローカルマシンの「源ポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。

ウィンドウが開いたままになりますが、この状態でSSHポートフォワーディングが行われます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。

PortForwarder の場合

PuTTY を使用すると、SSHポートフォワーディングの際は PuTTY のコマンドウインドウが開いていることになります。
一方、PortForwarder はSSHポートフォワーディング機能を持つGUIの単体アプリで、タスクトレイへの格納も出来ます。

ダウンロードは以下から PortForwarder-2.9.0.zip をダウンロードします。

PortForwarder ダウンロード


2015/10/18
最近の環境でビルドされたものがあります。次の記事を参照して下さい。
SSHポートフォワードGUIアプリ PortForwarder の最近のビルド版

ダウンロードしたファイルを解凍後、PortForwarder と同じ場所に設定ファイルを作成します。
テキストファイルで、以下の内容を作成します。
名称 の箇所は、後で PortForwarder の画面で表示されます。日本語名は文字化けするので使わない方がいいです。

config.txt

Host <I>名称</I>
    HostName <I>SSHサーバのアドレス</I>
    User <I>SSHサーバのユーザ名</I>
    LocalForward <I>ローカルマシンのポート リモートマシンのアドレス:リモートマシンのポート</I>

なお、「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。

ここでは、下記のように設定します。
HostName , User の箇所は、自分がアクセス出来る SSHサーバのホスト名とユーザ名を設定して下さい。

config.txt

Host ConnectToYahoo
    HostName xxxxx.dip.jp
    User test001
    LocalForward 1234 www.yahoo.co.jp:80

ファイル作成後、PortForwarder を起動します。

画像

先ほど作成した設定ファイルを、Config file: の箇所で指定します。
次にドロップダウに、設定ファイルの 名称 の箇所で記述した文字列が現れるので、選択し、「Connect」ボタンを押します。

画像

初めて接続するSSHサーバの場合、次の画面が出るので、「はい」を押します。

画像

次の画面も、初めて接続するSSHサーバの場合に表示されます。
「OK」を押します。

画像

SSHサーバのパスワードを入力します。

画像

Connected となったら、接続完了です。

画像

これで、設定ファイルで指定した「ローカルマシンのポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。

この状態で、「Hide」ボタンを押すとタスクトレイに格納されますので、邪魔になることもありません。

なお、PortForwarder の最新バージョンは 2.9.0 (2007年10月20日) ですが、今年4月に問題となった OpenSSL の脆弱性 Heartbleed Bug には該当しません。
PortForwarder で使用されている OpenSSL 0.9.8 は、本脆弱性の対象外です。

Linuxの sshコマンド の場合

下記のように指定します。

ssh ユーザ名@SSHサーバのアドレス -L ローカルマシンのポート:リモートマシンのアドレス:リモートマシンのポート

「リモートマシンのアドレス」は、SSHサーバから見たアドレスです。
例えば、リモートマシンのアドレスに 127.0.0.1 を指定すると、それは SSHサーバ自身を示します。

ここでは、次のようにします。
user001@xxxxx.dip.jp の箇所は、自分がアクセス出来る SSHサーバのユーザ名とホスト名を設定して下さい。

ssh user001@xxxxx.dip.jp -L 1234:www.yahoo.co.jp:80

これで、「ローカルマシンのポート」へのアクセスで、SSHサーバを経由して、リモートマシンにアクセスできます。
ブラウザで http://127.0.0.1:1234 にアクセスすると、yahooのページが表示されます。

以上、SSHポートフォワーディングの設定方法です。

参考

ssh ポート転送
SSH ポートフォワーディング
Windows向けのSSHポートフォワード専用ソフトPortForwarder – 旅モバ

コメント