
FreeRDP 3.33でWebAssemblyに対応
オープンソースのRDP実装FreeRDPがバージョン3.33を公開しました。新バージョンはWebAssembly(WASM)に対応し、FreeRDPをブラウザー内で実行できます。
今回の対応では、Emscriptenを使ってFreeRDPをWebAssembly向けにビルドします。リリースにはEmscripten向けのビルド修正や、ビルドとユニットテストを行うCIジョブも含まれます。
SDLクライアントの改善に加え、直接接続向けの実験的なUDP対応、全クライアントでのUnicodeキーボード入力パイプ対応、実験的なWindowsシャドウサーバー対応も盛り込まれました。macOSではFUSEに依存しないファイルクリップボードに対応し、メッセージ翻訳の初期サポートも加わっています。
ブラウザーからRDPサーバーへ接続する仕組み
WebAssembly対応では、RDPクライアントの処理をブラウザー内で動かします。FreeRDPの開発者はSDLクライアントをブラウザー向けの土台とし、AV1映像のデコードにはブラウザーのWebCodecsを使う実装を進めました。
接続時には、ブラウザーからWebSocketで通信を送り、WebSocketをTCPへ中継してRDPサーバーにつなぎます。開発者が構成例に挙げたwebsockifyを使う方式では、RDPサーバー側に専用のプロトコル機能を追加しません。
この構成ではFreeRDP自体がブラウザー上で動き、開発者はブラウザーとRDPサーバーの間でTLS接続を維持する形を想定しています。中継先がセッションを処理する構成ではなく、WebSocketとTCPをつなぐブリッジを使います。
Guacamoleとの構成の違い
Apache Guacamoleは、ブラウザーに配信するWebクライアントと、サーバー側で動くguacamole-serverから構成されます。guacamole-serverにはguacdというプロキシデーモンが含まれ、Webアプリ経由の接続を受けて、利用者に代わってリモートデスクトップへ接続します。
GuacamoleでRDPを使う場合、サーバー側にはFreeRDP 2.0.0以降が必要です。Guacamoleのサーバー構成が接続を仲介するのに対し、FreeRDPのWebAssembly構成ではクライアント本体をブラウザーで動かし、WebSocketからTCPへの中継を組み合わせます。
セキュリティ修正と次の更新
FreeRDP 3.33には、既知のセキュリティ修正が13件含まれています。リリースの変更一覧には、証明書処理、認証、クリップボード、ネットワーク接続などに関する修正も記載されています。
FreeRDPの開発者は、プルリクエストとバグ・回帰報告が大量に寄せられたとして、未処理の細かな不具合を含む修正版を近く出す予定を示しました。リリースノートでは、今回の変更を大規模な機能追加とバグ修正、CVE修正を伴うリリースと位置付けています。











