PuTTY を使用したマルチホップ トンネル

PuTTY を使用したマルチホップ トンネル

3 ホップ SSH トンネル接続用に Putty を構成するにはどうすればよいでしょうか? 2 ホップ SSH トンネル接続用に Putty を構成する方法はわかっていますが、現在は 3 ホップで構成する方法を探しています。これを実現する手順を教えていただけますか?

2ホップの場合は、以下の方法に従います。

Windows 10 (Putty) --> Linux マシン1 (192.168.1.100) --> Linux マシン2 (192.168.1.150)

  • セッション ウィンドウに、宛先アドレス (192.168.1.150) とポート 22 が指定されます。
  • プロキシ オプションでは、中間サーバーの IP (192.168.1.100) とポート 22 を指定しました。
  • また、telnet コマンドについては、次のとおりです。

plink -agent -l %user %proxyhost -nc %host:%port

上記の設定は 2 ホップでは正常に機能します。しかし、現在必要なのは 3 ホップの SSH トンネルです。現在の設定を変更して、さらに 1 ホップ追加するにはどうすればよいでしょうか。

答え1

Linux マシン 1/2 と同じネットワーク上の追加のマシンに接続したいだけなのか、それともそれらのマシンを超えて別のネットワーク (たとえば、172.22.1.x 上のマシン 4) に移動する必要があるのか​​は不明です。

Linuxマシン1/2と同じ192.168.1.xネットワーク上の別のマシンにアクセスしたいだけの場合は、実際のSSHトンネル(Putty のメニューにありますConnection -> SSH -> Tunnels)。必要な数のマシンに複数のトンネルを設定できます。

実際に 3 番目のネットワークにアクセスしようとしている場合は、元の Putty インスタンスで定義されたトンネルを介して接続する別の Putty インスタンスを開くことができます。

  • Puttyで、ローカルマシンのポート(たとえば2222)をLinuxマシン2のポート22に転送するトンネルを定義します。
  • 次に、トンネルを使用する (つまり、Localhost:2222 に接続) Windows マシン上で別の Putty インスタンスを開き、追加のポート (たとえば、2223) を Machine4 のポート 22 (3 番目のホップ) に転送する新しいトンネルを定義します。
  • Puttyのインスタンスをもう1つ開き、Localhost:2223に接続してMachine4にアクセスします。

私はこれまで 2 ホップでしかこれを実行したことがないので、どのように機能するかはわかりません。これは理想的な解決策ではありませんが、これが唯一の選択肢である場合は機能する可能性があります。

編集:Windows/Puttyに限定されていない場合は、これ(透過的マルチホップSSH)好きなようにできます。Windowsに限定されている場合は、シグウィンより柔軟な SSH ツールがいくつかある可能性があります。

答え2

PuTTY を使用したマルチホップ トンネル

PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> 宛先 (dIP)

素早い回答:

あなたのアプローチは正しいです。jHost2 への plink のローカル プロキシとして jHost1 への plink を使用するだけです。

plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"

さらに詳しい説明と注意事項:

  1. -t(両方のプリンクで)使用して、端末信号動作します(ジャンプホストでリモートシェルを呼び出さないため)

  2. があるプレーンテキストのパスワード(コマンドライン/PuTTY 設定で) がいつ-l user -pw password使用されるか (PuTTY プレースホルダー %proxypass を使用するかどうかは関係ありません)。

    • パスフレーズなしで秘密鍵を指定するために使用します-i(PuTTYでは標準I/Oが使用されるため、入力できません)
    • または-agentPageantのキーを使用するために使用します
    • plinks はローカルで実行されるため、エージェント転送 ( -a) は必要ありません。
  3. 初めてコマンドラインから plinks を実行して、追加の質問がないかどうかを確認します。通常は、「受信パケットは復号時に文字化けしました「」エラーが発生する場合は、plink が jHost の SSH キーをインポートするように要求します。

  4. jHostとの使い方に注意してくださいjIPjHost論理ホスト名plink の "known_hosts" キー検索用 (Windows レジストリ内の PuTTY ストレージ)。jIP現在のホップから次のホップの名前/IP にアクセスできます。(通常は、応答できない他のネットワークから接続していますjHost。)

    • jHost2接続はプロキシ化されており、DNS ルックアップはまったく行われないため、外側の plink はそのまま使用できます。
    • 内部の plink は、ローカル キーの検索と次のホップへの NetCat のためにjIP1、接続に を使用する必要があります。-loghost jHost1-nc jIP2:jPort2
  5. 使用する必要がある場合TCP転送宛先 (許可されている必要があります) では、ジャンプ ホストがまったく存在しないかのように PuTTY で設定するだけです。これは、宛先への SSH 接続が jHost2 を介してトンネル化され、この接続が jHost1 を介してトンネル化され、ジャンプ ホストがトンネルを認識できないためです。

    • ジャンプ ホストに ssh して再度 ssh を実行して宛先に到達するだけでなく、<enter>~C<enter>シーケンスを使用してジャンプ ホストの ssh クライアントにエスケープし、-L/-Rコマンドを使用してトンネルを動的に追加する必要があります。

TCP転送なし

plink -nc(ssh -W同等) は、ジャンプ ホスト経由で標準 I/O を TCP 転送するローカル プロキシです。ジャンプ ホストで TCP 転送を許可できない場合は、限定的な回避策として、プロキシ設定なしで SSH して「接続 -> SSH -> リモート コマンド」でjHost1使用できます。ssh user2@jHost2 -t ssh user@Destination

この方法では、ジャンプ ホスト上で新しい SSH クライアントを起動します (キーが存在する必要があり、パスワードが再入力され、エージェントが転送され、構成/known_hosts が複製される必要があります...)。

関連情報