ssh を任意のポート、プロトコルの proxy にする

[2005-11-17] SSH 経由でネットワーク共有フォルダにアクセスする」の応用すると、次のような事例についても応用できる。
– Firewall があって ○○○ が使えないけど無理に使いたい
– クライアントからの○○の送信, アクセス元 IP アドレスをサーバの IP アドレスにしたい(例.メール送信元の隠蔽)
 
仕事で VNC 接続をサーバからにする必要があり、応用してみた(VNC over SSH using PuTTY)。
– Loopback NIC の IP アドレス(ex. 169.254.0.2)についてポート番号 5900 (VNC のディスプレイ0 のポート)への接続が ssh サーバ(ex. ssh.example.org)経由での接続先ホスト(ex. target.OCexample.com)の5900番への接続になるようにローカルポートフォワードする。こんなかんじ。

ssh -N -L 169.254.0.2:5900:target.example.com:5900 ssh.example.org

 -Nは接続後にシェルを開かないためのオプション。通常通り端末操作を行いたい場合ははずしてもよい。
PuTTY でやるなら、SSH トンネルのポートフォワーディングで
 
– 源ポート: 169.254.0.2:5900
– 送り先: target.example.com:5900
– ローカル
 
として追加しておき、ssh.example.org に接続すればよい。
ローカルで 5900 を LISTEN していなければ、Loopback IP アドレスを使う必要はないため、この場合 PuTTY では源ポートの指定はポート番号のみでよい。また ssh コマンドでは

ssh -N -L 5900:target.example.com:5900 ssh.example.org

でよい。
また、-g オプションと組み合わせて使うと、ローカルだけでなく外にもポートを開き、公開プロキシのように振舞えるようになります。

ssh -N -g -L 5900:target.example.com:5900 ssh.example.org

 
ダイナミックポートフォワーディングとローカルポートフォワーディングの
メリット、デメリットは次の通り。
 
– ダイナミック
○ 一度の設定で、サーバからアクセスできる場所であればどこにでもアクセスできる。
× SOCKS サーバとして動作するため, プロキシ接続用のクライアントソフトが SOCKS プロトコルに対応している必要がある。
 
– ローカル
○ SOCKS プロトコルに対応している必要がなく、どんなクライアントソフトでも利用できる。
× 接続先、ポート番号を逐一マッピングする必要があるため、複数箇所に対しては手間。