关键词: Cloudflare Zero Trust, Web VNC, 远程桌面, 无客户端远程, TeamViewer替代方案, 内网穿透, 浏览器渲染, Mac 屏幕共享, Windows VNC, 运维安全
在上一篇教程中,我们成功把 OpenWrt 的 SSH 终端搬进了浏览器,实现了“随时随地敲命令”的梦想。但对于很多运维人员和极客来说,只有命令行是不够的。我们往往需要操作 Windows 服务器的图形界面,或者远程连接家里的 Mac 处理紧急文档,甚至需要帮父母远程调试电脑。
如果你仔细看了Cloudflare Access controls/应用程序,你会发现Cloudflare Access 设置中的 VNC 选项,没错,这正是 Cloudflare 隐藏的另一大杀器——基于浏览器的远程桌面渲染。
今天,我们将深入挖掘这个功能,教你如何不花一分钱,搭建一套比 TeamViewer 更安全、比向日葵更纯净、无需安装任何客户端的远程桌面系统。
一、 痛点分析:传统远程桌面的“至暗时刻”
现有的远程桌面方案,总是让人爱恨交织:
商业软件的“割韭菜” (TeamViewer/AnyDesk)
痛点:动不动就判定你为“商业用途”而断开连接,免费版限速严重,广告弹窗满天飞。
风险:由于是第三方服务器中转,你的屏幕内容理论上经过了别人的服务器,隐私难以绝对保障。
直接暴露端口 (RDP/VNC)
痛点:需要在路由器做端口映射 (3389/5900)。
风险:这是安全界的禁忌!RDP 漏洞层出不穷(如 BlueKeep),VNC 协议本身加密较弱。一旦端口暴露在公网,你的电脑就等于在互联网上“裸奔”,勒索病毒最喜欢这种目标。
VPN 方案
痛点:为了连个桌面,先要拨号 VPN,手机、平板上操作繁琐,且受限于上传带宽。
二、 Cloudflare VNC 方案:降维打击
Cloudflare 的 Web VNC 方案(Browser Rendering)本质上是一种协议转译技术。
1. 技术原理
服务端 (你的电脑):运行标准的 VNC 服务(Mac 自带,Windows 可装 RealVNC/TightVNC)。
传输层 (Tunnel):Cloudflared 抓取本地 TCP 5900 端口的流量,通过 HTTP2/QUIC 隧道加密封装,推送到 Cloudflare 边缘节点。
渲染层 (Access):Cloudflare 的边缘服务器将 VNC 的图像数据实时转译为 HTML5 Canvas 画面,将你的鼠标键盘操作转译为 VNC 指令。
客户端 (浏览器):你只需要一个支持 HTML5 的浏览器(Chrome/Safari/Edge),就能看到并控制远程桌面。
2. 核心优势
Clientless (零客户端):你在网吧、用女朋友的 iPad、甚至用特斯拉的车载浏览器,都能通过一个网址登录你的电脑。
Zero Trust (零信任安全):端口完全隐身。在看到登录画面之前,黑客必须先通过 Cloudflare 的邮箱/SSO 验证。连登录界面都摸不到,何谈破解?
原生流畅:利用 Cloudflare 庞大的 CDN 网络加速,体验往往优于普通的内网穿透工具。
三、 实战教程:搭建 Web VNC 远程桌面
本教程将演示如何通过 vnc.xxx.com 在浏览器中访问内网的一台电脑(以 Mac 或 Windows 为例)。
⚠️ 前置准备:开启本地 VNC 服务
Cloudflare 只负责传输,不负责产生桌面。 你必须先在目标电脑上开启 VNC 服务。
如果你是 macOS 用户 (最简单):
打开 系统设置 -> 通用 -> 共享。
开启 “屏幕共享” (Screen Sharing)。
点击右侧的
i信息按钮,点击 “计算机设置”。关键:勾选 “VNC 显示程序可以使用密码控制屏幕”,并设置一个简单的 VNC 密码(仅用于 VNC 握手,外层有 Cloudflare 保护)。
记住你的 Mac 局域网 IP,例如 192.168.1.100。
如果你是 Windows 用户:
下载并安装 TightVNC Server 或 RealVNC Server (免费版即可)。
安装后设置访问密码。
确保服务已启动,默认端口为 5900。
记住你的 Windows 局域网 IP,例如 192.168.1.101。
第一阶段:配置隧道 (Tunnel) —— 搬运 TCP 流量
我们需要配置隧道,将 VNC 的原始流量搬运到 Cloudflare。
登录 Cloudflare Zero Trust 后台,进入 Networks -> Tunnels。
点击你的隧道(例如
Hrt)-> Configure -> Public Hostname -> Add a public hostname。
关键配置项:
Subdomain (子域):填写新潮的名字,例如
desktop或vnc。Domain (域名):选择
xxx.com。Service (服务):
Type:选择 TCP (注意:这里不要选 SSH,也不一定要选 HTTP,标准的 VNC 走 TCP 协议)。
URL:填写 目标电脑的局域网 IP + 端口。
例如:
192.168.1.100:5900(Mac/Windows 的默认 VNC 端口是 5900)。特别提醒:不要填 localhost,除非 cloudflared 就装在那台电脑上。如果 cloudflared 装在 OpenWrt 路由上,这里必须填电脑的局域网 IP。
点击 Save hostname 保存。
第二阶段:配置应用程序 (Access Application) —— 开启图形渲染
这一步告诉 Cloudflare:“这个域名下的流量是 VNC 视频流,请帮我画在浏览器里。”
进入 Access -> Applications -> Add an application -> Self-hosted。
步骤 2.1:基本信息
Application name:例如
Mac Remote Desktop。Session Duration:建议 1 hour (图形界面流量大,且为了安全,不宜过长)。
Application domain:必须与隧道设置一致。
Subdomain:
vncDomain:
xxx.com
步骤 2.2:安全策略 (Policy)
Policy name:
My Desktop Access。Action:
Allow。Rules:Selector 选 Email,Value 填你的邮箱。
步骤 2.3:浏览器渲染设置 (Browser Rendering) —— 重中之重
点击 Next 进入 Settings 页面。
找到 Browser rendering。
在下拉菜单中,坚定地选择 VNC。
注:截图中的红框正是此处。
点击 Add application 保存。
第三阶段:见证奇迹
打开浏览器(推荐 Chrome 或 Safari),访问
https://vnc.xxx.com。Access 验证:输入邮箱,填写验证码。
VNC 握手:
验证通过后,浏览器会出现一个灰色的连接界面,提示 Connect。
点击连接后,系统会要求你输入 VNC Password。
这里输入你在“前置准备”中设置的 Mac 屏幕共享密码或 Windows VNC 密码。
成功连接:
下一秒,你熟悉的电脑桌面就会完整地呈现在浏览器窗口中!
你可以全屏显示,就像在使用本地电脑一样。
四、 进阶优化与避坑指南
为了让你用得更爽,这里有几个老司机的经验之谈:
1. 解决 Mac 上的“无限套娃”显示
如果你在 Mac 本机上用浏览器访问自己的 VNC 链接,你会看到屏幕在无限通过浏览器镜像自己,产生“镜中镜”效应。
解决:这是正常现象。请在手机、iPad 或另一台电脑上测试。
2. 提升画质与响应速度
VNC 传输的是图像,对带宽有要求。
Cloudflare 的免费版带宽足够传输 1080P 的办公画面,但看视频会卡顿。
如果觉得卡,可以在 Windows 的 VNC Server 设置中降低画质(颜色深度选 16-bit 或 8-bit),能显著提升流畅度。
3. 关于声音传输
特别注意:标准的 VNC 协议不支持传输声音。
你只能看到画面、控制鼠标键盘,但听不到电脑发出的声音。
如果必须要有声音,需要极其复杂的音频转发方案,或者 Cloudflare 未来支持 RDP 渲染(RDP 支持声音,但配置更复杂)。
4. 手机端的操作技巧
在手机浏览器上打开时:
单指滑动:移动鼠标指针。
轻点:鼠标左键点击。
双指点击:鼠标右键点击。
Cloudflare 提供了一个悬浮球,点击可以呼出虚拟键盘,用于输入密码或快捷键 (Ctrl/Alt/Cmd)。
五、 安全总结
通过这套方案,你构建了一个极其坚固的堡垒:
隐身术:通过 Shodan 等扫描工具扫描
xxx.com,黑客只能看到 Cloudflare 的 CDN 节点,根本找不到你家里的真实 IP,更别提扫描 5900 端口了。看门人:Cloudflare Access 就像一个 24 小时在岗的保安。任何人想通过 VNC 看到你的屏幕,必须先交出此路条(邮箱验证码)。
隔离层:Web VNC 相当于在你的内网和互联网之间加了一层“空气墙”。即使浏览器端有恶意脚本,也很难穿透渲染层直接攻击到你的主机系统。
现在,你已经掌握了 SSH 和 VNC 两大运维神技。无论是只有命令行的路由器,还是图形界面的主力机,都已尽在你的掌控之中。
Enjoy your Zero Trust Desktop!
本文首发于 E路领航 (blog.oool.cc),转载请注明出处