web-dev-qa-db-ja.com

SSHリバーストンネルポートフォワーディングの宛先フィールドにローカルホストの代わりに他のホストを使用できますか?

私はPuTTYを使用してSSHリバーストンネルポートフォワーディングを実現しています。ほとんどのチュートリアルでは、リモートポートをローカルホストポートに転送する方法を教えています。ただし、192.168.1.132:8081などの他のホストを[宛先]フィールドに入力するのが理にかなっていることを知っていますか?

私はそれをやろうとしました。 192.168.1.132:8081はコンテンツページを備えた動作中のWebサーバーですが、クライアントデバイスからERR_EMPTY_RESPONSE(ポートlocalhost:12345をソースポートとして設定)にアクセスすると、12345を取得しました。


私のPuTTY構成

送信プロキシ構成:

Outgoing Proxy configuration

トンネリング構成(DynamicはSocks5接続用です。無視してください。R12345は私が遊んでいるトンネルです):

Tunneling config

宛先(SSHサーバー)からトンネルにアクセスしようとした結果:

The result that I try to access the tunnel from the Destination (SSH Server)

誰か助けてもらえますか?


UPDATE 1

SSHコマンドを実行しているデバイスで、プロキシサーバーを介して外出します。それは逆トンネルの動作に影響を与えていますか?


UPDATE 2

Httpサーバーから直接リバーストンネルを作成しようとしました。ただし、SSHサーバーでは、 http:// localhost:12345 でWebサイトにアクセスできます。設定と結果は以下のとおりです。

同じ、httpサーバーも私のオフィスのhttpプロキシ経由で送信する必要がありました!

httpサーバーからリバーストンネルを作成します

そして、localhost:12345経由でSSHサーバーからhttpサーバーにアクセスできます

1
mannok

はい!

[〜#〜] but [〜#〜]指定するこのother_HostLAN networkのコンテキストにあることを理解する必要がありますsshクライアントの。 sshクライアントsshサーバーは2つの異なるLANネットワークに存在する可能性があるためです。

例えば:

ssh -R 1234:192.168.1.69:4321 [email protected]
#                 ^
#                 |_ other_Host

次に、192.168.1.69が自分の側からping可能であることを確認することをお勧めします(sshクライアント)。 terabithiaのネットワークLAN内のterabithia.comの到達範囲内に192.168.1.69の同様のIPアドレスを持つマシンが存在する可能性がありますが、それは上記のスニペットで参照されているother_Hostではありません。

注意すべきいくつかの微妙なこと:

  • Terabithia.com内にリスニングtcpポート1234を設定したにもかかわらず、これはterabithia.comでは公開されていません。つまり、nc -w 5 -z terabithia.com 12202 && echo "open" || echo "close"によるポートの開放を確認すると、ポートはterabithia.com内でのみアクセス可能であるため、closeメッセージが出力されます。
  • コマンドnc -w 5 -z localhost 1234は、other_Hostにリスニングポートがない場合、またはother_Hostがまったく存在しない場合でも、terabithia.com内で常に成功します。この場合、エラーメッセージはssh clientコンソールに出力されます。
  • Sshはtcpベースのコネクション型通信プロトコルであるため、UDPポートを転送するには、ncsocatなどの他のツールを組み合わせて使用​​する必要があります。
  • 2つの大きな混乱は、-R-Lの使用です。このトピックを簡単に理解するための秘訣は、ssh clientssh serverが2つの異なるネットワークLANに属していると考えることです。 other_Hostが使用されている場合、ssh client'sのコンテキストは-RLANから取得されます。それ以外の場合、-Lの場合、コンテキストはssh server'sLANで取得されます。
  • -Lフィールドを追加した場合、公的にアクセス可能なポートを開くことができるのはaddress bindingのみです。
1
typelogic

はい、できますが、それがどのように機能するかを理解していないと、間違った仮定をするのは簡単です。

私が正しく思い出せば(数ヶ月経ちましたので、すぐに答えを得るために、私はこれを正しく理解していると思います...)
「ローカル」ポートで指定されたトンネルにより、SSHクライアントを実行しているマシンでリッスンするソフトウェア(「リスナー」と呼びます)が発生します。 「リモート」ポートにより、SSHサーバーを実行しているマシンでリッスンするソフトウェア(「リスナー」と呼びます)が発生します。

トンネルを使用したローカルホストの理解:
これが、ループを簡単に通過できる非常にトリッキーな部分です。通常、1台のコンピューターを使用している場合、「localhost」はそのコンピューターを指していると思います。しかし、ええと、いいえ。 「宛先」フィールドはテキストと考えるのが最善です。したがって、リスナーがトラフィックを受信した後、リスナーはそのトラフィックをローカルSSHソフトウェアを介して転送します。これにより、データが暗号化され、トラフィックがトンネルを介してプッシュされます。トラフィックを送信している側も「宛先」情報を提供します。次に、リモートSSHソフトウェアがそのトラフィックを受信し、宛先の内容を確認して、そこにトラフィックを送信しようとします。

したがって、クライアントで「localhost」と入力すると、テキスト「localhost」がSSHトンネルを介して送信され、実際には「localhost」を解決するのはリモートエンドです。したがって、localhostは、名前を入力したマシンとは異なるマシンを簡単に参照できます。

0
TOOGAM

SSHリバーストンネルポートフォワーディングの宛先フィールドにローカルホストの代わりに他のホストを使用できますか?

はい、宛先ホストフィールドに任意のホストを入力できます

コマンドライントンネルの定義

この回答の目的のために、X:Y:Zの形式を使用します。これは、コマンドラインSSHクライアントがトンネルを記述する方法です。このトンネルは次のとおりです。

  • ソースポート
    • 1234
    • ローカルホスト:4321

1234:localhost:4321として記述されます

トンネルのしくみ

宛先が設定されているトンネルには、次の2種類があります。

ローカルトンネル

X:Y:Zとして定義されたトンネルの場合、トラフィックをポートXの-​​clientに送信され、server Hostに接続しているものとして扱うことができます。ポートYZを実行し、トラフィックを転送します。

リモートトンネル

X:Y:Zとして定義されたトンネルの場合、トラフィックをポートXの-​​serverに送信され、client Hostに接続しているものとして扱うことができます。ポートYZを実行し、トラフィックを転送します。

トンネルは何に使用できますか

ローカルトンネルは、次の目的で使用できます。

  • インターネット経由でアクセスできないサービスへのアクセス
  • 特定のIPからのみ使用できるサービスへのアクセス

リモートトンネルは、次の目的で使用できます。

  • リモートシステムがインターネットに公開せずにローカルマシンのポートにアクセスできるようにする
  • インターネットを介してネットワーク上の他のシステムを公開する
0
jrtapsell

プロキシを指定した場合は、プロキシ設定パネルの「除外されたホスト/ IPアドレス」リストにローカルIPアドレス(この例では192.168.1.132)を追加する必要がある場合があります。それ以外の場合、PuTTYを経由するリバースssh接続は、プロキシを使用してローカルIPアドレスに接続しようとします。

0
Bram