SSH で転送したポートは常に SOCKS プロキシとは限らない
アプリケーションを設定する前に、SSH の固定ローカル転送と動的 SOCKS リスナーを区別しましょう。
SSH トンネルを作り、127.0.0.1 とそのポートをブラウザのプロキシ設定に入れても、何も読み込まれません。リスナーは完全に正常に動作している可能性があります。単に間違った種類のトラフィックを待っているだけかもしれません。
| 転送 | ローカルアプリケーションが送るもの | 宛先の選択 |
|---|---|---|
-L | 対象サービスの通常のプロトコル | SSH コマンドで固定 |
-D | SOCKS のネゴシエーション、その後のアプリケーション通信 | SOCKS クライアントが要求 |
単一の Web サーバーに対しては、これは固定転送です。
ssh -N -L 127.0.0.1:9080:web.example.com:80 [email protected]
http://127.0.0.1:9080/ を Web サイトとして開いてください。ポート 9080 を SOCKS と呼んではいけません。これはコマンドで指定した 1 台の Web サーバーにバイトを転送します。別のホスト名でサイトを開くと、そのバーチャルホスティング、リダイレクト、Cookie にも影響することがあります。
SOCKS リスナー の場合は形が変わります。
ssh -N -D 127.0.0.1:1080 [email protected]
アプリケーションを 127.0.0.1:1080 で SOCKS を使うように設定します。そのアドレスをブラウザのアドレスバーに直接入力すると、Web リクエストが SOCKS リスナーに送られ、これもまたプロトコルの不一致です。
OpenSSH のマニュアル には両方の形式が記載されています。有用な例外があります。既存の HTTP プロキシを -L で転送すると、固定の宛先自体が HTTP プロキシであるため、HTTP プロキシプロトコルを話すローカルポートができます。固定転送に何が属するかは、遠端のサービスが決めます。既存のプロキシを SSH 経由で転送する ことで、そのプロキシのプロトコルとアカウントが保たれます。