当前位置: 首页 > news >正文

【Rust Desk】从零搭建私有远程桌面服务,告别第三方依赖!

1. 为什么你需要一个自己的远程桌面服务?

不知道你有没有遇到过这样的场景:周末在家,突然想起来公司电脑上有个文件没处理,或者家里的NAS需要重启一下。这时候你第一反应可能就是打开某个远程控制软件,比如向日葵或者ToDesk。刚开始用的时候感觉还行,但用久了,各种小问题就冒出来了:免费版限速卡成PPT,高峰期排队等连接,偶尔还会弹出广告。更让人心里没底的是,你的每一次操作、传输的每一份文件,都要经过别人的服务器,数据安全全凭对方“自觉”。

我自己的经历更直接。有一次急着给客户演示,远程连回公司电脑,结果就因为免费线路拥堵,画面一卡就是十几秒,场面一度非常尴尬。从那次以后,我就下定决心,一定要找一个自己能掌控的方案。直到我遇到了Rust Desk

Rust Desk 是一个开源的远程桌面软件,它的核心魅力在于,你可以把它“私有化部署”。简单说,就是你自己准备一台服务器(可以是云服务器,也可以是家里的一台旧电脑),把 Rust Desk 的服务端程序装上去。从此,你的所有远程连接数据,都只在你自己的这台服务器上中转,跟任何第三方公司彻底说再见。速度快慢由你的服务器带宽决定,安不安全由你自己把控,再也不用担心服务商突然收费或者限制功能。

听起来是不是有点技术门槛?别担心,我刚开始也这么觉得。但实际折腾下来,发现整个过程比想象中简单太多,基本上就是“下载、安装、配置”三步走。这篇文章,我就把我从零开始搭建 Rust Desk 私有服务的完整过程,包括踩过的坑和总结的技巧,毫无保留地分享给你。无论你是想管理自己的多台设备,还是为小团队搭建一个内部远程支持工具,这套方案都足够稳定和高效。

2. 动手之前:理清核心概念与准备工作

在开始敲命令之前,我们花几分钟把 Rust Desk 的工作原理搞清楚,这样后面配置起来心里才有谱。Rust Desk 的架构其实很清晰,主要包含两个核心服务端组件和一个客户端。

hbbs (RustDesk ID Server): 你可以把它理解为一个“电话簿”或“注册中心”。每台安装了 Rust Desk 客户端的设备(比如你的电脑、手机)启动时,都会向这个 hbbs 服务注册,告诉它“我在这里,我的唯一ID是XXX”。当你想连接另一台设备时,客户端会先去问 hbbs:“ID为XXX的设备在哪?” hbbs 就会告诉你对方的网络地址。它默认使用21115(tcp), 21116(tcp/udp), 21118(tcp)这几个端口。

hbbr (RustDesk Relay Server): 这个就是真正干重活的“中继服务器”。在理想情况下,如果两台设备能直接点对点(P2P)连接,数据就不经过 hbbr,速度最快。但现实很骨感,很多设备都在路由器后面(有NAT),或者有防火墙阻隔,无法直接连通。这时候,hbbr 就出场了——它充当一个中间人,接收来自一方的数据,然后再转发给另一方。所有走中继的流量都会经过它,所以它的带宽和稳定性直接决定了你的使用体验。它默认使用21117(tcp), 21119(tcp)端口。

客户端: 就是我们在电脑、手机上安装的用来被控或控制的软件,界面和向日葵那些很像,但需要配置我们自己的服务器地址。

那么,你需要准备什么?

  1. 一台服务器:这是整个系统的核心。推荐使用云服务器(比如腾讯云、阿里云的轻量应用服务器),因为它有公网IP,带宽稳定。配置不用太高,1核2G就足够支持几个并发连接了,重点在于带宽!如果你主要传输文件或需要流畅的桌面体验,建议带宽至少3Mbps以上,5Mbps或更高体验会更佳。系统选择Ubuntu 20.04/22.04Debian,对新手最友好。
  2. 一个域名(可选但强烈推荐):你可以直接用服务器的公网IP地址来配置,但IP地址可能变动,也不够美观。申请一个便宜的域名(一年就几十块钱),然后做一条A记录解析到你的服务器IP,后面配置起来会方便很多,也便于记忆。
  3. 动手的勇气:接下来的操作都是在Linux命令行下完成的。别怕,我会把每条命令是干什么的、可能会遇到什么报错都解释清楚。你只需要跟着一步步来,就像搭积木一样。

3. 实战:在服务器上部署 Rust Desk 服务端

好了,假设你已经拥有一台全新的 Ubuntu 22.04 服务器,并通过SSH连上了它。我们开始真正的部署之旅。

3.1 第一步:下载服务端软件包

首先,我们需要到 Rust Desk 的官方 GitHub 仓库下载最新的服务端程序。这里有个小技巧,不建议直接用wget下载网页上看到的链接,因为版本号会变。我们应该先查看最新的 Release 版本。

打开你的服务器终端,依次执行以下命令:

# 更新系统软件包列表,确保我们安装的是最新依赖 sudo apt update # 安装一些可能需要的工具,比如 wget 用于下载 sudo apt install wget -y # 进入一个临时目录,比如 /tmp cd /tmp # 从 GitHub 下载最新版本的 hbbs (ID服务器) # 注意:下面的链接版本号 '1.2.3' 需要替换成你当时看到的最新版 # 你可以先去 https://github.com/rustdesk/rustdesk-server/releases 看一眼最新版本号 wget https://github.com/rustdesk/rustdesk-server/releases/download/1.2.3/rustdesk-server-hbbs_1.2.3_amd64.deb # 下载同版本的 hbbr (中继服务器) wget https://github.com/rustdesk/rustdesk-server/releases/download/1.2.3/rustdesk-server-hbbr_1.2.3_amd64.deb

下载完成后,你应该能在/tmp目录下看到两个.deb文件。这就是我们接下来要安装的包。

3.2 第二步:安装并启动服务

.deb是 Debian/Ubuntu 系统的软件包格式,安装非常简单。一条命令就能搞定一个服务。

# 安装 hbbs (ID服务器) sudo dpkg -i rustdesk-server-hbbs_1.2.3_amd64.deb # 安装 hbbr (中继服务器) sudo dpkg -i rustdesk-server-hbbr_1.2.3_amd64.deb

安装过程通常很快。安装完成后,系统会自动创建两个服务:rustdesk-hbbs.servicerustdesk-hbbr.service。并且,默认情况下它们已经启动并设置为开机自启了。

怎么确认服务真的跑起来了呢?我们用systemctl命令来检查:

# 查看 hbbs 服务的状态 sudo systemctl status rustdesk-hbbs.service # 查看 hbbr 服务的状态 sudo systemctl status rustdesk-hbbr.service

当你执行这两条命令后,如果看到绿色的active (running)字样,并且下面没有红色的错误日志,那就恭喜你,服务端核心程序已经成功运行了!

3.3 第三步:配置防火墙,打开必要的端口

这是新手最容易“栽跟头”的一步。服务器上的防火墙(如果开启的话)会阻止外部访问我们的端口。我们必须手动放行 Rust Desk 需要的几个端口。

如果你用的是云服务器,通常还需要在云服务商的控制台(安全组/防火墙规则)里也放行这些端口。两边都要配置!

假设你服务器上使用的是ufw防火墙(Ubuntu 常用),配置命令如下:

# 允许 21115-21119 端口的 TCP 协议 sudo ufw allow 21115:21119/tcp # 允许 21116 端口的 UDP 协议(用于点对点连接发现) sudo ufw allow 21116/udp # 启用UFW防火墙(如果之前没启用的话) sudo ufw enable # 查看规则是否生效 sudo ufw status verbose

如果你用的是iptables或者其他防火墙,或者云平台的安全组,请根据相应的方法放行上述端口范围。端口没开通,客户端是绝对连不上来的,切记。

4. 获取关键信息并配置客户端

服务端跑起来了,端口也开了,现在我们需要从服务器上拿到两个最关键的信息,用来配置客户端。

4.1 获取服务器的公网标识(ID)和密钥

Rust Desk 为了保证连接安全,使用了密钥对。我们需要找到公钥(Public Key),并把它填到客户端里。

  1. 获取服务器ID/地址:这就是你服务器的公网IP地址,或者你之前解析的域名。在客户端里就填这个。你可以用curl ifconfig.me命令快速查看服务器的公网IP。

  2. 获取密钥:密钥文件在安装过程中自动生成。执行以下命令查看:

# 查看 hbbs 的公钥 sudo cat /var/lib/rustdesk-server/id_ed25519.pub

执行后,你会看到一串以ssh-ed25519开头的长字符串,这就是你的公钥。把它完整地复制下来,待会儿要用。

注意:这个密钥非常重要,相当于你私有服务的“密码”。不要泄露给他人。如果泄露了,可以删除/var/lib/rustdesk-server/目录下的id_ed25519id_ed25519.pub文件,然后重启hbbs服务,它会自动生成一对新的。

4.2 配置 Windows/macOS/Linux 客户端

现在轮到配置我们日常使用的电脑了。

  1. 下载客户端:去 Rust Desk 客户端的 GitHub 发布页,下载对应你操作系统的安装包。比如 Windows 就下.exe.msi, macOS 下.dmg
  2. 安装并运行:像安装普通软件一样安装它。
  3. 关键设置:打开 Rust Desk 客户端,在界面里找到“设置”->“网络”或类似的标签页。你会看到“ID服务器”和“密钥”的输入框。
    • ID服务器:填写你的服务器公网IP或域名,例如123.123.123.123rustdesk.yourdomain.com注意:不需要加端口号,除非你改了默认端口。
    • 密钥:将刚才从服务器上复制的那一串公钥,粘贴到“密钥”框里。
  4. 保存并重启:保存设置,然后完全退出 Rust Desk 客户端再重新打开。这时,客户端右下角的状态应该会显示你自定义的服务器地址,而不是官方的rustdesk.com

4.3 配置安卓/iOS 移动客户端

手机端的配置逻辑完全一样。

  1. 在应用商店搜索 “Rust Desk” 安装。
  2. 打开App,点击左上角的菜单,进入“设置”
  3. 找到“网络设置”“高级设置”
  4. 同样地,在 “ID服务器” 填入你的服务器地址,在 “密钥” 填入公钥字符串。
  5. 保存设置,返回主界面。你的手机设备现在也注册到你自己的服务器上了。

5. 进阶配置与优化技巧

基础搭建完成,已经可以愉快地使用了。但如果你想让它更安全、更好用,下面这些进阶操作值得一试。

5.1 使用域名与配置HTTPS(提升安全与稳定性)

一直用IP地址不太方便,也不安全(流量明文传输)。我们可以为服务端配置域名和SSL证书,启用加密连接。

  1. 域名解析:将你的域名(比如rustdesk.yourdomain.com)解析到服务器IP。
  2. 安装Nginx:Nginx 是一个强大的Web服务器,我们将用它做反向代理和SSL终结。
    sudo apt install nginx -y
  3. 申请SSL证书:最方便免费的是 Let‘s Encrypt 证书,使用certbot工具可以自动获取和续期。
    sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d rustdesk.yourdomain.com
    按照提示操作,证书会自动配置好。
  4. 配置Nginx反向代理:编辑 Nginx 的站点配置文件,将特定端口的流量代理到 Rust Desk 服务。
    sudo nano /etc/nginx/sites-available/rustdesk
    写入如下配置(关键部分):
    server { listen 443 ssl http2; server_name rustdesk.yourdomain.com; ssl_certificate /etc/letsencrypt/live/rustdesk.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/rustdesk.yourdomain.com/privkey.pem; # 代理 hbbs 的 21115 端口(Web API) location / { proxy_pass http://127.0.0.1:21115; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 注意:hbbr的中继流量(21117)通常不通过HTTP代理,这里主要是为了加密API和Web客户端连接。 }
    保存并启用配置,重启Nginx。
  5. 修改客户端配置:此后,在客户端的“ID服务器”一栏,就可以填写https://rustdesk.yourdomain.com了。这样,注册和发现过程的通信都是加密的。

5.2 修改默认端口与增强安全

如果你担心默认端口被扫描,可以修改 hbbs 和 hbbr 的监听端口。这需要修改服务配置文件。

# 编辑 hbbs 服务配置文件 sudo nano /etc/systemd/system/rustdesk-hbbs.service

ExecStart那一行,你会在命令最后看到类似-r 0.0.0.0:21117的参数。-r指定中继端口,前面的0.0.0.0:21115等是监听地址和端口。你可以修改这些端口号,比如改成-p 31215 -r 0.0.0.0:31217

重要:修改端口后,必须同步做三件事:

  1. 在防火墙/安全组中放行新修改的端口
  2. 重启服务:sudo systemctl daemon-reload && sudo systemctl restart rustdesk-hbbs rustdesk-hbbr
  3. 在客户端配置的ID服务器地址中,需要加上新端口,格式如:yourdomain.com:31215

5.3 监控与维护

服务跑起来后,我们也要学会看看它的“健康状况”。

  • 查看实时日志
    # 查看 hbbs 的最新日志 sudo journalctl -u rustdesk-hbbs.service -f # 查看 hbbr 的最新日志 sudo journalctl -u rustdesk-hbbr.service -f
    当有设备连接或出现问题时,日志里会有详细记录,是排查故障的第一手资料。
  • 检查服务状态:定期用sudo systemctl status rustdesk-hbbs看看服务是否在运行。
  • 更新版本:关注 GitHub 发布页。更新时,只需下载新版本的.deb包,重复安装步骤,然后重启服务即可。配置和密钥通常会保留。

6. 常见问题与故障排查指南

搭建过程很少一帆风顺,这里我总结几个我踩过的坑和解决办法。

问题一:客户端显示“就绪”,但输入对方ID后无法连接,一直转圈或报错。

  • 排查思路
    1. 检查服务器状态:首先在服务器上运行sudo systemctl status rustdesk-hbbs rustdesk-hbbr,确认两个服务都是active (running)
    2. 检查端口连通性:这是最常见的原因。在你自己的电脑上(不是服务器),打开命令行,用telnetnc命令测试端口是否通。例如:telnet 你的服务器IP 21115。如果连不上,说明端口没开放。请双重检查:① 服务器本机防火墙(ufw/iptables);② 云服务商的安全组规则。必须两者都放行
    3. 检查密钥:确认客户端填写的密钥和服务器上id_ed25519.pub的内容完全一致,一个字符都不能错,前后不能有空格或换行。
    4. 检查ID服务器地址:确认客户端填写的地址正确。如果用了域名,试试直接换成IP地址,排除DNS解析问题。

问题二:连接成功,但画面非常卡顿,操作延迟高。

  • 排查思路
    1. 确认连接模式:在 Rust Desk 客户端连接后的顶部状态栏,会显示“直接”或“中继”。如果是“中继”,那么卡顿的瓶颈很可能在你的服务器带宽上。中继流量会消耗服务器带宽,如果服务器只有1Mbps带宽,那体验肯定好不了。考虑升级服务器带宽,或者优化网络环境尝试让客户端走“直接”(P2P)连接。
    2. P2P打洞失败:如果始终是“中继”,说明两台设备无法直接建立P2P连接。这受双方网络环境(是否对称型NAT、防火墙规则)影响。可以尝试在路由器上为被控设备设置UPnP端口转发(转发UDP 21116端口),有助于提高P2P成功率。
    3. 调整客户端画面设置:在被控端客户端的“设置”->“画面”中,可以尝试降低色彩深度(如改为“高彩”)或编码器(尝试切换H264/AV1),牺牲一些画质换取流畅度。

问题三:手机客户端无法控制电脑,或者电脑无法控制手机。

  • 排查思路
    1. 权限问题:在电脑被控端,确保 Rust Desk 有相应的辅助功能或屏幕录制权限(macOS 和 Windows 11/10 都需要在系统设置中手动开启)。
    2. 移动端后台限制:安卓手机需要将 Rust Desk App 加入“后台运行白名单”或“电池优化忽略列表”,防止系统休眠后服务被杀死。iOS 端也需要保持App在后台运行。
    3. 版本兼容性:尽量保证服务端、控制端、被控端的客户端版本都比较新,且不要差距太大。

自己搭建服务,最大的成就感就来自于对每一个环节的掌控。从最初的磕磕绊绊,到后来能快速为朋友部署一套,这个过程让我对网络、安全和系统服务的理解加深了不少。Rust Desk 这个项目确实做到了开源软件的初心:把自由和控制权还给用户。如果你也受够了各种限制和不确定性,不妨花上一个下午,按照这个指南动手试试。当你第一次通过自己搭建的服务流畅地远程控制另一台电脑时,那种感觉,真的很棒。

http://www.jsqmd.com/news/477794/

相关文章:

  • AI聊天系统的智能会话归档:高效管理与检索的技术实践
  • PyCharm社区版 vs 专业版:零基础选择指南与中文设置教程
  • 如何高效获取抖音无水印内容:DouYinBot的全方位应用指南
  • 老王-99%的人都活得太拧巴了
  • 实战指南:基于Ansible的Linux等保三级自动化加固方案(CentOS/Kylin)
  • 太原理工大学 - 软件工程导论:从真题解析到核心知识点精讲
  • R 4.5模型部署提速300%:从本地训练到云API仅需7步(含完整shiny/plumber/RServe对比矩阵)
  • ComfyUI动漫超分实战:用4x-AnimeSharp让你的二次元图片清晰度翻倍
  • 老王-成功男人真正需要什么样的伴侣
  • 深度学习服务器选型与配置:为卡证检测矫正模型提供算力
  • web课题作业
  • RISC-V IDE MounRiver Studio实战指南(三):ISP代码烧录与读保护机制详解
  • 老王-穷极一生所求为何
  • 在Arduino上配置esp32开发环境一直失败解决方法
  • 关于18B20的电源常通和间通的问题
  • 追觅全宇宙生态亮相AWE,为什么说追觅颠覆了认知?
  • JumpServer中Ansible Playbook安全风险与防御实践
  • 从“发短信”到“打电话”:IM与RTC的技术路径与应用分野
  • 【OpenCV+MediaPipe实战】手部跟踪模块封装与多场景应用指南
  • Parsec-VDD:软件定义的虚拟显示技术革新
  • Genshin FPS Unlock:突破帧率限制的轻量级解决方案
  • 揭秘ImageNet均值与标准差:为何它们成为图像预处理的黄金标准
  • 操作系统原理:优化Baichuan-M2-32B医疗AI系统资源调度
  • Java基于微信小程序的线上教育商城,附源码+文档说明
  • MSI笔记本Ubuntu系统下高效散热方案实战
  • Linux 服务管理与进程监控实战指南
  • Parsec-VDD虚拟显示驱动:重新定义远程可视化的技术边界
  • STC8051智能电箱控制器硬件设计与多模态通信实现
  • 架构师视角:达梦数据库CLOB字段写入性能深度调优实战
  • UM2 3D打印机DIY进阶:泰坦挤出机参数调校与实战避坑指南