リモートデスクトップの問題点を解消する方法
最近ではブラウザだけでもさまざまなことができるようになりましたが、社内にいるのと同じ環境でPCを利用したいケースはやはり生じます。そこで、考えられるのがリモートデスクトップの利用です。
ただ、実際にリモートデスクトップを使ってみると、たまに端末が反応しない場合や接続ができないなど、さまざまな問題が生じます。
社内にそのPCを管理している人がいれば問題も軽減されますが、できるだけ、自分たちで解決できればより快適になります。そこで、リモートデスクトップで利用するPCを仮想化します。
仮想化ソリューション(VMware Workstation)の利用
Dockerが広く使われる前までは、仮想化技術を使って開発者が自分のPC上に開発環境を構築するということもよくありました。そのときにVMwareなどの製品を使っていたという開発者もいると思います。
そのようなケースでは多くの場合、Windows環境上にLinux環境などを構築して使っていたはずです。しかし、今回は図2のようにLinux上にWindowsゲストを動かして利用します。
![図2:VMware上に構築されたWindows環境例](http://cz-cdn.shoeisha.jp/static/images/article/17625/17625_02.png)
VMwareホストをLinuxにする大きなメリットは、コマンドでゲストOSの状況について調べられることです。また、ゲスト用Windowsも、利用用途に応じてハイスペック用とロースペック用になどの使い分けが可能です。
最近のデスクトップPCで使われているCPUはコアやスレッドの数も多く、CPUパフォーマンスが高いので、メモリだけ十分に用意すれば一台の端末上に複数のWindowsを動かしても十分実用性を保てます。
また、使用している場合のみゲストOSを起動して利用すれば、よりパフォーマンスの問題は生じなくなります。
今回、利用するソフトウェアは、VMware Workstation Proという製品です。
VMwareにはVMware Playerという製品もあり、個人利用であれば無償で利用できます。しかし、今回の前提は商用利用なので、VMware Workstation Pro(以下、VMware)のほうが使いやすいと思います。
コマンド(vmrun)を使ってできる操作
ゲストOSであるWindowsのインストールや初期設定はLinuxホスト上のGUI画面を使って行ってください。また、今回インストールするWindowsはリモートデスクトップ機能を使うために、Windows Proのライセンスが必要になります。
インストールが終われば、そのあとはvmrunというコマンドを使ってゲストOSをコントロールします。
VMware FusionというMac用の製品リファレンスにはvmrunの説明がありましたが、Workstationのリファレンス内では見つかりませんでした。しかし、筆者の環境では同様に利用できました。
vmrunコマンドでは表1のようなことが可能です。
コマンド | 説明 |
---|---|
list | 起動しているゲストOS一覧を取得する |
start | 起動する |
stop | 停止する |
reset | 再起動する |
suspend | サスペンドにする |
pause | 休止状態にする |
unpause | 休止状態から復帰する |
installTools | VMware toolsのインストールをゲストOSにする(実際のインストール作業はゲスト側OSで行う) |
getGuestIPAddress | ゲストOSのIPアドレス情報を取得する |
vmrunを使ってリモートデスクトップに接続するまでの流れ
実際に利用するシーンでは以下のような流れになります。
- 使いたいゲストOSの利用状況を調べる
- ゲストOSを起動する
- ゲストOSの接続IPを調べる
- 利用が終わったらゲストOSを停止する
Windowsのリモートデスクトップでの難点は、あとから利用しようとした人が接続すると前に使っていた人が強制的に使えなくなることです。そのため、同じPCを複数の人がリモートで共有して利用することが難しくなります。
さらにリモートデスクトップの機能では他の人が使っているのかを調べる方法はありません。そのため、利用するときに別途、コミュニケーションをとらなければならず、少々煩わしくもあります。
しかし、vmrunでホスト側からlistコマンドをリスト1のように使用すれば、実際に接続されているのかを確認することができます。
// 起動しているゲストOSがない場合の実行例 $vmrun list Total running VMs: 0 // 起動しているゲストOSがある場合の実行例 $vmrun list Total running VMs: 1 /opt/vmware/Windows11/Windows.vmx
続いて、自分が使いたいゲストOSが利用されていない場合には、リスト2のようにゲストOSを立ち上げます。また、/opt/vmware/Windows11/Windows.vmxというファイルは、ゲストOSの管理ファイルで実際にインストール時に任意に指定が可能です。
$vmrun start /opt/vmware/Windows11/Windows.vmx nogui
またWindows11の場合にはnoguiというオプションを必ずつける必要があります。そして、起動したら、接続するIPを調べるために、リスト3のようにIPアドレスを調べます。
$vmrun getGuestIPAddress /opt/vmware/Windows11/Windows.vmx -wait 192.168.1.31
表示されたIPアドレスに対して、RDPを使って接続します。必ずしも固定IPにする必要はありません。また、固定IPにしないことで、勝手な類推で接続を試みる利用者がいなくなるという利点もあります。
表示されたIPアドレスが想定されたネットワークのアドレスで表示されない場合には、図3のようにゲストOSの設定画面でハードウェア構成を確認してください。ゲストOS上のNetwork AdaptorがBridgedになっていないか、もしくは、Network Adapterが複数あるケースがあります。
このコマンドで表示できるIPアドレスは1つしかないため、複数のNetwork Adapterがあるとリモートデスクトップで外部から接続するためのIPアドレスを正しく表示できない場合があります。
![図3:VMwareのゲストOSのハードウェア設定画面](http://cz-cdn.shoeisha.jp/static/images/article/17625/17625_03.png)
また、VMware toolsがないというエラーメッセージが表示される場合があります。
加えて、VMware toolsはホストOSとゲストOSをつなぐ便利な機能やパフォーマンスを改善する機能があります。VMware toolsはゲストOSの初期設定時に必ずインストールするようにしてください。
利用が終わったら、リモートデスクトップ側からシャットダウンするのが簡単ですが、vmrunコマンドを使って停止する場合にはリスト4のように行います。
$vmrun stop /opt/vmware/Windows11/Windows.vmx soft
softオプションは正常停止処理をするためのオプションです。何か不具合などで正常に停止できない場合などは、hardオプションにて強制終了が可能です。
このようにコマンドを利用することで、利用するWindows端末がフリーズなどをしても簡単に再起動したり、また起動しているがつながらないなどの問題があっても解決しやすくなります。
リモート端末側の固定グローバルIP対応
続いて、リモート端末側に固定IPを付与したい場合でのVPNを使った解決方法を紹介します。
開発環境自体がクラウド上に存在するようなケースや、外部サービスを使う際にアクセス元でネットワーク制限をしたいケースがあります。このような場合に広く使われるのが、固定グローバルIPを使ったアクセス制限です。
一般的に会社などからのアクセスの場合は固定IPがあるケースが多く、また、方法も手軽であるため、このような制限はよく使われます。
しかし自宅のような環境の場合、固定のグローバルIPをもっているケースはほぼありません。そのような場合に利用できるのが、図4のようにクラウド上にVPNサーバを配置することです。
最近では、ゲームや海外サービスを利用するためやFree Wi-Fi上で安全にサービスを利用する目的で利用する有償のVPN接続サービスなどがありますが、それと同じような環境を構築します。
![図4:クラウド上にVPNサーバを配置する構成例](http://cz-cdn.shoeisha.jp/static/images/article/17625/17625_04.png)
このようにVPNサーバを経由することで、リモート端末側に固定IPが無くても、アクセス先から見た場合は指定した固定IPからのアクセスとして認識されます。出張時の宿泊施設でのFree Wi-Fiなどでも同様にセキュリティの安全性を高めることができるので、一石二鳥と言えるでしょう。