SSH経由のポート転送の設定
SSHポート転送では、クライアント・システムとサーバー・システムの間に暗号化されたSSHトンネルが作成されます。
次の3つのタイプのSSHポート転送を使用できます。
- ローカル・ポート転送: ポートをクライアントからSSHサーバーに転送した後、宛先ポートに転送します。
- 動的ポート転送: 様々なポートにわたる通信のためのSOCKSプロキシ・サーバーを作成します。
- 逆ポート転送: ポートをサーバーからクライアントに転送してから、宛先ポートに転送します。
ポート転送を使用する理由
ポート転送では、リモート・サーバーからプライベート・ローカル・エリア・ネットワーク(LAN)内のデバイスにアクセスでき、その逆も可能です。
ポート転送を使用すると、パブリック・ネットワーク・インタフェースに公開されていないサービスにアクセスできます。 リモート・サーバー上のサービス(データベースなど)にアクセスするためにローカル・ポート転送を設定できます。 サーバー上のデータベースはパブリック・ネットワーク・インタフェースに公開されていませんが、ローカル・マシンから内部データベース・サーバー・ポートへのトンネルを作成できます。 その後localhostに接続でき、すべてのトラフィックがSSHトンネルを介してリモート・データベースに転送されます。
逆ポート転送を使用すると、ローカル・ネットワーク外のユーザーが内部サービスにアクセスできるようになります。 たとえば、自分がローカル・マシンで開発したWebアプリケーションを仲間の開発者に示すことができます。 使用しているマシンにはパブリックIPがないため、他の開発者がインターネット経由でそのアプリケーションにアクセスすることはできません。 しかしながら、自分がリモートSSHサーバーにアクセスできる場合は、逆ポート転送を設定して仲間の開発者がアクセスできるようにすることができます。
サーバー側の構成
/etc/ssh/sshd_configファイルを編集して、SSHポート転送を構成します。 サーバー上で、少なくとも次のパラメータを確認します。
-
AllowTCPForwardingTCPポート転送を許可します。 省略した場合、デフォルトは
yesであり、単一のTCPポート転送およびSOCKSプロキシが有効になります -
AllowStreamLocalForwardingUNIXドメイン・ソケットの転送を許可します。 省略した場合、デフォルトは
yesです。
ローカル・ポート転送
ダイレクトTCP転送トンネルを作成するには、次のように、sshで-Lオプションを使用します。
ssh -L [bind_address:]port:destination:destination_port [user@]remote_ssh_server
bind_addressはオプションであり、これにより、接続をリスニングするローカル・インタフェースを割り当てます。 省略した場合は、sshにより、ループバック・インタフェースにのみバインドされます。 すべてのインタフェースにバインドするには、0.0.0.0または::を使用します。port: ローカル・ポート番号。1024より大きい任意のポート番号を使用できます。destination: 宛先マシンのIPまたはホスト名。 宛先がリモート・サーバー自体にある場合は、localhostを使用します。destination_port: 宛先マシン上のポート。[user@]remote_ssh_server: リモートSSHユーザーおよびサーバーIPアドレス。
たとえば:
ssh -L 8080:localhost:8888 user@192.168.1.20
これにより、192.168.1.20にあるリモート・サーバーへのSSH接続がオープンされ、localhostのポート8888へのトンネルがオープンされます。
動的ポート転送
動的ポート転送を使用して、指定したバインディング・ポートがSSHクライアントでリスニングされるようにし、SSHクライアントがSOCKSプロキシ・サーバーとして機能するようにします。 指定したポート上のすべての着信接続がトンネルを介して宛先マシン上の動的ポートに転送されるため、宛先ホストを指定する必要はありません。
動的ポート転送を作成するには、sshで-Dオプションを使用します。
ssh -D [bind_address:]port [user@]remote_ssh_server
逆ポート転送
逆方向トンネルでは、リモートSSHサーバーで受信した接続がすべてローカル・クライアント・ネットワークに転送されます。
逆ポート転送を作成するには、sshで-Rオプションを使用します。
ローカル・ポート逆転送の場合:
ssh -R [bind_address:]port:destination:destination_port [user@]remote_ssh_server
動的ポート逆転送の場合:
ssh -R [bind_address:]port [user@]remote_ssh_server