看到“62.3k Star”和“远程桌面”这两个词搁在一起,老玩家应该都能笑出来:说的就是RustDesk。这个开源项目这几年在GitHub上几乎成了远程桌面自托管代名词,六万多个Star不是凭空涨出来的,而是被商业远程软件一轮接一轮涨价、被各种授权和设备数限制、也被“我桌面上的东西到底经过谁家服务器”这种疑虑一点点推上去的。用一句话概括它的价值:RustDesk开源、免费、跨平台,既可以用官方公共服务器开箱即用,也可以把ID注册和中继服务放到自己的服务器上,让远程访问的数据完整跑在自己可控的链路里。适合谁?远程办公的人、给家里亲戚当“电脑救火员”的你、自托管上瘾的折腾党、以及不想给十几台设备反复续授权的小团队IT。
下面我把“3分钟自建远程桌面”这条路完整走一遍,包括服务端部署、客户端填写、高频踩坑,每一步都会解释为什么这么做,而不是只丢给你一串命令。
1. 项目速览:62.3k Star背后到底解决了什么问题
1.1 远程桌面工具的三大痛点
在工作里远程桌面几乎躲不开。你可能是要给客户演示,要连回办公室电脑拿文件,或者一边在咖啡厅改代码一边编译服务器上的项目。传统商业远程工具给我的体感是三个字:用不起、限得死、不放心。
先说费用。个人版经常会弹出“商用检测”,要么收费要么限时。企业版就更不用说了,一台设备一个授权,团队一扩张,账单比宽带费还显眼。再说限制,免费版有限速、限时长、限设备数、限会话数,体验被切得很碎。最让人不踏实的其实是隐私:连接过程中屏幕内容、剪贴板、文件都要经过第三方中转服务器,虽然多数工具宣传加密,但“中转服务器是谁的、记录留存多久、能不能免于审查”这些问题,普通用户根本无从验证。
这三个痛点叠加在一块,正好是RustDesk这类开源项目的切入点。它把“远程桌面”这件事拆成了可以去中心化的协议:工具本身开源,服务端可以自己部署,通信本身加密,你能看到的逻辑都写得明明白白。
1.2 RustDesk的核心优势在哪
首先是跨平台。Windows、macOS、Linux、Android、iOS都有官方客户端,UI风格统一,没搞“桌面端免费、移动端收费”那套。其次是免费开源,个人用、公司用,只要遵守开源协议,都没有授权费用,也不需要“许可证”。再然后是部署方式灵活:嫌麻烦就用官方公共服务器,想要隐私就跑自建服务端。
自建这个点是最抓人的。你自己控制ID注册服务器和中继服务器之后,远程流量走的是你自己的机器,第三方拿不到你两端的通信入口信息,就算看到也只是一堆加密数据。用生活里的话说:商业工具是钥匙存在物业那儿,物业说我没偷看过,你只能选择信它;自建是把钥匙放回自己口袋,楼道监控也是自己的,你不需要“赌”。
1.3 Star数背后是社区口碑的积累
62.3k这个数字并不代表活跃用户总量,但代表认可度。GitHub上的Star背后是愿意点一下的开发者、尝试过的用户、围观了很久的技术爱好者。一个远程桌面项目能到这个量级,说明它真的解决了一大批人的问题,也说明它的开源许可以及代码质量经得起社区审视。我自己的观感是,RustDesk的迭代节奏也很勤,基本每个月都有新版本,诸如Wayland支持、移动端改进、性能问题都在持续推进。项目Star多不等于没坑,但至少说明踩坑的经验能找到一大片,遇到问题不被搁浅。
2. 动手之前,先把服务端原理吃透
2.1 一次远程连接是怎么找到对方的
远程桌面的核心难点不是“连接后怎么传画面”,而是“在不知道对方局域网IP的情况下,怎么找到对方”。两台设备通常都在各自的局域网里,没有公网IPv4,直接互通是不可能的,所以需要一个公网上的服务做“介绍人”。
RustDesk的思路是两层:ID注册服务器(hbbs)负责记录每台设备的ID,并且在双方发起连接时做信令交换;中继服务器(hbbr)负责在NAT穿透实在打不通时,把屏幕和操作数据转发过去。ID就像门牌号,hbbs像总机前台告诉你“对方现在在哪个地址”,hbbr像快递中转站,直连不通就帮你转递包裹。
2.2 hbbs和hbbr分别管什么
这俩名字刚接触会有点懵,其实职责非常清楚。hbbs是ID注册与信令服务器,负责设备注册、心跳、NAT类型探测等;hbbr是中继服务器,专跑数据转发。部署时一般跑在一台机器上,端口各管各的。
| 组件 | 默认端口 | 主要职责 |
|---|---|---|
| hbbs | TCP 21115 | NAT类型测试与信令 |
| hbbs | TCP/UDP 21116 | ID注册、心跳、UDP打洞 |
| hbbr | TCP 21117 | 中继数据转发 |
| hbbs | TCP 21114 | API/Web控制台(新版本可选) |
实际使用中,最容易漏掉的是UDP 21116。很多教程只开了TCP端口,结果ID能注册,连接时却卡在“连接中”,因为UDP打洞包到不了服务器。后面排查章节我会专门强调。
2.3 为什么自建服务器更让人安心
这里要说得严谨一点:即使使用官方公共服务器,RustDesk的通信本身也是端到端加密的,消息和屏幕数据理论上是加密的。但“加密”和“隐私”不是一回事。使用官方服务器时,你的设备ID、连接时间、双方IP信息这些元数据会存在别人那儿;遇到官方服务器繁忙、被限流量或临时不可用,你什么都干不了。自建之后,这些元数据都在你掌控里,可用性也取决于你的机器而不是别人的运维排期。
我常给朋友打的比方是:加密相当于信封封口,元数据相当于信封上的收发件地址。信封口是封了,但地址都写在明面上。自建服务器,等于收件地址也换成了你自家的邮箱。
3. 实操:3分钟从零到能连
3.1 准备工作:一台有公网IP的Linux服务器
自建需要一台有公网IP的机器。不需要很高配置,RustDesk服务端非常轻量,1核1G的云主机完全够跑,甚至比很多网站服务器都省。我建议新装一个干净的Ubuntu 22.04 LTS或Debian 12,然后把系统更新做掉。不需要域名,纯IP也能用,当然有域名后面挂证书会方便一点,但初期不必须。
如果你手里没有云服务器但又特别想自建,还有个方向:家里路由器如果有公网IPv4,配合DDNS也可以把服务暴露出去。但运营商的公网IPv4现在越来越难拿到,这部分先不展开,没有公网环境就老老实实先用官方服务器体验。
3.2 Docker部署:两条命令跑通服务端
有Docker的话,部署真的就是两条命令。先创建目录存配置,再跑两个容器。
mkdir -p rustdesk-data && cd rustdesk-data docker run --name hbbs \ -p 21114:21114 -p 21115:21115 -p 21116:21116 \ -p 21116:21116/udp -p 21117:21117 \ -v ./data:/root -d --restart unless-stopped \ rustdesk/rustdesk-server:latest \ hbbs -r 你的服务器公网IP:21117 docker run --name hbbr \ -p 21117:21117 \ -v ./data:/root -d --restart unless-stopped \ rustdesk/rustdesk-server:latest \ hbbr第一条命令启动ID注册服务器,第二条启动中继服务器。注意hbbs后面那个-r 你的服务器公网IP:21117一定要填你的真实公网IP,它会在设备注册后把这个中继地址发给客户端。如果填错了,客户端注册成功,但建立连接时会找不到中继。
跑完容器后,到./data目录里找到id_ed25519.pub,用下面命令看内容:
cat ./data/id_ed25519.pub这串内容就是客户端的Key,相当于服务端的握手凭证,后面配置客户端时必填。
3.3 二进制部署与开机自启
不用Docker的环境也完全可以跑二进制。去GitHub Releases页面下载rustdesk-server-linux-amd64.zip(其他CPU架构认准自己的平台包),解压后会得到hbbs和hbbr两个可执行文件:
wget https://github.com/rustdesk/rustdesk-server/releases/latest/download/rustdesk-server-linux-amd64.zip unzip rustdesk-server-linux-amd64.zip cd rustdesk-server-linux-amd64 chmod +x hbbs hbbr ./hbbs -r 你的服务器公网IP:21117 & ./hbbr &这种跑法仅仅是前台/后台进程,重启后会丢,建议用systemd。每个服务写一个service文件,比如/etc/systemd/system/hbbs.service,内容大致如下:
[Unit] Description=RustDesk ID Server After=network.target [Service] ExecStart=/opt/rustdesk-server/hbbs -r 你的服务器公网IP:21117 Restart=always RestartSec=3 [Install] WantedBy=multi-user.targethbbr同理,把ExecStart换成hbbr路径即可。写完systemctl daemon-reload && systemctl enable --now hbbs hbbr。这套流程适合任何没有Docker、不想引入容器依赖的生产环境。
3.4 客户端三处必填项
服务端起来之后,剩下的就是客户端配置。以Windows为例,到GitHub Releases下载Windows版RustDesk安装包,装好后先打开设置里的“网络”页面。你会看到几个字段:ID服务器、中继服务器、API服务器、Key。
按下面填:
- ID服务器:
你的服务器公网IP:21116 - 中继服务器:
你的服务器公网IP:21117 - Key:
id_ed25519.pub里的完整内容
填完点确定或应用,然后最好完整退出客户端再重新打开。为什么不是点完立即生效?因为设备ID注册是启动时做的,不重启客户端它可能还连着官方服务器。重启后,底部ID会保留,但服务器已经切换到你的自建环境。把同一组配置填到另一台设备上,两台设备就会注册到同一个服务器,以后CID直接连接。
Android和iOS端路径类似:设置里找到“网络”或“ID/中继服务器”,填同样的IP和Key。值得注意的是密码设置,如果是要做无人值守,在受控端设置永久密码;临时连接直接用每次生成的临时密码就行。
4. 真正好用的日常姿势
4.1 无人值守与临时密码
自建的服务器就绪以后,最常用的场景是“无人值守”。公司电脑、家里的老台式机、NAS旁边的下载机,装上客户端并设置永久访问密码,你在任何地方打开手机App,输入设备ID和密码就能接进去。这个体验和商业工具没有本质区别,区别只在于背后跑的是你自己的服务器。
临时密码适合帮别人解决问题。给家人远程装驱动、看弹窗、清理垃圾,让他打开RustDesk把ID和临时密码发给你,你连上去,操作完断开。临时密码每分钟都会轮换,用完即失效,安全性比我小时候报QQ号让他发验证码再慢吞吞操作强太多了。
4.2 跨设备与文件传输
很多人不知道RustDesk连接后自带文件传输功能。建立连接后,在工具栏找到文件传输入口,可以按目录浏览对端磁盘并传输文件。Windows、macOS、Linux之间跨平台传文件很顺,不需要再塞一个网盘客户端。剪贴板默认也是共享的,复制文本、复制小文件路径都跟本机操作差不多。如果你要传大文件,建议优先走局域网直连场景,走中继的话会受服务器带宽限制。
音频方面,如果两端都是Windows,控制端默认也能听到被控端的声音,在连接设置里勾选“声音”相关选项即可。默认没开可能让一部分人误以为不支持,其实是没找对开关。
4.3 和RDP、RDPWrap、商业工具怎么选
很多人第一反应是:Windows不是自带远程桌面吗?为什么还要装RustDesk。这里要分情况。Windows自带RDP在局域网内体验很好,但有几个硬伤:一是Windows家庭版没有远程桌面服务端,被控端要Pro及以上;二是公网访问要自己做端口映射、动态域名,暴露3389到公网还会被扫描器盯上;三是RDP授权模型在某些环境会跳“没有远程桌面授权服务器”之类的报错,处理起来很费神。
网上还有RDPWrap这种试图让家庭版强制开启RDP服务端的方案,我的建议是别折腾。RDPWrap要加载未签名驱动、替换系统文件,杀毒软件会报警,微软一个更新可能就让它失效,而且它本质是在跟系统授权机制较劲,不适合正经使用。
| 方案 | 公网访问 | 授权成本 | 设备数量 | 数据路径 | 适用场景 |
|---|---|---|---|---|---|
| RustDesk自建 | 自带中继 | 免费 | 不限 | 自控服务器 | 跨平台、远程办公、家庭维护 |
| Windows RDP | 需自己映射 | 家庭版无服务端 | 视授权 | 直连或自建映射 | 局域网Windows互连 |
| RDPWrap | 需自己映射 | 无,但有风险 | 视部署 | 直连或自建映射 | 不推荐生产环境 |
| 商业远程工具 | 自带服务器 | 订阅/设备数 | 受限 | 官方服务器 | 图省事、团队托管 |
4.4 什么时候不需要自建服务器
如果只是偶尔帮朋友弄一次电脑,一个月用不了一两次,直接用官方公共服务器就行。RustDesk不开付费墙,公共服务器也能用,只是高峰期可能排队或者延迟偏高。自建服务器的核心收益是稳定和隐私,这两点你用不上,那就没必要多养一台服务器。反过来,你如果每天都要连电脑、还涉及办公文件和个人数据,自建一台服务器,成本其实低得可以忽略。
5. 常见问题排查实录
5.1 高频问题速查表
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 客户端提示“无法连接ID服务器” | 服务器的21116端口没通 | 检查云安全组和系统防火墙,TCP/UDP都要放行 |
| ID能注册但一直“连接中” | UDP 21116被禁,或中继21117不通 | 重点检查UDP端口,中继端口确认无遗漏 |
| 连接时提示“Key不匹配” | 客户端填的Key和服务端不一致 | 重新查看id_ed25519.pub并完整复制 |
| 两台设备找不到对方 | 一台连官方服务器,一台连自建服务器 | 确保两端网络配置完全一致 |
| 手机端连不上 | 手机App版本太旧或配置少填 | 升级客户端,重新检查填写的IP和端口 |
| 连接后画面模糊/卡顿 | 中继带宽不足或客户端画质设置低 | 提高码率设置,或改用更直接的网络路径 |
5.2 端口不通的排查顺序
端口问题是自建远程桌面里出现率最高的问题,而且经常不是“一个坑”而是“连环坑”。我的建议是按这个顺序查:先查云服务器安全组,再查系统防火墙,最后查进程监听状态。很多云主机的安全组和系统防火墙是两层独立的东西,安全组放行了但本机ufw没放行,还是会失败;反过来也一样。可以先用ss -lntup | grep 21116看进程有没有在监听,再用外部工具或手机流量访问IP:21116测试连通性。
5.3 Key和配置不同步的两个典型场景
第一个典型场景是服务器数据目录被重新创建过。有些人清理磁盘时把/root或者数据目录删了,hbbs重启会生成新的密钥对,旧客户端就全部失联。处理方式很笨也很有效:把所有客户端Key统一更新成新的,或者恢复旧数据目录备份。第二个典型场景是换服务器IP后,客户端的ID服务器还是旧IP,会直接无法注册。换IP后只需要把客户端网络配置里的IP改掉,再次重启客户端。这里也提醒一句,服务器数据目录务必备份,尤其是id_ed25519私钥文件和db_v2.sqlite3数据库文件,丢了等于所有设备重来一遍。
6. 进阶心得与最后提醒
6.1 安全加固三板斧
第一,访问密码不要用弱密码。这个道理容易懂,但实际不少人图省事设置成“123456”,自建服务器虽然不主动暴露,但设备ID如果被扫到依然有被暴力尝试的风险。第二,可以考虑在客户端设置里限制允许连接的主机列表,或者使用RustDesk提供的访问控制选项,把“不可控制”“仅可查看”等权限按设备区分开。第三,及时升级服务端和客户端。RustDesk更新频率高,很多安全修复和稳定性的改进都靠版本迭代带出来,卡在旧版本等于把已知问题一直背在身上。
端口方面如果公网扫描特别多,我还会建议把默认端口改掉。RustDesk的端口在客户端是一起填的,自定义端口完全可行,只要两端填一致。改端口治标不治本,但对降低无效扫描日志量很有帮助。
6.2 我的实际使用感受
我自己这套RustDesk部署在一台1核1G的云主机上,日常用来连接家里的Windows主机和办公室的Ubuntu工作站。一个月跑下来体感一直在线,局域网内直接走P2P穿透,延迟几乎感觉不到;跨网络走中继时,画面有轻微延迟,但办公操作足够跟手。唯一一次翻车就是开头提到的UDP 21116没放行,查了一整个晚上才发现。
如果让我给一个结论,我不会说“所有远程桌面工具都可以扔了”。商业工具有它省心的地方,RDP也有它局域网场景的优势。但如果你正在被订阅费、设备数限制和隐私疑虑困扰,RustDesk自建这套方案确实值得花一个晚上,不,按上面的流程,三分钟就够你跑通了。后面升级、加固、加域名,都是顺手的事。最后一个小建议:把服务器配置截图存在云笔记里,或者导出为配置文件,下次换手机、换电脑时直接导入,不用再手敲IP和Key。