ssh でポートフォワーディング
〜 ついでに cygwin でトンネリング 〜
2002-09-14 作成 福島
2004-02-11 更新 福島
TOP > tips > ssh-portforward
AD:本当においしいお茶に興味ありますか?

・ふつーにトンネリング

www.example.com:80 を current.example.com:10000 としてトンネリングさせる場合

current.example.com $ ssh -N -L 10000:www.example.com:80 who@shell.example.com

このとき、who@shell.example.com はどのサーバ、ユーザでも構わない。(ただし、ssh でログインできること。)
当然、www.example.com では sshd が動作していなくてはいけない。

+-----------------+                  +--------------+
|  +--- Port 10000|                  |Port 80 <--+  |
|  |              |                  |           |  |
|  +--> Port xxxxx| ===(暗号通信)==> |Port 22 ---+  |
+-----------------+                  +--------------+
current.example.com                  www.example.com

この状態で、
current.example.com $ lynx http://localhost:10000/
を実行すれば、www.example.com の Web ページを見ることができる。
※注意: ポートフォワーディングの設定をしたユーザだけでなく、誰でも利用できてしまいます。

オプションスイッチ -N
-N を付加せずに上記 ssh コマンドを実行すると、who@shell.example.com として shell が起動してしまう。
-N を付加すると、その shell の起動を抑止することができる。


・cygwin でトンネリング 上記を踏まえた上で、Windows から Unix へトンネリングしましょう。 ここでは cygwin を使います。
この技術を使うと、 ・データの秘匿性 ・安価 (運用コスト) ・安価 (導入コスト) ・耐障害性 ・障害時の復旧のしやすさ ・自由度 に優れたシステムを作れます。 各支店の VPN の機器及び設定が不要となるのが特徴です。 図では少し読みにくいのですが、各支店はそれぞれ安い ISP (ここでは CATV) に加入していると仮定します。 CATV の ISP では加入者に対してグローバル IP を与えないことが多いのですが、 リクエスト方向が単一なので、きちんと動作します。 予め、cygwin をインストールしておいてください。 このとき ssh を忘れずに。 +-----------------+ +----------------+ | +--- Port 10000| |Port 5432 <--+ | | | | | | | | +--> Port xxxxx| ===(暗号通信)==> |Port 22 ---+ | +-----------------+ +----------------+ windows.example.com db.example.com (Windows クライアント) (Unix サーバ) 離れたところにある DB サーバに ODBC で接続出来ます。 ポートフォワードしているだけなので、postgresql でも Oracle でも接続できます。 便利すぎて危険なので、接続制限をしっかりやること!
C:\cygwin\tunnel.bat (太字以外は C:\cygwin\cygwin.bat からのパクリです)
@echo off

C:
chdir C:\cygwin\bin

bash --login -c "ssh -p 10022 -N -L 10000:db.example.com:5432 who@shell.example.com"
※ cygwin を C:\cygwin にインストールした例です ※ shell.example.com のポートを 10022 としています
この C:\cygwin\tunnel.bat へのショートカットをスタートアップフォルダに入れておけば、起動時に自動実行できます。 必ず、接続できることを確認してからスタートアップフォルダに入れます。 スタートアップフォルダは  Windows95 系の場合 C:\WINDOWS\スタ−ト メニュ−\プログラム\スタートアップ\  WindowsNT 系の場合 C:\Documents and Settings\(ユーザ名)\スタート メニュー\プログラム\スタートアップ\ です。 起動時に自動実行する場合、パスワードを聞かれない設定 (参考: パスワード無しで SSH) を行うことが必要です。 ・アプリケーション この設定が出来たら、あとは DB サーバをインストールして、ODBC で繋ぐだけです。 当然、ODBC の DSN は localhost:10000 を指定します。 個人的にお勧めはしませんが、M$-ACCESS 直結も出来ます。