构建基于 Cloudflare Workers 和 WebRTC 的自托管远程桌面

构建基于 Cloudflare Workers 和 WebRTC 的自托管远程桌面

利用 Cloudflare 的边缘能力和 WebRTC 的点对点潜能,优化远程桌面服务。

运行远程桌面服务往往会产生高昂的成本和带宽限制,因为需要中继服务器来传输每个屏幕帧。一种更高效的方法是将控制平面与媒体平面分离,利用 Cloudflare Workers 和 WebRTC。

架构方案

传统的远程桌面服务通过中继服务器集中处理所有流量,从而造成瓶颈。可以通过拆分职责来优化此架构:

  • 控制平面:由 Cloudflare Workers 管理,通过 WebSocket 处理 API 请求、身份验证和信令。
  • 媒体平面:由 WebRTC 管理,促进屏幕内容和用户输入的点对点传输,绕过中继服务器。

控制平面详解

Cloudflare Workers 充当控制平面的骨干。它们高效地管理:

  • API 请求:使用无服务器函数处理请求和响应。
  • 身份验证:通过基于令牌或其它身份验证机制确保安全访问。
  • WebSocket 信令:促进对等节点之间连接的建立。

对于后端状态管理,利用了 Cloudflare 的一系列存储解决方案:

  • D1:Cloudflare 用于结构化数据的无服务器 SQL 数据库。
  • KV:用于会话数据的低延迟键值存储。
  • R2:用于较大文件或 Blob 的对象存储。
  • Durable Objects:用于 Worker 调用之间的一致状态,实现协调。

通过 WebRTC 实现点对点媒体传输

WebRTC 在对等节点之间提供直接通信通道,传输:

  • 屏幕内容:无需中央服务器的实时共享。
  • 用户输入:键盘、鼠标和剪贴板数据无缝流动。

这种设置降低了延迟并消除了对昂贵媒体中继的需求,直接影响性能和成本。

替代 VPS 部署选项

对于 Cloudflare Workers 不可行的环境,可以采用传统的 VPS 设置。这包括:

  • Node.js:用于运行应用程序逻辑。
  • SQLite:作为轻量级数据库解决方案。
  • Docker:用于容器化和管理部署。

该技术栈为偏好本地部署解决方案的用户提供了有效的替代方案。

GsDesk:开源实现

开源项目 GsDesk 实现了这一架构,专注于发现和身份验证,而不处理媒体中继。它允许开发者:

  • 探索并修改信令与控制逻辑。
  • 扩展功能以满足特定需求。

实现注意事项

部署此类系统时,请考虑:

  • 可扩展性:利用 Cloudflare 的边缘网络实现全球覆盖。
  • 安全性:实现强大的加密和身份验证机制。
  • NAT 穿透:必要时使用 STUN/TURN 服务器处理 NAT 和防火墙。
  • 浏览器兼容性:确保跨目标浏览器的 WebRTC 支持。

核心要点

  • 成本效益:消除中继服务器可降低运营成本。
  • 性能:点对点连接降低了延迟并提升了用户体验。
  • 灵活性:在 Cloudflare Workers 和基于 VPS 的部署之间进行选择。
  • 开源:GsDesk 为定制的远程桌面解决方案提供了基础。
Free field guide

Linux Server Hardening Checklist

30 practical steps to take a fresh Linux box from default to defensible. Enter your email — you'll get the PDF instantly, plus new posts on Linux, security & AI.