SSH転送はローカルでは機能しますが、リモートでは失敗します

SSH転送はローカルでは機能しますが、リモートでは失敗します

リモート マシンでポート SSH ローカル転送を作成しました:

ssh -N -L 127.0.0.1:3388:127.0.0.1:22 localhost

リモートマシン自体で動作します:

telnet localhost 3388

戻り値

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

ただし、ローカル マシンからこの転送を使用すると、次のようになります。

telnet remote.ip 3388

失敗します:

Trying remote.ip...
telnet: Unable to connect to remote host: Connection refused

リモート マシンの 3388 ポートがファイアウォールまたはネットワークの何かによってブロックされていると思われるので、SSH 転送をオフにして、リモート マシンのポート 3388 でリッスンしている http サーバーをテストしました。

python3 -m http.server 3388

次に、ローカル マシンからこのポートに接続します。

telnet remote.ip 3388

その結果は

Trying remote.ip...
Connected to remote.ip.
Escape character is '^]'.
quit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: 400</p>
        <p>Message: Bad request syntax ('quit ').</p>
        <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
    </body>
</html>
Connection closed by foreign host.

つまり、リモート マシンのポート 3388 はローカル マシンからアクセスできます。では、SSH 転送とネットワークは個別には正常に機能するのに、組み合わせると失敗するのはなぜでしょうか。誰かこれを修正する方法を知っていますか。よろしくお願いします。

答え1

SSH ローカル転送を設定して、localhost ポート 3388 のみをリッスンするようにしました。localhost はネットワーク上の他のデバイスからアクセスできないため、リモートで接続を確立できませんでした。

転送ポートをネットワーク上の他のマシンに公開するには、192.168.1.5 や 0.0.0.0 (すべてのインターフェース) などの到達可能なアドレスにバインドする必要があります。

例えばssh -N -L 0.0.0.0:3388:127.0.0.1:22 localhost

関連情報