SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】
【改訂版】SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】を公開していますのでそちらをご覧下さい。
みんな大好き、SSHトンネル。
外から接続できないイントラネットのサーバへ、踏み台のSSHサーバ経由で接続できるようにする方法ですね。
ですがそれはSSHトンネルの1つの使い方に過ぎないのです!
SSHトンネルは、3つの使い方があります。
- ローカルフォワード
- リモートフォワード
- ダイナミックフォワード
今日はこの3つの方法について、WindowsのsshクライアントであるPuTTyでの接続方法(おまけでsshコマンドでの接続方法)と、活用例を紹介します。
目次
こんな環境を想定
あなたは「おうち」にいてPCを使っています。
「おうち」には、FTPサーバがいますが、「おうち」の中からだけ繋げられます。
あなたは「らぼ」に通っており、SSHサーバが用意されています。
SSHサーバはインターネット上から接続をすることが出来ます。
「らぼ」には、ウェブサーバがありますが、「らぼ」の中からだけ繋げられます。
# 言うまでもありませんが、架空の環境です。そもそもFTPサーバなんて使いませんし。
あなたは、「おうち」のPCからSSHサーバへ接続しています。
接続に使用するソフトウェアは、誰がなんと言おうとPuTTyです。
図の凡例
- 白い角丸四角形:ソフトウェア
- 白い丸:接続の始点
- 灰色の丸:接続の終点(横に書かれているIPアドレス:ポートで待ち受けています)
ローカルフォワード
概要
ローカルフォワードは、一般的によく使われる方式です。
通信をSSHサーバから別の宛先へ転送します。
設定
- 源ポート:8080(例)
「PuTTy」が待ち受けるポートを指定します。 - 送り先:172.16.0.2:80(例)
「SSHサーバ(openssh-server)」が転送する送り先を指定します。 - sshコマンドでは
ssh <SSHサーバIPアドレス> -L <源ポート>:<送り先IPアドレス>:<送り先ポート>
とすればOK。
勿論IPアドレスでなくても大丈夫です。
ちなみに、-L <待ち受けIPアドレス>:<源ポート>:<送り先IPアドレス>:<送り先ポート>
と指定すると、127.0.0.1以外でも待ち受けられそうです。
通信の流れ
- ローカルフォワードを設定すると、PuTTyが源ポートで指定したポート番号を127.0.0.1で待ち受けます。
127.0.0.1で待ち受けるので、「あなたのPC」自身からの接続だけ受け付けます。 - 待ち受けているポートへ届いた通信は、SSHの通信の中を経由し、openssh-serverから送り先まで転送されます。
活用例
「らぼ」の中にあるインターネットから接続できないウェブサーバを、SSHサーバ経由で閲覧出来るようにします。
この場合、ブラウザ(firefox)からhttp://127.0.0.1:8080へ接続すると、図中オレンジ色の破線の流れで通信が転送されます。
メリット
- イメージがつきやすく分かりやすいです。
- 一般的に利用されていて、他の人にも説明がしやすいです。
デメリット
- 送り先(ポート単位)毎に、ローカルフォワードを設定する必要があります。
- ローカルフォワードを多く設定した場合、PC側から見たら、すべてローカルホスト(127.0.0.1)宛のため、通信が判別しづらいです。
リモートフォワード
概要
リモートフォワードは、普段使っているところをあまり見ない方式です。
通信をSSHクライアントから別の宛先へ転送します。
設定
- 源ポート:8021(例)
「SSHサーバ(openssh-server)」が待ち受けるポートを指定します。 - 送り先:192.168.0.2:21(例)
「PuTTy」が転送する送り先を指定します。 - sshコマンドでは
ssh <SSHサーバIPアドレス> -R <源ポート>:<送り先IPアドレス>:<送り先ポート>
とすればOK。
勿論IPアドレスでなくても大丈夫です。
ちなみに、-R <待ち受けIPアドレス>:<源ポート>:<送り先IPアドレス>:<送り先ポート>
と指定すると、127.0.0.1以外でも待ち受けられそうです。
通信の流れ
- リモートフォワードを設定すると、openssh-serverが源ポートで指定したポート番号を127.0.0.1で待ち受けます。
127.0.0.1で待ち受けるので、「SSHサーバ」自身からの接続だけ受け付けます。 - 待ち受けているポートへ届いた通信は、SSHの通信の中を経由し、PuTTyから送り先まで転送されます。
活用例
「おうち」の中にあるインターネットから接続できないFTPサーバを、SSHサーバから接続出来るようにします。
この場合、ftpコマンドからftp://127.0.0.1:8021へ接続すると、図中オレンジ色の破線の流れで通信が転送されます。
メリット
- SSHサーバ側からPC側へ通信を引き込むことが出来ます。
デメリット
- あまり使われないため、知らない人が多く説明に苦慮します。
- 送り先(ポート単位)毎に、リモートフォワードを設定する必要があります。
ダイナミックフォワード
概要
ダイナミックフォワードは、知らないと損をする方式です。
SSHクライアントがSocksプロキシとなり、プロキシ経由の通信をすべてSSHサーバから転送します。
設定
- 源ポート:9000(例)
「PuTTy」が待ち受けるポートを指定します。 - 送り先:空欄
指定しません。 - sshコマンドでは
ssh <SSHサーバIPアドレス> -D <源ポート>
とすればOK。
勿論IPアドレスでなくても大丈夫です。
ちなみに、-D <待ち受けIPアドレス>:<源ポート>
と指定すると、127.0.0.1以外でも待ち受けられそうです。
通信の流れ
- ダイナミックフォワードを設定すると、PuTTyが源ポートで指定したポート番号を127.0.0.1で待ち受けます。
127.0.0.1で待ち受けるので、「あなたのPC」自身からの接続だけ受け付けます。
このポートは、Socksプロキシになっています。 - 待ち受けているポートへ届いた通信は、SSHの通信の中を経由し、openssh-serverから転送されます。
活用例
「らぼ」の中にあるインターネットから接続できないウェブサーバや、インターネット上のサーバ、その他のリソースへ、SSHサーバ経由で閲覧出来るようにします。
この場合、ブラウザ(firefox)でSocksプロキシを127.0.0.1:9000に設定し、http://172.16.0.2へ接続すると、図中オレンジ色の破線の流れで通信が転送され、適切な宛先(172.16.0.2)へ通信が転送されます。
また同じブラウザで、http://www.google.co.jpへ接続すると、図中オレンジ色の破線の流れで通信が転送され、適切な宛先(google.co.jp)へ通信が転送されます(SSHサーバからインターネットへの疎通性がある場合に限ります)。
また、ウェブブラウザに限らずSocksプロキシが設定可能なソフトウェアについては、すべてSSHサーバから転送することが出来ますので、図中に「Socksプロキシ経由のHTTP通信」と書いていますが、HTTPに限らず転送できます。
メリット
- プロキシ経由の通信はすべて転送できるので、SSHサーバ側拠点に接続したいサーバが多くある場合、それらすべてに非常に簡単にアクセス出来るようになります。
- SSHサーバ側から見た接続先のIPアドレスを指定すれば接続できるので、そのサーバへアクセスしているのか判別が容易です。
デメリット
- Socksプロキシに対応したソフトウェア以外では使用できません。
※ブラウザやWinSCPなどは対応しますが、多くのソフトウェアで対応していないです。
まとめ
ダイナミックプロキシは、一番オススメの使い方です。
抜け道を作るのにすごく便利(違
ちなみに検証しないで記載している部分も多いので、誤りがあれば教えていただけますと幸いです。
3件のフィードバック
[…] SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】様を参考に、ダイナミックフォワーディングを試行してみた。 […]
[…] こと、SSHポートフォワーディングなるものを発見。 SSHポートフォワード(SSHトンネル)【ローカル・リモート・ダイナミック総集編】様を参考に、ダイナミックフォワーディングを試行 […]
[…] 参考:https://www2.filewo.net/wordpress/2014/08/05/ssh%E3%83%9D%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89%EF%BC%88ssh%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%EF%BC%89%E3%80%90%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%BB%E3%83%AA/ […]