!!!技術的雑談-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}} [[技術的雑談]]へ戻る