⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/rustdesk-self-hosted-remote-desktop/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

先说一件你可能没细想过的事

用远程桌面的人多少都遇到过这种事。免费版用着用着,弹个窗说你疑似商用,接着限速,再接着直接断线。

想老老实实付钱,看一眼价格又下不去手。TeamViewer 的商业授权一年要好几千块,对个人用户来说确实不便宜。

但真正值得琢磨的不是价格,是另一件事。你远程传的每一个画面、每一个文件,都要从人家的服务器上转一道手。服务商说不看,这句话你只能选择相信。

信任在这里是一句承诺,不是一个你能自己核对的现状。

RustDesk 的多端远程画面

它凭什么敢把服务端也开源

RustDesk 是一个开源的远程桌面软件,代码全部公开在 GitHub 上,用的是 AGPL-3.0 许可证,Star 数已经超过 12 万。

仓库首页,右上角的 Star 数就是实时的

这个数字你随时可以去仓库首页复核。

12 万是什么量级。在 GitHub 全站,Star 超过 12.4 万的项目一共只有 88 个,它就在这份名单里。

用法和 TeamViewer 差不多,界面上有自己的 ID 和密码,对方拿着这两样就能连过来。不一样的是,它把服务端也一起开源了,整套服务可以部署在你自己的机器上,连接数据不用再从别人那里过。

软件本体是 Rust 写的,界面用 Flutter。Windows、macOS、Linux、安卓、iOS 都有客户端,还有一个网页版,浏览器打开就能远程。

连接其实有两条路,走哪条决定了快慢

这一点最值得单独说。

你在客户端里点连接之后,会先去找一台叫 hbbs 的服务器报到。它负责让两台设备互相找到,并试着帮你们打洞。

打洞成功,两台机器就点对点直连,画面和文件直接从一端到另一端,不经过任何中间服务器。打洞失败,才会交给另一台叫 hbbr 的服务器中继转发。

所以自建服务器实际换掉的是两样东西。数据不再经过别人。公共服务器中继速度看运气,换成自己的服务器,中继带宽也从别人的公网挪到了你的公网。

连接的两条路径

隐私从一句承诺,变成一台你能自己登录的机器。

连上之后,它和商业软件没差

远程操作本身没什么好说,鼠标键盘、多显示器切换、画质手动调节都有。平台之间也不挑,Windows 控 Mac 可以,Mac 控 Linux 也行。

远程控制一台电脑

远程会话里可以直接传文件,双向的,本地拖过去或者远程拖回来都行。剪贴板也是通的,这边复制一段文字,那边直接粘贴。

文件传输界面

TCP 隧道平时用得不多,真用到的时候很省事。远端电脑的内网里跑着一个网页后台,通过隧道映射到本地,你自己电脑的浏览器直接就能打开,不用改路由器,也不用动那边的网络环境。

TCP 隧道设置

它还支持用电脑远程操作安卓手机。家里老人手机上装软件装不明白,你在这头帮他点两下就完事了。常用设备可以存进地址簿,分组管理,下次连接点一下就进去。

连接管理界面

半小时,把它变成你自己的服务器

客户端从 GitHub Releases 或官网 rustdesk.com 下载。Windows 版不用安装,双击就能跑,临时帮别人远程把绿色版发过去就行。

第一次打开,左边显示的是本机 ID 和一次性密码。要别人连过来,把这两样发给他。你要连别人,就把对方 ID 填进输入框。长期被控的机器可以设固定密码,下次连接就不用人点同意。

服务端也不麻烦,两个程序都用 Docker 跑,同一份镜像,命令不同。先拉镜像,再分别启动。

sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
sudo docker run --name hbbr -v ./data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr

放在一台有公网 IP 的云服务器或家里的 NAS 上就行。端口要放开 21115、21117,还有 21116,注意 21116 的 TCP 和 UDP 都要开,只开一半打洞就废了。--net=host 别省,它让服务看到真实 IP,否则看到的是容器内网地址。

然后在客户端里点 ID 旁边的菜单,进网络设置,把 ID 服务器地址填上。Key 也要填,它是服务端首次运行时生成的公钥,躺在数据目录的 id_ed25519.pub 里。中继服务器可以留空,它会自己推断。

填完点应用,注册成功就能连。官方文档里有现成的配置文件,改两行就能起,熟手半小时以内。

Releases 页面的安装包

自建不等于自动安全

有一点官方自己在文档里写明了。

如果你要用网页客户端,就要额外开放 21118 和 21119 两个端口。这时 hbbs 和 hbbr 会信任 WebSocket 请求里的 X-Real-IP 和 X-Forwarded-For 头来判断真实 IP,而这两个头没经过校验。任何能直连这两个端口的人都能伪造 IP,绕开基于 IP 的限流和封禁,日志里的来源 IP 也会是假的。

官方的建议是,用网页客户端就只通过反向代理暴露这两个端口,让代理去设置真实 IP;不用网页客户端就直接关掉。

什么情况下别折腾

如果你完全不想碰服务器,也不打算学,那就用官方公共服务器。它开箱即用,但速度比较看运气,多数时候不如自己的服务器稳,这一点要有心理预期。

企业如果需要 Web 控制台、权限审计这一类能力,开源版给不了。官方有付费的 Server Pro,起步档 11.88 美元一个月,按年计费,不自动续订。或者去看别的商业方案。

三条路线的分工

判断标准其实只有一条

经常要远程办公的、手里有一堆机器要维护的、家里老人小孩设备老出问题的、小团队觉得商业授权太贵的、对数据比较敏感的,这五类人换过去都会顺手很多。

反过来,如果一份文档你根本不在乎它经过谁的服务器,那没必要折腾。

愿意花半小时折腾一次的人,费一次事,后面就一直省心。不用再担心商用弹窗,数据走自己的服务器,年年续费也省了。

仓库地址是 https://github.com/rustdesk/rustdesk

文章目录
  1. 1. 先说一件你可能没细想过的事
  2. 2. 它凭什么敢把服务端也开源
  3. 3. 连接其实有两条路,走哪条决定了快慢
  4. 4. 连上之后,它和商业软件没差
  5. 5. 半小时,把它变成你自己的服务器
  6. 6. 自建不等于自动安全
  7. 7. 什么情况下别折腾
  8. 8. 判断标准其实只有一条