ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

rustDesk自建远程桌面服务器:从部署到维护完全指南

rustDesk自建远程桌面服务器:从部署到维护完全指南 1. 项目拆解为什么大家都在自建rustDesk远程桌面最近后台收到不少朋友在问说公司不让用第三方远程控制软件了要么收费太狠要么担心数据走别人服务器不安全问我自己怎么解决。其实这个问题的答案早就摆在那了就是标题里这个rustDesk。它是一款开源的远程桌面软件核心亮点就是支持完全自建服务器。换句话说你把自己的中继服务器搭起来之后远程连接走的就是你自己的机器数据不过第三方速度你自己说了算设备数也不限。先给还没接触过的朋友说下rustDesk到底是啥。你可以把它理解成一个可以私有化部署的远程控制工具功能和TeamViewer、AnyDesk这类商业软件基本对齐远程桌面、文件传输、远程命令行、剪贴板共享该有的都有。但它最大的区别在于所有协调流量包括信令和中继都可以由你自己架设的服务器来处理客户端只需要填上你服务器的地址和密钥就能组成一个完全私有的远程访问网络。我实际用了大半年最直观的感受就是两件事一是响应速度确实比走官方公共服务器快不少尤其是在跨运营商网络环境下二是不用再担心“免费版被判定为商业用途”这类破事因为整个链路都是自己的。这篇文章我就把自己从零搭建、日常维护、踩坑修复的完整过程写出来给想搞私有远程桌面的朋友做个参考。内容会比较细从服务器选型、组件原理、部署步骤到客户端配置、故障排查都有属于可以直接照着抄作业的那种。需要说明的是下面凡是涉及具体部署操作的部分都是基于官方文档和常见生产实践总结出来的通用做法我自己在Ubuntu和Debian上都验证过你如果用的是其他发行版原理一样命令稍微调整即可。2. 私有远程桌面的整体思路与组件拆解2.1 rustDesk的工作机制两个轻量级服务撑起整套系统在动手部署之前先把rustDesk自建服务器的角色搞清楚。很多人第一次看到官方文档会有点懵因为rustDesk不像某些商业软件那样搞一个“All-in-One”的安装包而是拆成了两个独立组件hbbs和hbbr。hbbs信令服务器ID/密钥分发服务器负责客户端的注册、ID分配、在线状态维护可以理解成“电话交换机”它知道谁在线、怎么找到对方但它不传大量数据。hbbr中继服务器Relay Server负责两块屏幕之间的图像、输入指令、文件等实际数据流的转发相当于“数据管道”。两个组件都是Rust写的运行时占用的资源非常小。我实测在一台1核1G的小内存VPS上两个服务加起来内存占用大概也就20到30MBCPU平时几乎不动。这也是为什么rustDesk私有化部署的门槛特别低——你甚至不需要一台多好的服务器只要能跑Linux、有一个公网IP就行。这两个组件还携带了几个配套文件id_ed25519和id_ed25519.pub是服务器的密钥对用于客户端与服务器之间的身份验证db_v2.sqlite3是注册设备信息数据库。首次启动hbbs会自动生成这些文件你不用手动创建。2.2 通信链路与端口数据到底是怎么从你的电脑跑到另一台电脑的理解了组件分工再来看网络链路就更清楚了。rustDesk客户端启动后第一件事是连接hbbs的信令端口完成身份注册和ID绑定。当你要控制另一台机器时hbbs负责告诉两台机器彼此的地址和密钥协助建立P2P直连通道如果直连失败比如双方都在严格NAT后面流量自动转由hbbr中继转发。这里涉及几个端口部署时必须全部放通端口协议归属组件作用21115TCPhbbsNAT类型探测21116TCP/UDPhbbs信令连接与ID注册21117TCPhbbr中继连接21118TCPhbbs网页客户端信令21119TCPhbbr网页客户端中继其中21116的UDP端口经常被忽略但如果没放通客户端会显示“无法连接服务器”或者ID注册失败。我当初第一次部署就是只放行了TCP结果客户端一直连不上查了半天才发现UDP端口没通。这个细节非常重要后面会再展开。2.3 自建服务器vs官方公共服务器这道选择题的答案其实很明确很多人会问直接用官方公共服务器不也能用吗为什么非要自己折腾我自己体验下来的差别主要有三点第一速度。官方公共中继服务器在全球范围内承担海量用户流量高峰期带宽和延迟都没法保证。自建之后中继服务器就是你自己的一台机器或者公司内网的一台机器数据传输路径完全可控内网场景下几乎是零延迟。第二数据隐私。虽然rustDesk官方服务器也宣称做了加密但毕竟数据要经过第三方节点。“私有远程桌面”的核心价值就在这里——所有流量都走你自己的服务器尤其对于处理图纸、代码、财务文件、内部系统的人来说这个心理安全感和合规价值完全不一样。第三使用限制。公共服务器服务商有自己的用户协议和免费额度策略指不定哪天就收紧政策。自建服务器没有这些问题设备和用户数量你自己定。当然自建服务器也不是没有成本。你需要一台有公网IP的服务器带宽越大越好至少也要有1Mbps以上的上行否则画面会卡。如果你控制的是内网机器也可以把服务器搭在公司内网客户端走内网直连体验会更好。3. 服务器端部署全过程实录3.1 服务器选型与初始化我的实测配置和建议先说我自己的配置我用的是阿里云的一台2核2G的ECS带宽5Mbps系统Ubuntu 22.04 LTS地域选的是离我主要设备最近的华东。这个配置对rustDesk来说属于“超标”了实际上1核1G完全能跑带宽才是真正的瓶颈。关于服务器选型给一个建议顺序优先选离你使用场景最近的节点。比如你人常驻上海控制的主要是上海和江浙沪的机器那就选华东的服务器你的设备分布在天南海北那优先选带宽大的主流云厂商节点不要为了便宜选一些线路不稳定的低价机器。毕竟稳定性和延迟决定远程办公的体验这块钱不值得省。系统建议用Debian 11或Ubuntu 20.0464位系统。老系统上rustDesk新版本的依赖可能会有兼容问题不是不能跑而是没必要给自己找麻烦。服务器初始化我做了三件事更新系统源并安装基础工具apt update apt upgrade -y apt install -y wget curl net-tools ufw放通防火墙端口。如果你用的是云厂商的安全组也要在控制台同步放通这些端口两边缺一不可。ufw allow 21115:21119/tcp ufw allow 21116/udp关闭SELinux如果系统默认开启否则可能导致连接异常。Ubuntu默认没有这个问题CentOS用户需要注意。3.2 两种部署方式编译安装和Docker部署实测都靠谱rustDesk服务端的安装方式有两种主流路线直接下载预编译二进制进行安装或者用Docker容器部署。我两台服务器分别用了这两种方式这里把两种方法都写出来你按自己的情况选。方式一直接安装二进制推荐小白使用这种方式最直观官方已经为Linux提供了打包好的可执行文件。去rustDesk的GitHub Release页面下载rustdesk-server-linux-amd64.zip解压后里面就是hbbs和hbbr两个可执行文件以及一个run.sh启动脚本。# 创建目录并下载 mkdir -p /opt/rustdesk-server cd /opt/rustdesk-server wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.10-1/rustdesk-server-linux-amd64.zip unzip rustdesk-server-linux-amd64.zip # 启动hbbs注意公网IP换成你自己的 ./hbbs -r 你的服务器公网IP:21117 -p 21116 -k _ # 启动hbbr保持后台运行 ./hbbr -p 21117 -k _其中-r参数指定的是中继服务器地址客户端会凭这个地址找到hbbr-k _表示不加密密钥传输首次测试可以用生产环境建议设置一个真实的密钥字符串具体后面讲安全加固时再说。直接这样启动两个进程在前台运行SSH一断就没了。我建议用systemd把两个服务管起来这样开机自启、崩溃自动拉起都有保障。# 创建hbbs的systemd服务 cat /etc/systemd/system/rustdesk-hbbs.service EOF [Unit] DescriptionRustDesk Signal Server (hbbs) Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/hbbs -r 10.0.0.1:21117 -p 21116 -k _ WorkingDirectory/opt/rustdesk-server Restarton-failure RestartSec5 [Install] WantedBymulti-user.target EOF # 创建hbbr的systemd服务 cat /etc/systemd/system/rustdesk-hbbr.service EOF [Unit] DescriptionRustDesk Relay Server (hbbr) Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/hbbr -p 21117 -k _ WorkingDirectory/opt/rustdesk-server Restarton-failure RestartSec5 [Install] WantedBymulti-user.target EOF # 启动并设置开机自启 systemctl daemon-reload systemctl enable --now rustdesk-hbbs rustdesk-hbbr systemctl status rustdesk-hbbs rustdesk-hbbr注意把ExecStart里的10.0.0.1替换成你的服务器实际公网IP。启动成功后/opt/rustdesk-server目录下会自动生成id_ed25519和id_ed25519.pub两个密钥文件后续配置客户端需要用到公钥内容。方式二Docker部署推荐有容器基础的使用rustDesk官方提供了Docker镜像如果你服务器上已经装了Docker和docker-compose用容器部署更干净升级也方便。# 创建目录并进入 mkdir -p /opt/rustdesk-docker cd /opt/rustdesk-docker # 新建docker-compose.yml cat docker-compose.yml EOF services: hbbs: image: rustdesk/rustdesk-server:latest container_name: rustdesk-hbbs command: hbbs -r your-server-ip:21117 volumes: - ./data:/data ports: - 21115:21115 - 21116:21116 - 21116:21116/udp - 21118:21118 restart: unless-stopped hbbr: image: rustdesk/rustdesk-server:latest container_name: rustdesk-hbbr command: hbbr volumes: - ./data:/data ports: - 21117:21117 - 21119:21119 restart: unless-stopped EOF # 启动 docker compose up -d容器部署有个好处密钥文件会持久化在宿主机的./data目录下以后升级镜像不会丢。坏处就是如果你不熟悉Docker遇到网络模式、端口映射的问题时排查起来会有点绕。不过整体来说我还是挺推荐Docker方式的尤其是服务器环境比较复杂、装过很多东西的时候容器隔离能省不少心。3.3 密钥的作用与备份这个文件丢了可就得重新注册了部署完成后/opt/rustdesk-server或Docker的./data目录下会多出几个文件。id_ed25519和id_ed25519.pub就是服务器的身份密钥作用相当于服务器的“身份证”。客户端首次连接服务器时会拿到服务器公钥并保存到本地。之后每次连接双方都校验对方是否持有匹配的密钥。如果你换服务器或者重装系统原先的密钥对丢失那所有老客户端都无法连接新服务器必须重新配置地址和密钥。所以在搭建好服务器之后第一件事就是备份这两个密钥文件。我自己的习惯是放到一个专门的备份目录里和服务器其他配置文件一起定期备份到对象存储。另外部署时如果你自己指定了-k参数那么客户端需要填写的Key就是你自己设置的那个字符串如果填的是_客户端可以不填Key。从安全角度讲生产环境不要用_下文安全加固部分会详细讲。3.4 验证服务器是否正常工作一行命令检查端口连通服务启动后先别急着配客户端先在服务器本地验证一下端口监听状态。netstat -tlnp | grep -E 2111[5-9] ss -ulpn | grep 21116正常输出应该能看到hbbs和hbbr进程分别监听在对应端口上。然后再从你自己的电脑上测试端口连通性。我在Mac上用的nc命令Windows用户可以用Test-NetConnection或者直接Telnetnc -zv 你的服务器IP 21115 nc -zuv 你的服务器IP 21116这里的重点是UDP端口的连通性测试。TCP端口不通通常会直接报错但UDP端口不通时nc有时候显示不出来问题需要结合客户端的实际表现来判断。刚开始接触rustDesk的朋友常在这里卡住TCP全通服务也起来了客户端就是显示连不上最后查出来UDP没放行。4. 客户端配置与多平台实测4.1 各平台客户端安装与自定义服务器配置rustDesk的客户端覆盖非常广Windows、macOS、Linux、Android、iOS都有官方版本。客户端安装完成后默认走的是官方公共服务器你需要改成自己的服务器。以我常用的Windows客户端为例打开客户端主界面点击右侧的“菜单”按钮三条横线图标选择“网络”。在“ID/中继服务器”栏里填入你自己的hbbs服务器地址格式是服务器IP:21116。在“Key”栏填入服务器公钥内容这个Key可以在服务器上查看id_ed25519.pub文件获取。点击“应用”客户端会自动重连。如果看到界面下方的连接状态从“未连接”变成“就绪”说明配置成功。手机端的配置路径类似进入“设置”-“网络”-“ID/中继服务器”填入同样的地址和Key。iOS端在“设置”里找“高级”选项。Android端有些版本在右上角三点菜单里注意找一下。Linux客户端有个小坑如果你是直接从官网下载的AppImage运行方式需要先加执行权限chmod x rustdesk-x.x.x-x86_64.AppImage ./rustdesk-x.x.x-x86_64.AppImage有些Linux发行版还需要安装libxcb、libgtk-3等依赖库如果启动报错根据错误提示补装即可。4.2 地址和密钥填对了但连接状态不正常排查思路在这里客户端配置完成后如果状态一直不是“就绪”按下面顺序排查第一步检查客户端的“ID”是否已经分配成功。rustDesk客户端启动时会自动向服务器注册并分配一个9位数的ID。如果ID一直是空的或者显示0说明客户端根本没和hbbs建立起信令通道问题大概率在21116端口。第二步检查地址端口格式。hbbs地址的写法是IP:21116注意不能只填IP不填端口也不能填成21115。有些版本客户端还支持填域名填域名时也要带端口your-domain.com:21116。第三步确认Key是否完整复制。服务器公钥是一整行字符串复制的时候别漏字符也别复制成私钥的内容。查看公钥cat /opt/rustdesk-server/id_ed25519.pub第四步如果以上都没问题还是连不上重点检查服务器安全组和本机防火墙是否有UDP 21116的放行规则。我遇到过一个诡异的情况安全组规则配了服务器ufw也放行了但客户端就是连不上。最后发现是云厂商安全组的UDP规则被默认放在最后一条前面有一条拒绝所有UDP的规则把流量拦了。这类问题比较隐蔽需要你把安全组规则从头到尾捋一遍。4.3 真机实测从Windows控制Linux和手机体验到底如何配置完成后我实测了几个场景这里也给大家汇报下真实体验。场景一Windows 11控制同一局域网内的Ubuntu工作站。因为两台机器在同一个局域网P2P直连几乎瞬间建立画面延迟感觉不到操作非常跟手和坐在那台机器前面几乎没有区别。场景二Windows 11通过公网控制家里的Windows电脑。我在公司连家里的电脑因为两家都是电信网络且都有IPv4公网IP直连成功延迟大概在20-40ms左右画面流畅度还行但快速拖动窗口时能感觉到轻微残影属于远程桌面的正常表现。场景三手机控制电脑。Android端连Windows手机屏幕小操作精度不如鼠标但做一些轻量操作比如看个文件、回个消息、重启个服务完全够用。触屏模拟鼠标的操作逻辑单击是点按长按是右键用久了也顺手。整体来说只要服务器配置没问题、链路通畅响应速度不会让你失望。如果你实际使用时发现画面延迟特别高大概率不是软件问题而是走了中继——也就是P2P没有建立成功数据绕了一大圈才到对面。这种情况后面专门讲怎么优化。5. 安全加固与长期维护经验5.1 公钥模式的必要性别在网上裸奔默认情况下rustDesk使用的是公钥认证模式服务器生成一对密钥客户端必须持有公钥才能接入。这个设计本身就是安全的。但有人为了测试方便会在启动命令里加-k _表示允许任意密钥或者不校验密钥。如果你的服务器暴露在公网强烈建议不要用-k _。因为任何人都可能扫描到你开放的21115、21116端口如果没有Key校验他们可以直接把自己的客户端指向你的服务器注册一个ID然后用你的中继带宽传数据。你自己用着好好的带宽被别人占走了画面能不卡吗正确做法是设置一个强密钥字符串。举个例子./hbbs -r your-server-ip:21117 -k your-secret-key-here ./hbbr -k your-secret-key-here这样配置后客户端在配置服务器地址时需要额外填写一个Key字符串只有Key和公钥都匹配才能完成连接。双重认证安全性提升一个档次。5.2 防火墙白名单与安全组配置清单远程桌面是一个常驻对外开放的服务暴露面越大被扫描攻击的风险越高。虽然rustDesk本身有密钥保护但从网络层做收敛仍然是必要的。建议在防火墙层面做几个限制只对来源IP段放行21115、21116、21117端口。如果你的使用场景是固定的几个人、几个IP直接在最前面加几条allow from 你的IP规则然后deny所有其他来源。这样即使有人扫描端口连握手都完成不了。hbbs的21116/udp端口不要用ufw allow 21116/udp这种全开放规则能限定来源就尽量限定。当然如果使用场景是移动办公、经常换网络IP白名单会带来额外麻烦那就退而求其次确保强密钥设置到位。5.3 日志查看与日常维护三板斧rustDesk服务端的日志默认输出到控制台journald通过systemd管理时可以用journalctl查看。journalctl -u rustdesk-hbbs -f journalctl -u rustdesk-hbbr -f日常维护我总结为三板斧定期检查进程状态确认两个服务都活着没有意外退出。定期检查磁盘空间hbbs的数据库文件db_v2.sqlite3会随着注册设备增多慢慢变大但正常情况下增长非常缓慢。如果发现异常膨胀多半是日志配置问题清理一下即可。定期更新版本rustDesk服务端的更新不算特别频繁但建议每隔一两个月看一眼GitHub Release有安全修复或性能优化就顺手升级。升级二进制方式很简单停服务、替换文件、重启服务注意保留原来的密钥文件和数据库文件不要删。5.4 日志文件与数据库的备份策略前面说过密钥文件要备份这里再补充一下数据库文件。db_v2.sqlite3记录了所有注册设备的ID和最后连接时间。如果这台服务器用了很久、设备很多丢了之后所有客户端都需要重新注册。备份策略很简单每周一次把id_ed25519、id_ed25519.pub和db_v2.sqlite3打包拷贝走就行。tar czf rustdesk-backup-$(date %Y%m%d).tar.gz -C /opt/rustdesk-server id_ed25519 id_ed25519.pub db_v2.sqlite3我用crontab每周日凌晨执行一次然后上传到自己的对象存储。这个习惯救过我一次有一次手滑把服务器重置了靠备份半小时就恢复了整个rustDesk服务。6. 常见问题与解决速查表6.1 客户端一直显示“无法连接服务器”这是最常见的问题没有之一。排查顺序是服务器上确认hbbs和hbbr进程活着ps -ef | grep hbbs服务器本机测试端口监听netstat -tlnp | grep 21116外部机器测试TCP端口telnet 你的IP 21116外部机器测试UDP端口这个没有直接telnet办法可以临时用nc -uz测试但只能判断是否丢包不能完全确认端口状态。最靠谱的办法还是在服务器上用tcpdump抓包看有没有来自你本机的UDP包过来tcpdump -i eth0 udp port 21116如果抓包能看到请求包进来但客户端还是连不上考虑防火墙拦截或者安全组规则问题。如果连请求包都看不到那就是UDP被中间网络丢掉了。6.2 能建立连接但画面卡顿严重引起画面卡顿最常见的原因是走中继而非P2P直连。你可以查看客户端连接信息在主界面选中对方设备连接后看屏幕右上角的连接状态标签如果有显示“Relay”或者“中继”就说明数据流经过hbbr服务器而不是直连。造成这种情况的原因通常是双方NAT类型不匹配或者有一方的UDP端口被防火墙限制。解决思路检查双方网络的UDP策略尽量让双方处于宽松的NAT模式下。如果有一方有公网IP尝试用“选项”里的“直接IP连接”功能。对于公司网络下的机器可以联系网管放行UDP端口或者配置端口映射。中继本身不是不能用但带宽会被服务器上行带宽限制。比如我的服务器带宽是5Mbps中继模式下最大传输就是5Mbps跑1080P画面会明显吃力。解决办法就是换更高的带宽或者尽量优化网络让P2P成功。6.3 连接后黑屏或画面不刷新这个我遇到过两次一次是Windows的锁屏界面一次是Linux的桌面环境问题。Windows场景被控电脑锁屏状态下连接客户端会显示锁屏界面。可以直接用鼠标点击输入密码解锁但有时候会卡在黑屏上几秒钟。解决方法是先断开重新连一次或者在连接选项中勾选“解锁登录界面后自动连接”之类的设置。Linux场景有些桌面环境比如GNOME Wayland默认不允许远程控制软件捕获屏幕导致连接后黑屏。最简单的解决办法是改用Xorg会话登录或者给被控端安装x11vnc作为辅助。6.4 文件传输速度慢文件传输走的是和中继相同的数据通道。如果你P2P直连成功传输速度取决于两个设备的网络如果走了中继速度取决于服务器带宽。想提升速度优先去解决直连问题而不是升级服务器带宽。我有一次传一个2GB的安装包中继模式跑了将近20分钟后来发现是UDP端口被封导致P2P失败修好之后3分钟就传完了差距很大。6.5 常见问题速查表问题现象可能原因排查与解决无法连接服务器防火墙UDP 21116未放行检查安全组和ufw规则抓包确认UDP包到达服务器显示“就绪”但仍连不上Key配置错误重新复制id_ed25519.pub内容注意不要复制私钥能连但画面卡走了中继非直连查看连接标签检查NAT类型和UDP策略黑屏锁屏界面或Wayland兼容问题更换桌面协议或解锁后重连苹果设备无法连接iOS客户端权限不足检查网络本地权限设置文件传输慢中继带宽瓶颈修复P2P直连或升级服务器带宽ID重复或被盗用服务器数据库被篡改或有异常设备注册检查日志重置密钥并重新配置所有客户端7. 进阶玩法把私有远程桌面纳入你的日常工具箱rustDesk自建服务器的价值不止于远程控制电脑。当你把它纳入日常工具箱会发现一些很有意思的用法。比如我给自己家里那台跑服务的旧电脑装了rustDesk在任何地方都能随时连上去看服务状态、改配置。以前这种情况我都是SSH进去操作但SSH只能看命令行看不了图形界面。有些软件配置工具是图形化的用rustDesk就方便多了。再比如团队协作场景。我们公司给几台电脑装了rustDesk统一指向公司内网的一台服务器。同事之间互相帮忙调试时直接输ID就能连完全不用考虑外网穿透也不用装一堆第三方工具。比付费的TeamViewer省了不止一点。还有一个细节rustDesk的命令行版rustdesk命令也可以用来做无人值守。给客户端设置一个固定的密码这样开机的电脑可以直接被远程连接不需要有人先在电脑上确认。设置方式是在客户端设置里找到“安全”选项设置一个强密码并开启“允许远程控制本设备”。如果你有更进阶的需求还可以试试把rustDesk服务端跑在软路由或者NAS上。我用一台旧笔记本刷了Ubuntu专门跑hbbs和hbbr局域网内所有设备都用它做远程桌面跳板相当于一个私有化的远程控制中心。这个思路对工作室、小团队特别实用成本几乎为零但体验比商业软件免费版好太多了。还有一个值得说的点是带外管理场景。如果你有一台放在机房、没有显示器的服务器给它装上rustDesk设置好固定密码之后遇到宕机或者IPMI控制台看不到画面的情况可以用另一台有显示器的电脑通过rustDesk连进去看。这套方案在某些场景下比KVM切换器还好用毕竟KVM切换器还要布线rustDesk只要网络通就行。在实际使用过程中我最后悔的事情是没有早点把密钥备份起来。一开始搭建纯属玩票后来设备多了、依赖强了才发现当初应该第一时间做好备份。所以如果你现在正准备搭建或者已经搭好但没备份过看完这篇文章第一件事就是去把密钥文件和数据库文件打包存好。最后再分享一个小技巧rustDesk客户端的“复制ID”功能在配合同事协作时特别好用。双方都用自建服务器只要把ID发过去对方输入ID后点连接再输入你设置的临时密码就能直接控制你的屏幕。不用加好友、不用邮箱验证效率比很多商业软件高得多。这套私有化方案不管你是个人用户、自由职业者还是小团队运维都值得花一个小时搭建起来。
返回列表