跳转到内容
搜索文档

在浏览器中渲染 VNC 客户端

最后更新 查看 MarkdownAgent 设置

虚拟网络计算机(VNC)服务器为用户提供对计算机桌面环境的远程访问。Cloudflare 可以在浏览器中渲染 VNC 终端,无需任何客户端软件或配置。

浏览器渲染的 VNC 需要将 VNC 服务器连接到 Cloudflare 并通过公共主机名路由流量。要访问 VNC 服务器,用户只需访问该公共主机名 URL,然后使用您配置的身份提供商通过 Cloudflare Access 登录。Cloudflare 将应用您的 Access 策略,并且在允许用户访问时,在其浏览器中渲染一个 VNC 客户端。

前提条件

1. 设置 VNC 服务器

出于演示目的,我们将在 Google Cloud Project (GCP) 中托管的 Ubuntu 虚拟机 (VM) 上创建一个 TightVNC 服务器。我们将配置 VNC 服务器以运行 XFCE,这是一个适用于远程访问的轻量级桌面环境。如果您已经安装了 VNC 服务器,可以跳过此步骤并转到步骤 2

  1. 打开您的 Ubuntu VM 的终端窗口。

  2. 运行以下命令安装 XFCE 和 TightVNC:

    sudo apt update
    sudo apt install xfce4 xfce4-goodies dbus-x11 tightvncserver -y

    此命令会安装桌面、一些有用的实用工具以及 VNC 服务器软件。

  3. 要初始化 VNC 服务器:

    1. 创建一个 VNC 服务器实例:

      vncserver
    2. 系统会提示您设置密码。此密码将用于连接到您的 VNC 服务器。长度限制为 8 个字符。

      TightVNC 现在将创建配置文件并在显示器 :1(使用端口 5901)上启动 VNC 会话。

    3. 系统会询问您是否要创建只读密码。您可以按 n 选择否。

    4. 杀掉此初始会话以便您可以编辑其配置:

      vncserver -kill :1
  4. 配置 VNC 以启动 XFCE 桌面:

    1. 如果缺少 VNC 配置目录,请创建一个:
    mkdir -p ~/.vnc
    1. 使用文本编辑器打开 xstartup file。例如,
    vim ~/.vnc/xstartup
    1. 将文件更新为以下配置:
    #!/bin/sh
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    startxfce4
    1. 使文件可执行:
    chmod +x ~/.vnc/xstartup
  5. 再次启动 VNC 服务器:

    vncserver -localhost :1

    -localhost 标志可确保 VNC 服务器仅侦听来自 VM 本身的连接,而不侦听来自公共 Internet 的连接。您的 VNC 服务器现在在端口 5901 上运行,但只能从 VM 内部的 localhost127.0.0.1)访问。

  6. (推荐)使用现有的 VNC 客户端测试 VNC 服务器,以验证是否缺少任何软件包或配置更改。例如,要测试托管在 GCP 上的 VNC 服务器:

    1. 在客户端机器上打开终端。

    2. 通过 SSH 连接到 VNC 服务器,将您的本地端口 5901 转发到 VNC 服务器的侦听端口:

      gcloud compute ssh [YOUR_VM_NAME] --zone=[YOUR_ZONE] -- -L 5901:localhost:5901
    3. 打开您首选的 VNC 查看器应用程序。

    4. 在 VNC 查看器中,连接到地址 localhost:5901 并输入您的 VNC 服务器密码。

    您应该会看到 Ubuntu VM 的桌面。

  7. (可选)配置 VNC 服务器在开机时启动:

    1. 找到 vncserver 命令的完整路径:

      which vncserver
      /usr/bin/vncserver
    2. 创建一个新的服务配置文件:

    sudo vim /etc/systemd/system/vncserver@.service
    1. 复制并粘贴以下内容。将 [YOUR_USERNAME] 替换为 VNC 服务器用户。如果需要,请将 /usr/bin/vncserver 更新为您的 vncserver 路径。

      [Unit]
      Description=Start TightVNC server at startup
      After=syslog.target network.target
      
      [Service]
      Type=forking
      User=[YOUR_USERNAME]
      WorkingDirectory=/home/[YOUR_USERNAME]
      
      PIDFile=/home/[YOUR_USERNAME]/.vnc/%H:%i.pid
      
      ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
      ExecStart=/usr/bin/vncserver -localhost :%i
      ExecStop=/usr/bin/vncserver -kill :%i
      
      [Install]
      WantedBy=multi-user.target
      1. 重新加载 systemd 以读入新的服务文件:
      sudo systemctl daemon-reload
      1. 启用该服务以在开机时启动:
      sudo systemctl enable vncserver@1.service

      1 变量配置 VNC 服务使用显示器 :1(运行在端口 5901 上)。

      1. 默认情况下,systemd 用户服务仅在该用户登录时运行。要允许您的 VNC 服务在开机时启动(在您登录之前),请为您的用户启用 user linger:
      sudo loginctl enable-linger [YOUR_USERNAME]
      1. 启动服务:
      sudo systemctl start vncserver@1.service
      1. 检查其状态:
      sudo systemctl status vncserver@1.service

      VNC 服务器现在将在每次 VM 启动时自动启动。

2. 将服务器连接到 Cloudflare

  1. 按照仪表板设置指南创建一个 Cloudflare Tunnel。

  2. 转到 Networking(网络) > Tunnels(隧道),然后选择您的隧道。

    Go to Tunnels ↗
  3. 在 **Routes(路由)**选项卡上,选择 Add route(添加路由),然后选择 Published application(已发布应用程序)

  4. 从下拉菜单中选择一个域名并指定任何子域名(例如,vnc.example.com)。

  5. 对于 Service,选择 TCP 并输入 localhost:<5901>。如果 VNC 服务器与您安装隧道的机器不同,请输入 <SERVER_IP>:5901

    5901 替换为您的 VNC 服务器的侦听端口。要确定您的 VNC 侦听端口,请运行 sudo ss -lnpt 并在进程列表中查找 vnc

  6. 保存路由。

您的 VNC 服务器现在已准备好接受来自 Cloudflare 的入站请求。

3. 为 VNC 创建 Access 应用程序

创建一个用户可以通过浏览器访问的 Cloudflare Access 应用程序:

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制) > Applications(应用程序)

  2. 选择 Create new application(创建新应用程序)

  3. 选择 Self-hosted and private(自托管和私有)

  4. 选择 Add public hostname(添加公共主机名) 并输入您已发布应用程序的主机名(vnc.example.com)。

  5. 开启 Allow access through browser-based RDP, SSH, or VNC sessions,然后选择 VNC

  6. Access policies 下,添加现有策略或创建新策略,以控制哪些用户可以连接到您的应用程序。所有 Access 应用程序默认均为拒绝状态——用户必须匹配 Allow 策略才能被授予访问权限。

  7. 选择 Create(创建)

4. 作为用户进行连接

用户现在可以直接在 Web 浏览器中访问远程桌面环境,而无需安装任何 VNC 客户端软件。

要连接到 VNC 服务器:

  1. 打开浏览器并转到公共主机名 URL(例如,https://vnc.example.com)。
  2. 使用您配置的身份提供商登录 Cloudflare Access。
  3. 输入 VNC 服务器密码。

您应该会在浏览器中看到渲染的远程 VNC 服务器桌面。所有连接都通过 Cloudflare 网络进行保护,访问权限由您的 Access 策略控制。

这篇文档对您有帮助吗?