- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!技術的雑談-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}}
[[技術的雑談]]へ戻る