SSHコマンドでポートフォワーディング(ポート転送)する方法

SSHコマンドでポートフォワーディング(ポート転送)する方法

SSHでは、指定したポート宛に来たパケットを指定した宛先に転送する(ポートフォワーディングする)ことができ、この機能を利用することでさまざまなTCP/IPを使用するプログラムの通信を暗号化することができます。

そこでここではRedHat系Linuxを例に、SSHを利用した代表的なポートフォワーディング設定例を紹介します。

ローカルポートをフォワーディング

SSHコマンドでポートフォワーディング(ポート転送)する方法

上の図のような環境では、PCから直接Webサーバーにhttp接続できませんが、PC(SSHクラアント)のポート(ローカルポート)を転送するよう指定して中継サーバー(SSHサーバー)にSSH接続することで、PCからWebサーバーにhttp接続できるようになります。

たとえば、PC(SSHクラアント)で以下のコマンドを実行することで、自分自身のtcp10080番ポート宛の通信を、中継サーバー(SSHサーバー)を経由しWebサーバーのtcp80番ポートに転送されるようになります。

この状態で、PC上でhttp://localhost:10080にアクセスすると、http://192.168.1.201のコンテンツを表示することができます。

# ssh 192.168.1.200 -L 10080:192.168.1.201:80 -N

リモートポートをフォワーディング

SSHコマンドでポートフォワーディング(ポート転送)する方法

上の図のような環境では、ネットワークBのマシンは直接インターネット上のWebサイトを閲覧できませんが、中継サーバー(SSHサーバー)のポート(リモートポート)を転送するよう指定してPC(SSHクラアイント)から中継サーバー(SSHサーバー)にSSH接続することで、ネットワークBのマシンがインターネット上のWebサイトを閲覧できるようになります。

たとえば、PC(SSHクラアント)で以下のコマンドを実行することで、中継サーバー(SSHサーバー)のtcp9090番ポート宛の通信を、Proxyサーバーのtcp8080番ポートへ転送されるようになります。

この状態で、ネットワークB上のマシンが、HTTPプロキシーとして中継サーバーのtcp9090番ポートを指定すれば、インターネット上のWebサイトを閲覧できるようになります。

# ssh 192.168.1.200 -R 9090:192.168.0.101:8080

あとがき

ポートフォワーディングはネットワーク機器で設定することが多いですが、Linuxマシンで対応したいときは、上で紹介したsshコマンドを使った方法も便利です。