開発のきっかけ
とある理由で1、2ヶ月入院しないといけなくなりまして、ただ仕事は止められないし、病室からモバイルルータ+VPNで会社のネットワークを入るの辛いなと考えてまして・・・Guacamoleとかあるなーと思いつつもサーバでトラフィック中継するの辛い。Chrome Remote Desktopなんていいんじゃないの?と思いつつも認証機能ついてないのもまずかろう、という事で開発してみました。
システム構成
FreeRDPを使って頑張るという選択もありましたが、iPadやChromeBookでも使いたいので、Chrome Remote Desktopと同じWebRTCを使ってP2Pで実装することにしました。構成は以下のものです。
- リモートクライアント側のエージェントにはElectronを採用しました。リモートデスクトップの取得にはMediaStream、キーボードやマウスの入力にはDataStreamを使っています。
- 管理サーバ系はEC2の上にdocker-swarmにて構築しました。ユーザ管理、デバイス管理情報はRDS内に格納してあります。
- IDPにはkeycloakを使い管理画面へのアクセスにはoidc認証が必要となります。
- STUN&TURNにはさくらインターネットさんのVPSを利用しました。
ざっくり構成はこんなところで、WebRTC利用時にSSOで認証できる形にしてあります。この構成であれば
- 管理画面アクセス時にkeycloakにて2要素認証
- シグナリングサーバ接続時にデバイス認証
が可能になるので当初の目的であった認証付きリモートデスクトップ(RDPを使わずに)が可能となります。
性能
コーディックはVP8でパフォーマンスは40fpsくらいで動作するものが完成しました。もう少しパフォーマンスチューニングすれば、更なる最適化が図れるかなと考えています。
商品化について
本システムにstripeで課金処理をつけて商品化しました。
コロナ禍に限らず、私のように急にオフィスに出勤できなくなった人達にご活用いただければと考えております。
ブラウザだけでサクッと動きますので、簡単にお試しいただけます。