虚拟网络计算机(VNC)服务器为用户提供对计算机桌面环境的远程访问。Cloudflare 可以在浏览器中渲染 VNC 终端,无需任何客户端软件或配置。
浏览器渲染的 VNC 需要将 VNC 服务器连接到 Cloudflare 并通过公共主机名路由流量。要访问 VNC 服务器,用户只需访问该公共主机名 URL,然后使用您配置的身份提供商通过 Cloudflare Access 登录。Cloudflare 将应用您的 Access 策略,并且在允许用户访问时,在其浏览器中渲染一个 VNC 客户端。
- 一个 Cloudflare 上的活动域名。
- 该域名使用完整设置或部分(
CNAME)设置。
出于演示目的,我们将在 Google Cloud Project (GCP) 中托管的 Ubuntu 虚拟机 (VM) 上创建一个 TightVNC 服务器。我们将配置 VNC 服务器以运行 XFCE,这是一个适用于远程访问的轻量级桌面环境。如果您已经安装了 VNC 服务器,可以跳过此步骤并转到步骤 2。
-
打开您的 Ubuntu VM 的终端窗口。
-
运行以下命令安装 XFCE 和 TightVNC:
sudo apt update sudo apt install xfce4 xfce4-goodies dbus-x11 tightvncserver -y此命令会安装桌面、一些有用的实用工具以及 VNC 服务器软件。
-
要初始化 VNC 服务器:
-
创建一个 VNC 服务器实例:
vncserver -
系统会提示您设置密码。此密码将用于连接到您的 VNC 服务器。长度限制为 8 个字符。
TightVNC 现在将创建配置文件并在显示器
:1(使用端口5901)上启动 VNC 会话。 -
系统会询问您是否要创建只读密码。您可以按
n选择否。 -
杀掉此初始会话以便您可以编辑其配置:
vncserver -kill :1
-
-
配置 VNC 以启动 XFCE 桌面:
- 如果缺少 VNC 配置目录,请创建一个:
mkdir -p ~/.vnc- 使用文本编辑器打开
xstartupfile。例如,
vim ~/.vnc/xstartup- 将文件更新为以下配置:
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS startxfce4- 使文件可执行:
chmod +x ~/.vnc/xstartup -
再次启动 VNC 服务器:
vncserver -localhost :1-localhost标志可确保 VNC 服务器仅侦听来自 VM 本身的连接,而不侦听来自公共 Internet 的连接。您的 VNC 服务器现在在端口5901上运行,但只能从 VM 内部的localhost(127.0.0.1)访问。 -
(推荐)使用现有的 VNC 客户端测试 VNC 服务器,以验证是否缺少任何软件包或配置更改。例如,要测试托管在 GCP 上的 VNC 服务器:
-
在客户端机器上打开终端。
-
通过 SSH 连接到 VNC 服务器,将您的本地端口
5901转发到 VNC 服务器的侦听端口:gcloud compute ssh [YOUR_VM_NAME] --zone=[YOUR_ZONE] -- -L 5901:localhost:5901 -
打开您首选的 VNC 查看器应用程序。
-
在 VNC 查看器中,连接到地址
localhost:5901并输入您的 VNC 服务器密码。
您应该会看到 Ubuntu VM 的桌面。
-
-
(可选)配置 VNC 服务器在开机时启动:
-
找到
vncserver命令的完整路径:which vncserver/usr/bin/vncserver -
创建一个新的服务配置文件:
sudo vim /etc/systemd/system/[email protected]-
复制并粘贴以下内容。将
[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- 重新加载
systemd以读入新的服务文件:
sudo systemctl daemon-reload- 启用该服务以在开机时启动:
sudo systemctl enable [email protected]1变量配置 VNC 服务使用显示器:1(运行在端口5901上)。- 默认情况下,
systemd用户服务仅在该用户登录时运行。要允许您的 VNC 服务在开机时启动(在您登录之前),请为您的用户启用 user linger:
sudo loginctl enable-linger [YOUR_USERNAME]- 启动服务:
sudo systemctl start [email protected]- 检查其状态:
sudo systemctl status [email protected]VNC 服务器现在将在每次 VM 启动时自动启动。
- 重新加载
-
-
按照仪表板设置指南创建一个 Cloudflare Tunnel。
-
转到 Networking(网络) > Tunnels(隧道),然后选择您的隧道。
Go to Tunnels ↗ -
在 **Routes(路由)**选项卡上,选择 Add route(添加路由),然后选择 Published application(已发布应用程序)。
-
从下拉菜单中选择一个域名并指定任何子域名(例如,
vnc.example.com)。 -
对于 Service,选择 TCP 并输入
localhost:<5901>。如果 VNC 服务器与您安装隧道的机器不同,请输入<SERVER_IP>:5901。将
5901替换为您的 VNC 服务器的侦听端口。要确定您的 VNC 侦听端口,请运行sudo ss -lnpt并在进程列表中查找vnc。 -
保存路由。
您的 VNC 服务器现在已准备好接受来自 Cloudflare 的入站请求。
创建一个用户可以通过浏览器访问的 Cloudflare Access 应用程序:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制) > Applications(应用程序)。
-
选择 Create new application(创建新应用程序)。
-
选择 Self-hosted and private(自托管和私有)。
-
选择 Add public hostname(添加公共主机名) 并输入您已发布应用程序的主机名(
vnc.example.com)。 -
开启 Allow access through browser-based RDP, SSH, or VNC sessions,然后选择 VNC。
在 Access policies 下,添加现有策略或创建新策略,以控制哪些用户可以连接到您的应用程序。所有 Access 应用程序默认均为拒绝状态——用户必须匹配 Allow 策略才能被授予访问权限。
-
选择 Create(创建)。
用户现在可以直接在 Web 浏览器中访问远程桌面环境,而无需安装任何 VNC 客户端软件。
要连接到 VNC 服务器:
- 打开浏览器并转到公共主机名 URL(例如,
https://vnc.example.com)。 - 使用您配置的身份提供商登录 Cloudflare Access。
- 输入 VNC 服务器密码。
您应该会在浏览器中看到渲染的远程 VNC 服务器桌面。所有连接都通过 Cloudflare 网络进行保护,访问权限由您的 Access 策略控制。