sshポートフォワーディング
sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
読み方
- sshポートフォワーディング
- えす えす えいち ぽーと ふぉわーでぃんぐ
- ssh port forwarding
- えす えす えいち ぽーと ふぉわーでぃんぐ
目次
概要
sshコマンドでは、ポートフォワーディングをサポートしています。 ssh でトンネリングすることで、暗号化されていないプロトコルを安全に扱えます。 環境によると思いますが、外部からの接続ができない環境であってもリモートポートフォワーディングを利用すれば、接続できるケースもあります。
ポートフォワーディング
ポートフォワーディングには、以下の種類があります。
- ローカル
- リモート
- ダイナミック
ローカルポートフォワーディングの例
ローカルポートフォワーディングは、 -L オプションを利用します。
-L [bind_address:]local_port:remote_hostname:remote_port
クライアントからサーバに対して、sshトンネルを作成します。
localhost:8080 と foo:80 をつなぐ。
% ssh -L 8080:foo:80 foo
8080には、ローカルホストからしか接続ができません。 ローカルホストにログインできるユーザやプロセスが8080に接続できます。
ローカルホストが hoge だとして hoge:8080 と foo:80 をつなぐ。
% ssh -L hoge:8080:foo:80 foo
hoge のアドレスにアクセスできるプロセス、ユーザからhoge:8080を利用できます。
リモートポートフォワーディング
サーバからクライアントにポートフォワーディングします。
-R [bind_address:]in_port:hostname:goal_port
リモートの syslog をローカルに飛ばしてくる、といったことができます。
ダイナミックアプリケーションレベルポートフォワーディング
ssh は、SOCKS4, SCOKS5 プロトコルをサポートしています。
-D [bind_address:]port
ゲートウェイポート
ポートフォワーディングは、デフォルトでは、別のホストから接続できません。 ssh に -g オプションをつけることで、0.0.0.0 でバインドするため、リモートからでも接続可能になります。
リモートポートフォワーディングは、サーバ側で許可が必要です。sshd_config で GatewayPorts yes と設定します。
利用例
ホームネットワークのsshd に外部から接続する
フレッツなどでインターネットに接続している環境に Unix マシンがあります。 レンタルサーバを借りていて、レンタルサーバから Unix マシンに接続する例です。 ルーターのポートフォワーディングの設定をすればいいだけですが、ここでは、ssh のリモートポートフォワーディングを利用して実現します。
- Unix マシンのアドレスは、 192.168.0.2 とします。
- レンタルサーバは、 rental.com とします。
- 両方のホストのアカウントは、foo とします。
レンタルサーバ上の 4444 ポートを開き、そこに対する接続を 192.168.0.22 の 22 番ポートにフォワードします。 ssh の接続は、192.168.0.2 から レンタルサーバに対して行います。
- Unix マシンで下記コマンドを実行します。
-
% ssh -l foo -R 4444:192.168.0.2:22 rental.com
-
- レンタルサーバで 4444 ポートが利用できるようになります。
- レンタルサーバで ssh を実行します。
-
% ssh -l foo localhost -p 4444
-
多段リモートポートフォワーディング
host1 から host2 にリモートポートフォワーディングし、host2 から host3 にリモートポートフォワーディングをします。 host3 に作成したポートに接続して、host2 を経由して、 host1 の sshd に接続する例です。
- host2 の 1111 を localhost(host1) の 22に接続します。
-
host1% ssh -l foo 1111:localhost:22 host2
-
- host3 の 2222 を localhost(host2) の 1111に接続します。 1111 のポートは、 host1 の 22 に接続されています。
-
host2% ssh -l foo 2222:localhost:1111 host3
-
- host3 の 2222 に ssh コマンドで接続します。これは、最終的に host1 の 22 の sshd に接続されます。
-
host3% ssh -l foo localhost -p 2222
-
関連項目
ツイート