sshには以下3種類のポートフォワーディング機能がある。ポートフォワーディングの説明はmanが詳しいが、さほどわかりやすいとは言えない。このエントリでは、ポートフォワーディングの使い方を図解して簡単にまとめる。
-
-Lによるポートフォワーディング -
-Rによる逆ポートフォワーディング -
-Dによるダイナミックフォワーディング
説明中のserver、remotehostはホスト名に、portやremoteportはポート番号に、それぞれ読み替えること。
ポートフォワーディング

ssh -L port:remotehost:remoteport server
serverを中継点にして、clientのportを、remotehostのremortportへフォワードする。
clientからは直接接続できないファイアウォール内側のホストに、serverを経由してアクセスしたい場合に使うポートフォワーディングだ。
逆ポートフォワーディング

ssh -R port:remotehost:remoteport server
-Lの逆で、clientが中継点になる。serverのportを、remotehostのremortportへフォワードする。
clientがファイアウォールの内側に居て、ファイアウォール内側の別ホストに対して、外部からアクセスさせたい場合に使うポートフォワードだ。
ダイナミックポートフォワーディング

ssh -D port server
-Lと似ているが、clientのportでSOCKSプロキシが立ち上がる。
SOCKSプロキシを経由した通信は、serverに中継されて他のホストへ送られる。他のホストからは、serverが通信してきたように見える。
まとめ
ポートフォワーディング機能は、直接接続できないファイアウォール内部のホストと一時的に通信したい場合や、Webアプリケーションのデバッグなどの際に重宝する。以前紹介したautosshを使えば、恒久的にポートフォワーディングによるトンネルを張り続けることも可能だ。
ただし、作業の度にsshでポートフォワーディングするような状況なら、VPNを整備するなど、環境そのものを見直す必要もあるだろう。
※注意
これら3種類のポートフォワーディングは、デフォルトでローカルホストにのみbindされる。ローカルホスト以外のホストにもトンネルを利用させたい場合は、bindアドレスの指定が別途必要になる。
