ssh でポートフォワーディング
〜 ついでに cygwin でトンネリング 〜
2002-09-14 作成 福島
2004-02-11 更新 福島
TOP > tips > ssh-portforward
・ふつーにトンネリング
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 直結も出来ます。