私はPuTTYを使用してSSHリバーストンネルポートフォワーディングを実現しています。ほとんどのチュートリアルでは、リモートポートをローカルホストポートに転送する方法を教えています。ただし、192.168.1.132:8081
などの他のホストを[宛先]フィールドに入力するのが理にかなっていることを知っていますか?
私はそれをやろうとしました。 192.168.1.132:8081
はコンテンツページを備えた動作中のWebサーバーですが、クライアントデバイスからERR_EMPTY_RESPONSE
(ポートlocalhost:12345
をソースポートとして設定)にアクセスすると、12345
を取得しました。
私のPuTTY構成
送信プロキシ構成:
トンネリング構成(Dynamic
はSocks5接続用です。無視してください。R12345
は私が遊んでいるトンネルです):
宛先(SSHサーバー)からトンネルにアクセスしようとした結果:
誰か助けてもらえますか?
UPDATE 1
SSHコマンドを実行しているデバイスで、プロキシサーバーを介して外出します。それは逆トンネルの動作に影響を与えていますか?
UPDATE 2
Httpサーバーから直接リバーストンネルを作成しようとしました。ただし、SSHサーバーでは、 http:// localhost:12345 でWebサイトにアクセスできます。設定と結果は以下のとおりです。
はい!
[〜#〜] but [〜#〜]指定するこのother_Host
はLAN 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
ではありません。
注意すべきいくつかの微妙なこと:
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
コンソールに出力されます。nc
やsocat
などの他のツールを組み合わせて使用する必要があります。-R
と-L
の使用です。このトピックを簡単に理解するための秘訣は、ssh client
とssh server
が2つの異なるネットワークLANに属していると考えることです。 other_Host
が使用されている場合、ssh client's
のコンテキストは-R
LANから取得されます。それ以外の場合、-L
の場合、コンテキストはssh server's
LANで取得されます。-L
フィールドを追加した場合、公的にアクセス可能なポートを開くことができるのはaddress binding
のみです。はい、できますが、それがどのように機能するかを理解していないと、間違った仮定をするのは簡単です。
私が正しく思い出せば(数ヶ月経ちましたので、すぐに答えを得るために、私はこれを正しく理解していると思います...)
「ローカル」ポートで指定されたトンネルにより、SSHクライアントを実行しているマシンでリッスンするソフトウェア(「リスナー」と呼びます)が発生します。 「リモート」ポートにより、SSHサーバーを実行しているマシンでリッスンするソフトウェア(「リスナー」と呼びます)が発生します。
トンネルを使用したローカルホストの理解:
これが、ループを簡単に通過できる非常にトリッキーな部分です。通常、1台のコンピューターを使用している場合、「localhost」はそのコンピューターを指していると思います。しかし、ええと、いいえ。 「宛先」フィールドはテキストと考えるのが最善です。したがって、リスナーがトラフィックを受信した後、リスナーはそのトラフィックをローカルSSHソフトウェアを介して転送します。これにより、データが暗号化され、トラフィックがトンネルを介してプッシュされます。トラフィックを送信している側も「宛先」情報を提供します。次に、リモートSSHソフトウェアがそのトラフィックを受信し、宛先の内容を確認して、そこにトラフィックを送信しようとします。
したがって、クライアントで「localhost」と入力すると、テキスト「localhost」がSSHトンネルを介して送信され、実際には「localhost」を解決するのはリモートエンドです。したがって、localhostは、名前を入力したマシンとは異なるマシンを簡単に参照できます。
はい、宛先ホストフィールドに任意のホストを入力できます
この回答の目的のために、X:Y:Z
の形式を使用します。これは、コマンドラインSSHクライアントがトンネルを記述する方法です。このトンネルは次のとおりです。
1234:localhost:4321
として記述されます
宛先が設定されているトンネルには、次の2種類があります。
X:Y:Z
として定義されたトンネルの場合、トラフィックをポートX
の-clientに送信され、server Hostに接続しているものとして扱うことができます。ポートY
でZ
を実行し、トラフィックを転送します。
X:Y:Z
として定義されたトンネルの場合、トラフィックをポートX
の-serverに送信され、client Hostに接続しているものとして扱うことができます。ポートY
でZ
を実行し、トラフィックを転送します。
ローカルトンネルは、次の目的で使用できます。
リモートトンネルは、次の目的で使用できます。
プロキシを指定した場合は、プロキシ設定パネルの「除外されたホスト/ IPアドレス」リストにローカルIPアドレス(この例では192.168.1.132)を追加する必要がある場合があります。それ以外の場合、PuTTYを経由するリバースssh接続は、プロキシを使用してローカルIPアドレスに接続しようとします。