リモートのWindowsサーバーへセキュアにVNC接続する


自宅インフラ(自宅サーバーとは言っていない)にWindowsマシンが必要になったので、さくらのVPS for Windows Serverを1つ契約、自宅や出先からVNCのGUIでグリグリできるように環境構築したのでメモ。さくらのVPSのコントロールパネルからVNC接続できるのですが、そのために毎回さくらのコントロールパネルにログインしたくないのと、さりとて家から生VNCはセキュリティ的にどうなのよということで、SSHポートフォワードを使ってVNC接続を暗号化してWindowsサーバーにログインするようにしました。最初の設定は、さくらのVPS コントロールパネルから行います。

■ Windows側の準備

■■ RealVNC ServerとPowerShell SSH Serverのダウンロード

まずはRealVNC Serverをココからダウンロードします。プライベートな用途(実験目的)なのでココでFreeプランのキーを取得します。PersonalプランやEnterpriseプランにするとRealVNCだけで暗号化できるのですが、Freeプランは漢の生パケットです。なので、次に挙げるPowerShell SSH Server を併用します。

TechNetマガジンで紹介されていたPowerShell SSH Server、こちらも商用版があるのですが、個人使用は無償(ただし複数人および同時に複数SSHセッションを張ることができない)なので、こちらからダウンロードします。

■■ RealVNC ServerとPowerShell SSH Serverの設定

RealVNC Serverのほうは、できることが少ないので気休め程度ですが、パスワードをかけるようにしておきましょう。PowerShell SSH Serverですが、次の項目にチェックを入れておきましょう。

[Service]タブ → 「Run as a Windows Service」
[Connection]タブ → 「Enable SSH Tunnel Support」「Enable SSH Reverse Tunnel Support」(SCPとSFTPはお好みで)

これら設定が終わったら、画面上部「Save Changes」をクリックし、「Start」または「Restart」をクリックします。

■■ Windows ファイアウォールの準備

アプリケーションの設定ができたら、Windows ファイアウォールに穴をあけます。コントロールパネルからWindows ファイアウォールをクリックし、「詳細設定」をクリックします。受信の規則にVNC Serverが2つ、PowerShell Server V6が1つエントリされているかと思います。

VNC Serverのプロパティですが、私は以下のように設定しました。

[詳細設定]タブ → プロファイルに「プライベート」「パブリック」の2つをチェック
[スコープ]タブ → リモートIPアドレスで「これらのIPアドレス」を選択し、自宅の固定IPアドレスと踏み台VPSのIPアドレスを登録

PowerShell Server V6のプロパティですが、接続元を絞る要件などがなければ何も弄らなくてOKです。

■ 自宅のPCから繋いでみる

まずは自宅のPC(Fedora)からWindowsサーバーに向けてSSHのセッションを張ります。

上記のように、SSHのポートフォワーディングでlocalhostの5900番ポートをWindowsサーバーの5900番(VNCのポート)へ転送します。SSHのパスワード(Windowsのパスワード)を入力してログインすると、PowerShellのプロンプトが表示されます。

次に、VNCクライアントを立ち上げ、localhostへ接続しましょう。今回はChromeアプリのVNC Viewerを使いました。

WinSSHVNC_20150530_000

Connectを押下したあと、「Unencrepted Connection」という警告が出ますが、SSHポートフォワードで暗号化しているので気にせず「Connect」をクリックします。次にVNCサーバーで設定したパスワードを聞かれるので、パスワードを入力してOKをクリックします。Windowsサーバーにログオンしていない状態ですと、以下のような画面になります(壁紙は趣味で変えましたw)

WinSSHVNC_20150530_001

ここでCtrl+Alt+Delを押すわけにいかないので、VNC ViewerのソフトウェアキーボードでCtrl+Alt+Delを送信します。

WinSSHVNC_20150530_002

ここでユーザー名を聞かれる段階になったら、ソフトウェアキーボードは閉じてしまって構いません(てか邪魔ですよね?)。画面下部のキーボードボタンをクリックして閉じます。

WinSSHVNC_20150530_003

いよいよWindowsにログオンです。

WinSSHVNC_20150530_004

 

ご覧のように、デスクトップが表示されました。ログオン成功です。自宅から生VNCで繋がっていないことをnetstatで確認してみましょう。

WinSSHVNC_20150530_005

1行目のローカルアドレスがTCPの22番ポートですので、VNCではなくSSHが待ち受けていることがわかります。また、1行目の外部アドレスは画面上伏せていますが、自宅の固定IPアドレスになっています。他にESTABLISHEDになっている通信はlocalhostとリンクローカルアドレスなので、外部のホストから突かれていないことがわかります。(本当は野ざらしのVPSなので80番ポートや443番ポートが凄いことになっていましたが、Windowsファイアウォールで閉じました)

せっかくなので、SSHクライアントのほうも見てみましょう。

WinSSHVNC_20150530_006

ご覧のように、PowerShellをSSH越しに実行しています。

これでWindowsサーバーを外から弄る環境ができました。意外と簡単ですね。でわ〜♪