遠隔地パソコンzebedeeVNCを使ってインターネット越しに操作

zebedeeとフリーのVNCを使って、インターネット越しにパソコンの遠隔操作を試みました。
zebedeeは、クライアント認証暗号化などのトンネリング機能を備えたフリーソフトです。
zebedeeのトンネリング機能を用いて通信の安全を確保します。
オーバーヘッドによる遅延を避けるため、VNCが持っているトンネリング機能は使わないことにします。

遠隔の保守サポートで使えるよう、操作される側のグローバルIPアドレスは一時的な割当を想定します。
ただし、操作する側は固定のグローバルIPアドレスドメイン名などで静的に参照できることが前提です。


エンドユーザの方のパソコンを遠隔操作する場合、込み入った手順は要求できません。
また、操作する側からの一方的な接続を可能にすると、「李下に冠を正す」ことになりかねません。
運用段階では複雑な操作を避けること、操作される側の主導権を保証することを目標にします。

ダウンロードとインストール

VNCは、ベクターに公開されているRealVNC日本語インストール版を選択しました。
zebedeeのバージョンは2.4.1Aです。
操作される(サーバ)側、操作する(クライアント)側のどちらもWindowsで試しました。

両方のパソコンにVNCzebedeeをインストールします。
ダウンロードやインストールの手順は、ここでは触れません。(簡単です。)
全て標準的な設定でインストールします。
VNCは、一時的な使用なので、サービスに登録しません。(インストーラのデフォルトのままです。)

「プログラム(アプリケーション)の追加と削除」でアンインストールも簡単にできます。
全て標準のポートを使って行いました。

ルータの設定

必要な場合、ルータを設定します。
操作される側、操作する側ともに、使用するのはzebedeeのポート(TCP11965)だけです。
ファイアーウォールなどで通信を遮断している場合、解除が必要です。
操作する側のパソコンがグローバルIPアドレスで参照できない場合、TCPの11965をフォワードします。
操作される側から接続するので、操作される側はポートフォワードしなくてもつながりました。

操作される側のパソコンがグローバルIPアドレスの場合、外部からVNCのポートで接続される危険があります。
セキュリティホールになるので、ルータでVNCのポート(TCPの5800と5900)を塞ぎます。
ルータを使っていない場合は、VNCのパスワード認証などでブロックするしかありません。

鍵の作成…操作する側

鍵(秘密鍵)を用いたクライアント認証によって、部外者からの接続を防ぎます。
鍵は、操作する側のパソコンで、コマンドを入力して作ります。
先ず、コマンドプロンプトを開いてzebedee.exeがインストールされたフォルダに移動します。
通常なら、「cd c:\program files\zebedee」で行けます。
以下のコマンドで秘密鍵を作ります。「p001.key」は秘密鍵が保存されるファイル名で、名前は任意です。
zebedee -p > p001.key
同じフォルダに「p001.key」という秘密鍵が入ったファイルができます。
メモ帳などで開いてみると、以下のような形式の文字が並んでいます。
privatekey "1e34d6769502bae1087c18d2e8c8776e4a17ddaf"
確認したらファイルは閉じて下さい。
この秘密鍵の文字列は、操作する側の設定ファイルで使います。

続いて以下のコマンドを入力します。「zebedee-checkidfile.id」は保存されるファイル名(名前は任意)です。
zebedee -P -f p001.key > zebedee-checkidfile.id
できたファイルをメモ帳などで開いてみると、以下のような形式の文字が並んでいます。
135f04050961d37553731250d5c6f7495f088b32 myhostname
myhostname」は、操作しているパソコンのコンピュータ名です。
作成した「zebedee-checkidfile.id」は、操作される側の設定ファイルで使います。
zebedee-checkidfile.id」を、USBメモリーやフロッピーなど、移動できる媒体にコピーしておきます。

設定ファイルの準備…操作する側

メモ帳などを使って、以下のようなzebedee-client.zbd(名前は任意)を作成し、デスクトップなどに保存します。
server false
privatekey "1e34d6769502bae1087c18d2e8c8776e4a17ddaf"
keygenlevel 2
maxbufsize 16383
listenmode true #クライアントはサーバからの接続を待つ
connecttimeout 600 #クライアントがサーバからの接続を待つ時間(秒)
tunnel 25900:*:5900 #Localhostの25900を接続したサーバ(不定)の5900にトンネル
compression zlib:6
logfile SYSLOG
verbosity 1 #メッセージのレベル(0〜5,デフォルト:1)
privatekey "1e34d6769502bae1087c18d2e8c8776e4a17ddaf"」は秘密鍵の文字列です。

設定ファイルの準備…操作される側

c:\zebedee-serverというフォルダを作成し、そこにzebedee-checkidfile.idをコピーします。
メモ帳などを使って、以下のようなzebedee-server.zbd(名前は任意)を作成し、上記フォルダに保存します。
server true
udpmode false
checkidfile 'zebedee-checkidfile.id'
keygenlevel 2
keylength 256
minkeylength 32
keylifetime 36000
maxbufsize 16383
clienthost xxxxxxxxxx #サーバ→クライアントの際の接続先クライアント
target localhost
compression zlib:9
logfile SYSLOG
timestamplog true
verbosity 1 #メッセージのレベル(0〜5)
xxxxxxxxxxは、操作する側のグローバルIPアドレスなどです。
ルータのポートをフォワードする場合は、ルータのグローバルIPアドレスなどです。
DNSで、そのコンピュータ、またはルータを示す文字列でも構わないと思います。
YAMAHAのダイナミックDNS(xxxx.aax.netvolante.jp)でもつながりました。

操作する側のグローバルIPアドレスが一時的な割当で静的に参照できない場合、xxxxxxxxxxが変わることがあります。
静的に参照できない場合は、接続する前に確認して、変わっていれば修正が必要です。

起動用に以下のzebedee-server.bat(名前は任意)を作って、デスクトップなど、任意の場所に保存します。
@echo off
echo zebedeeを起動します。中止は[Ctrl]+[C]
pause
cd c:\zebedee-server
start zebedee-server.zbd

VNCサーバの準備…操作される側

操作される側で、スタートメニューから[VNCサーバの起動]でVNCサーバ(ユーザモード)を起動します。

起動したら、タスクバーのVNCサーバアイコンを右クリックし、オプションを開きます。


[認証]タブを選んで、「認証や暗号化をしない」設定にします。
VNCのパスワード認証を使用する場合、「VNCパスワード認証」をチェックします。
パスワードは、右の[環境設定]ボタンをクリックして設定します。
ルータでVNCのポートを遮断しない(できない)場合、パスワード認証が必要だと思います。


[接続]タブを選んで、「ローカルマシンからの接続のみ受け入れる」設定にし[ OK ]をクリックします。
zebedeeはLocalhost(127.0.0.1)からの接続として振舞います。
この設定は、外部からVNCのポートを使った接続をブロックする目的です。


タスクバーのVNCサーバアイコンを右クリックし、VNCサーバを終了します。


以上が、準備作業です。

VNCを開始する操作

@ 操作する側で、zebedee-client.zbdをダブルクリックして、接続を待つlistenmodeで起動します。

A 操作される側で、zebedee-server.batをダブルクリックして、zebedeeサーバを起動します。
操作する側のグローバルIPアドレスが一時的な割当で静的に参照できない場合、Aの前に確認が必要です。
IPアドレスが変わっていれば、zebedee-server.zbdの「clienthost xxxxxxxxxx」を現在のIPアドレスに修正します。

B 操作される側で、スタートメニューから[VNCサーバの起動]でVNCサーバ(ユーザモード)を起動します。

C 操作する側で、スタートメニューから[VNCビューワの起動]でVNCビューワを起動します。
サーバには「127.0.0.1:25900」または「localhost:25900」を指定します。


以上で、VNCビューワが開き、操作されるパソコンのデスクトップが表示されます。

VNCを終了する操作

作業が終わったら、操作する側で以下を行って終了(後始末)します。

D デスクトップ画面に戻って、タスクバーのVNCサーバアイコンを右クリックし、VNCを切断します。


E 引き続いて、タスクマネージャを開き、zebedee.exeを終了します。
しばらくすると、操作される側のzebedee.exeも自動的に終るようです。


F 最後に、操作される側で、タスクバーのVNCサーバアイコンを右クリックし、VNCサーバを終了します。



ご意見、お問い合わせは → 

ACCESSの使い方トップページ

あとがき

接続する際、操作される側が行うのはAとBだけなので、操作は簡単です。
また、操作される側が接続のアクションを起こすので、主導権も保証されます。

ADSL回線の環境で、ストレス無く操作できる程度のレスポンスは確認できました。
出向かなければ出来なかった作業を減らせるかも知れません。
保守やサポートのサービスを受ける側にとっても、移動時間を省略することはメリットだと思います。

以上の手法は、zebedeeのマニュアルに従った具体例だと認識しています。(裏技ではありません。)
サーバ主導の接続(Server-Initiated Connections)』の章に記載されています。
サーバは待ち受けクライアントが接続するのが通常のスタイルですが、zebedeeも同様です。
今回は、操作される側のセキュリティを高める目的で、サーバ側から接続する特殊な方法を用いました。

クライアントが接続のアクションを起こす設定ファイルの例は、以下にあります。
リモート(遠隔地)のデータベース(MySQLやPostgreSQL)を安全にzebedeeで接続
この例は、VNCではなく、データベースとの通信ですが、ポートを読み替えれば他は同様です。

よかったら、参考にして下さい。



〒745-0801 山口県周南市大字久米327-145
中川システム開発 ホームページ
Tel(0834)28-0205 Fax(0834)28-1272