質問: `curl <this machine's ip>`の動作が `curl localhost`と異なるのはなぜですか? ( networkengineering.stackexchange から転送)私のネットワークには2つのraspberry piがあります-それらをpiとrhoと呼びましょう。アプリケーションがrhoのポートに接続して、piのポートでリッスンしているサーバーから結果を取得できるように、それらの間のsshトンネルを介してポート転送を設定しようとしています(私の最終的な目標は、実際にそのようなポート転送を設定することです)別のネットワーク上のホストが、rhoへのssh接続を介してpi上のsamba共有にアクセスでき、piへのファイアウォールポートを完全に開く必要がないことに注意してください。私のlanでのpiのipは192.168.42.69で、rhoのipは192.168.42.112です。これらは、ローカルネットワークから接続して接続するipです。これをテストするために、piのポート8000で最小限のpythonサーバー(simplehttpserverを使用)]を起動し、rhoでsudo ssh -l 140:localhost:8000 root@192.168.42.69 -nを実行します。rhoでcurl localhost:140またはcurl 127.0.0.1:140を実行すると、期待どおりの応答が得られますが、rhoでcurl 192.168.42.112:140を実行すると、接続が拒否され、以下の詳細な出力が表示されます。$ curl -vvv 192.168.42.112:140 * expire in 0 ms for 6 (transfer 0x2cd880) * trying 192.168.42.112... * tcp_nodelay set * expire in 200 ms for 4 (transfer 0x2cd880) * connect to 192.168.42.112 port 140 failed: connection refused * failed to connect to 192.168.42.112 port 140: connection refused * closing connection 0 curl: (7) failed to connect to 192.168.42.112 port 140: connection refused この不一致の理由は何ですか? この他の質問をチェックした があるため、rhoに環境変数http_proxyが設定されておらず、no_proxyも設定されていないことを確認しました。
回答: sshコマンドでは、bind_addressオプションに-lを指定していません。 man ssh: によると デフォルトでは、ローカルポートはgatewayports設定に従ってバインドされます。ただし、明示的なbind_addressを使用して、接続を特定のアドレスにバインドできます。 bind_address of localhostは、リスニングポートがローカルでの使用のみにバインドされることを示し、空のアドレスまたは*は、ポートがすべてのインターフェースから利用可能であることを示します。 localhost(127.0.0.1のエイリアスである ループバックインターフェイス のエイリアス)だけでなく、すべてのインターフェイスで接続を許可するには、bind_address of 0.0.0.0を-lオプションに含めます。例:.sudo ssh -l 0.0.0.0:140:localhost:8000 root@192.168.42.69 -n 特定のipでリッスンしたい場合は、0.0.0.0の代わりに指定できます。