インターネット越しにWindowsファイル共有(CIFS)をする

雑記
スポンサーリンク

何年か前に無茶ぶりされて対応した件ですが、当時のメモ書きが出てきたので備忘のためメモメモ。

みなさんの学校・職場等のセキュリティポリシーに違反する可能性があるためオススメしません。「こんなことも出来るよー」くらいで。何かあっても責任は取れませんのであしからず。。。

要望の内容

  • インターネット経由でWindowsのファイル共有(CIFS)をしたい。
  • サーバ側の開いているポートは443のみ
  • クライアント側はProxy経由でHTTP/HTTPSしか通信できない

WebDAVじゃダメとのこと。
(経緯:元々LANで使用していたWindowsサーバをインターネット側に設置しなければいけなくなったらしい(知らんがな、、、というところですが))

で、「こんなの見つけたけど、これで何とかならない?」と言われたのがstoneというTCP/IPリピータソフトでした。

Simple Repeater `stone'

ソースコードも公開されているし、これでやってみるかー、と。

やったこと

ザックリ構成

クライアントからサーバまでの通信は以下のようになります。

  • サーバ側: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サーバの共有フォルダに接続できます。

めでたし、めでたし。

 

コメント