何年か前に無茶ぶりされて対応した件ですが、当時のメモ書きが出てきたので備忘のためメモメモ。
要望の内容
- インターネット経由でWindowsのファイル共有(CIFS)をしたい。
- サーバ側の開いているポートは443のみ
- クライアント側はProxy経由でHTTP/HTTPSしか通信できない
WebDAVじゃダメとのこと。
(経緯:元々LANで使用していたWindowsサーバをインターネット側に設置しなければいけなくなったらしい(知らんがな、、、というところですが))
で、「こんなの見つけたけど、これで何とかならない?」と言われたのがstoneというTCP/IPリピータソフトでした。
ソースコードも公開されているし、これでやってみるかー、と。
やったこと
ザックリ構成
クライアントからサーバまでの通信は以下のようになります。
- サーバ側:stoneが443番ポートでListenし、リクエストをTCP139番へ転送
- クライアント側:stoneがWindows共有(TCP139番)でLinstenし、プロキシに転送(通信をHTTP通信に見せかける)
クライアント側の設定
とりあえずstoneがポート139で待ち受けすれば良いんでしょ、と試したものの既に139番ポートが使われていてstoneが起動しない。。。対処として仮想NICを用意し、stoneは仮想NICの139ポートで待ち受けることに。
前準備
1.仮想NICのインストール
「ハードウェアの追加」から、「Microsoft Loopback Adapter」をインストール(細かい手順は下記サイト参考に。Windows7以降は同じ手順でいけるハズ)
2.以下のレジストリに対して、「Microsoft Loopback Adapter」を検索
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
3.検索したレジストリの NetCfgInstanceId の値をメモしておく(xxxxxx-xxxx-xxxx-xxxxx のような形式)
4.以下のレジストリについて、Bind、Export、Routeの値を編集。具体的には上記で検索したIDを削除する
5.ここまで出来たらOSを一度再起動
6.Loopback Adapterの「NetBIOS over TCP/IP」を無効化
7.Loopback AdapterのIPアドレスに「10.0.0.1/255.255.255.0」を割り当て(IPアドレスはプライベートIPの範囲であれば何でもOK)
これまで出来れば、10.0.0.1のTCP139番ポートでstoneが待ち受け可能になります。
stoneの設定
stone.cfg の中身
(ProxyIP):8080/http 10.0.0.1:139 "CONNECT (ServerIP):443 HTTP/1.0" ProxyIP ... ProxyサーバのIPアドレス ServerIP... サーバのグローバルIPアドレス
サービスへのインストール → 自動起動に変更(コマンド実行直後は手動起動なので手動→自動へ)
stone -M install stone -C c:\stone.cfg
これで、Proxyサーバから見るとHTTPSの通信をしているように見えます。肝は以下の記述。
"CONNECT (ServerIP):443 HTTP/1.0"
サーバ側
前準備は特になし、stoneの設定のみすればOK
stone.cfg の中身
(IPアドレス):139 443
サービスへのインストール → 自動起動に変更(コマンド実行直後は手動起動なので手動→自動へ)
stone -M install stone -C c:\stone.cfg
動作確認
ここまで出来れば、クライアント側のエクスプローラから「¥¥10.0.0.1」でインターネット側にあるWindowsサーバの共有フォルダに接続できます。
めでたし、めでたし。
コメント