トップ 一覧 検索 ヘルプ RSS ログイン

技術的雑談-sshのportForwadingってなあに?の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!技術的雑談-sshのportForwadingってなあに?

!!環境

*sshのversion:3.6.1p2らしい
*OS:多分何でも大丈夫

!!目的
*sshのPort Forwadingって何なのか少しだけ説明

sshでは以下のオプションでポートフォワーディング(Port Forwarding)ができるらしい。

 ssh -l ユーザ名 -L port:host:port ホスト
 又は
 ssh -l ユーザ名 -R port:host:port ホスト

でも、これだけだとman読んでも良くわからない……(汗)

で、実際に試してみました。

!!実験

話の流れ上、

*'''sshdのいるホストを「サーバ」'''(以下の例ではhost1)
*'''sshを実行するホストを「クライアント」'''(以下の例ではhost2)

と呼ばせて頂きます。


!-Lって何?

Lオプションはmanによると

 Specifies that the given port on the local (client) host is to be
 forwarded to the given host and port on the remote side.  This
 works by allocating a socket to listen to port on the local side,
 and whenever a connection is made to this port, the connection is
 forwarded over the secure channel, and a connection is made to
 host port hostport from the remote machine.  Port forwardings can
 also be specified in the configuration file.  Only root can for-
 ward privileged ports.
 
 【適当訳:】
 これを指定すると、指定されたlocal(client)のポートを指定されたホストの
 指定されたサーバに転送する。
 local側にlistenするportを用意し、このポートへのアクセスはどこからのもの
 であっても指定されたportに転送される。云々。以下省略。

らしいので、要は、「クライアント側に1個Portの口をあけて、そこに来たアクセスは全部どこかに転送しまっせ」という事らしい。
(ただし、使えるのはrootだけらしい。)

んなわけで実験。
 
 host2# ssh -l hoge -L 8880:host1:80 host1

を実行すると、

* host2側でnetstat -aすると、localhost:8880がlistenになっている
* host1側は特に変化無し

という変化がおきます。

ここでhost2から、

 # telnet localhost 8880

を実行すると、実際にはhost1のport 80(=webサーバ)につながります。
「GET / HTTP/1.0」とEnter2回でhost1のトップページが表示できるでしょう。

また、先の-L 8880:host1:80の代わりに「-L 1234:www.hoge.com:80」なんて指定してsshを起動すると外部のwww.hoge.comに接続することができます。

!-Rって何?

先程の-Lでは、'''sshを使った側のサーバに'''転送用のPortができましたが、-Rでは'''sshdのある側に'''転送用のポートができます。

んなわけで再び実験。
 
 host2# ssh -l hoge -R 8880:host1:80 host1

を実行すると、

* host2側は特に変化無し。
* host1側でnetstat -aすると、localhost:8880がlistenになっている。

という変化がおきます。

試しに、

 host1# telnet localhost 8880

とすると、host1のwebサーバにつながります。
(いや、自分のwebサーバにポート変えて接続できて何が楽しいんだ?という疑問はありますが…。)

でも、こちらも同じく外部のhostを指定することができます。 

!!履歴
2005/12/27 -- 初版

[[技術的雑談]]へ戻る

!!突っ込み
{{comment}}

[[技術的雑談]]へ戻る

{{trackback}}

[[技術的雑談]]へ戻る