TCPTunnel for Win32 の使い方  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ver 0.4 2005/07/24 ver 0.4 2001/10/28 ver 0.3 2001/02/07 ver 0.2 2001/01/17 ver 0.1 2000/12/26 江端智一 E-mail:See http://www.kobore.net/mailAddress.gif http://www.kobore.net/ 0. 変更履歴  ̄ ̄ ̄ ̄ ̄ ̄ ver 0.5 Kenneth Golomb氏より頂いたパッチを適用 ver 0.4 ライセンスの見直し(BSDライセンスへ変更) ver 0.3 TCPTunnel for Win32 Version 0.3に合わせて変更 - UDPのポートフォワード機能を追加 - 上記機能の追加に共ない、tcptunnel.cfgのフォーマット を変更 ver 0.2 TCPTunnel for Win32 Version 0.2に合わせて変更 - スレッド解放に関するバグを修正(ソースコード) - TCPTunnel for Win32の多段利用のレポートを追加 ver 0.1 2000/12/26 初版 1. Copyright  ̄ ̄ ̄ ̄ ̄ ̄ Copyright (c) 2000,2001,2002,2003,2004,2005 Tomoichi Ebata. All rights reserved. 改変を加える場合も、加えない場合も、ソースとバイナリー形式での再配布、 使用は、下記の条件を満たした場合に許諾される。 1. ソースコードでの再配布物には、必ず上記の著作権表示、この条件リスト、 および以下の面責事項を、改変せずにファイルの最初の数行に入れなけれ ばならない。 2. バイナリー形式での再配布は、必ず上記の著作権表示、この条件リスト、 以下の面責事項の複製をドキュメンテーション内、あるいは配布と共にパッ ケージに入れられて提供される他の物の中に入れなければならない。 このソフトウェアは江端智一によって”現状のまま”提供されるものであり、 市場性があり売れる製品であるような含みを持たせ、特定の目的に適う製品で あるかのような、いかなる明示された保証はない。 また、なにか保証があるような含みを持たせた一切の保証の類からの責任も すべて拒否する。 著作者は直接的、非直接的、偶発的、特殊な、典型的、あるいは必然のいか なる場合においても、 いかなる損害に一切責任は負わない。 その損害は以下の内容も含み、しかもそれに限定されない。 代用となる物やサービスの調達、効果・データ・利益の低下、商取引の障害、 また、どのような責務の論理においても、それが契約に関するものであろうと、 厳格な責務であろうと、不正行為(不注意やその他の場合も含む)であろうと、 このソフトウェアを使用することによって生じるそれらの損害の、一切の責任 から著作者は免れている。 たとえ事前にそれらすべての損害への可能性が示唆されていた場合において も同様である。 2. What is "TCPTunnel for Win32" ?  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ "TCPTunnel for Win32"とは、立石様 ( Takaaki Tateishi )が作成された、Rubyプログラム"tcptunnel"のデザイン を踏襲して、Visual C++ を用いてWindows対応に移植したものです。 "tcptunnel"の内容に関しましては、立石様の http://kt-www.jaist.ac.jp:8000/~ttate/ftp/README.tcptunnel を御参照下さい。 ----- +------+ +------+ +-------+ +-| 各種 | | TCP | +-| 各種 | | |クライ|<------>|Tunnel|<------>| |BackEnd| | |アント| |サーバ| | |サーバ | | +------+ +------+ | +-------+ +------+ Windowsマシン +------+ "TCPTunnel for Win32"は、各種クライアントが、TCPTunnelサーバが稼働し ているWindowsマシンにTCPコネクション要求を行なうと、そのWindowsマシン は、BackEndサーバにコネクション要求(TCPのポートフォワード)を行います。 このような処理の結果、Windowsマシン経由で、クライアントとBackEndサー バの間でTCPを使ったサービスが可能となります。 どんなケースで、このようなトンネルサーバが必要になるかと言うと - 複数のBackEndサーバを用いることによる、サーバの負荷分散 - 一つのドメイン名(IPアドレス)で、多くの種類のサービスの提供 - BackEndサーバへのアタックを防ぐファイヤーウォール など、上げられますが、私の場合は、 - IPアドレスをWindowsNT用に一つしか貰えず、かつLinuxのサーバアプリ ケーションを自分だけでなく、プロジェクトメンバ全員に提供する必要 があった という、背景がありました。 http://www.kobore.net/tunnel.txt ----- "TCPTunnel for Win32" は、"tcptunnel" で具備している、以下の機能があ りません。 - アクセスを許可・拒否するIPの指定 - クライアントタイムアウト、及びサーバタイムアウトの指定 セキュリティ上の問題が生じる可能性は否定できませんが、私が必要としな かったので、実装していません。 ソースを公開していますので、必要に応じて追加実装して下さい。 一方、追加機能としては、以下のものがあります。 - 複数のポートを複数のBackEndサーバにフォワードする機能 - UDPのポートを複数のBackEndサーバにフォワードする機能 ----- "TCPTunnel for Win32"は、以下の2つのバージョンがあります。 (1)NTのサービス対応版 "TCPTunnel for NT Service" tcptunnel4nts.exe (2)Windows(全般)対応版 "TCPTunnel for Windows" tcptunnel4win.exe 以下、それぞれの使用方法に関してご説明致します。 3."TCPTunnel for NT Service" の使い方  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 3.1 前準備 ダウンロードした"tcptunnel4nts.exe"を、適当なディレクトリ(例えば、 "c:\bin\tcptunnel")に配置して下さい。 次に、"tcptunnel.cfg"を %SystemRoot%system32(例えば、 "c:\WINNT\system32")の下で作成します。 tcptunnel.cfgのサンプルを以下に示します。 tcp 2744 192.168.0.1 2744 tcp 2674 192.168.0.1 2674 tcp 23 erukan.kobore.com 23 udp 123 erukan.kobore.com 123 ↑ ↑ ↑ ↑ (3)BackEndサーバのポート番号 │ │ │ │ │ │(2) BackEndサーバ名(IPアドレスでもO.K.) │ │ │ │(1)TCPTunnelサーバ(tcptunnel4nts.exeを起動しているNT)の受付 │ ポート番号 (0) TCP or UDP (0)(1)(2)(3)の値はTABで区切り、(3)の後は改行を入れて下さい。 また、コメント等は(現バージョンでは)書けません。 (0)(1)(2)(3)の組は、最高30組の設定まで可能です。 3.2 "TCPTunnel for NT Service"のインストールと起動 コマンドプロンプトから、 tcptunnel4nts.exe -install と入力して下さい。インストールが完了し、コントロールパネル -> サー ビスの中に、"TCPTunnel"なるサービスが登録されているはずです。 これを選択して、開始ボタンを押して下さい。"TCPTunnel for NT Service" がNTサービスとして起動します。 3.3 "TCPTunnel for NT Service"のアンインストール コマンドプロンプトから、 tcptunnel4nts.exe -remove と入力して下さい。 コントロールパネル -> サービスの中から、"TCPTunnel"が消えているはず です。 4."TCPTunnel for Windows" の使い方  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 4.1 前準備 ダウンロードした"tcptunnel4win.exe"を、適当なディレクトリ(例えば、 "c:\bin\tcptunnel")に配置して下さい。 次に、"tcptunnel.cfg"を "tcptunnel4win.exe"のあるディレクトリの 下で作成します。 "tcptunnel.cfg"の内容は、3.1を参照して下さい。 4.2 "TCPTunnel for Windows"の起動 コマンドプロンプトから、 tcptunnel4win.exe と入力して下さい。 4.3 "TCPTunnel for Windows"の終了 コマンドプロンプトから、Ctrl-Cを入力して下さい。 5. 終わりに  ̄ ̄ ̄ ̄ ̄ ̄ C++のクラス設計の習作も兼ねて作成したもので、バグもそれなりに仕込ま れていると思います。 バグレポートを歓迎致します。 よろしくお願い致します。 TCPTunnelを多段に使ってみましたが、特に問題なく動作するようです。 +------+ +------+ +------+ +-------+ +-| 各種 | | TCP | | TCP | +-| 各種 | | |クライ|<------>|Tunnel|<------>|Tunnel|<---->| |BackEnd| | |アント| |サーバ| |サーバ| | |サーバ | | +------+ +------+ +------+ | +-------+ +------+ Windowsマシン Windowsマシン +------+ Linuxサーバマシンのカーネルバージョンアップ作業中に、サービスを停止 しなくてはならない為、WindowsNT(ノートパソコン)の中で、動作している Linux(VMware利用)を、代替サーバとして使うことができました。 TCPTunnel Mechanism (Step.2) (Step.1)+---------+ Request by "connect()" Request |TCPTunnel|--------------> ------------>| Server |<------------- Wait +---------+|| by +---------+| "accept()"+---------+ :(Step.3) :digTunnel - - - - -:- - - - - || V || From client +-----------+ To BackEndServer ---------||->| TCPTunnel |--||---------> +-----------+ || :(Step.4)|| : || V || To Client +-----------+ From BackEndServer <--------||--| ReturnWay |<-||---------- +-----------+ || || - - - - - - - - - - ClientSocket ServerSocket UDPTunnel Mechanism (Step.2) Store the source address - - - - -:- - - - - (Step.1) || V || (Step.3) From client +-----------+ To BackEndServer ---------||->| |--||---------> (Step.5) | UDPTunnel | (Step.4) <--------||--| |<-||---------- To Client +-----------+ From BackEndServer || || - - - - - - - - - - ClientSocket ServerSocket * Timeout mechanism should be needed.