☰
树莓派搭建RustDesk服务器:自建远程桌面的完整指南
2026/9/29 2:26:16 网站建设 项目流程

以前出差在外,最崩溃的一件事就是想连回家里电脑拿个文件,结果第三方远程软件要么限速、要么限制设备数量,免费版画质糊得像马赛克,还总担心数据经过别人服务器。后来我花了两百块收了一台二手树莓派4B,折腾了一下午把RustDesk服务器部署起来,从此远程桌面这件事彻底自由了——不需要买云服务器,不依赖任何中间商的免费额度,自建一套属于自己的远程桌面服务,内网秒连,外网稳定,关键数据全在自己的设备上流转。

这篇文章就完整记录我用树莓派4B搭建RustDesk服务器的全过程,包括系统准备、服务端部署、外网访问配置、客户端接入和常见问题排查。整套方案我实测下来大概5分钟就能把服务跑起来,加上外网配置和排错,新手一两个小时也能搞定。适合家里有树莓派吃灰、想省云服务器费用、或者对远程连接隐私有要求的折腾党直接照抄。

1. 为什么选RustDesk:自建远程桌面到底图什么

很多朋友看到“远程桌面”第一反应是QQ远程、TeamViewer、向日葵这些现成方案,确实方便,但用久了你会发现制约很多。RustDesk最吸引我的地方在于它是开源软件,服务器端可以完全自己掌控,客户端免费无限制,而且支持Windows、macOS、Linux、iOS、Android全平台。相比商业软件动辄按设备收费、限制会话时长的玩法,自建RustDesk等于把“连接权”握在自己手里。

1.1 市面远程方案的痛点

先聊聊我踩过的坑。TeamViewer免费版限制个人使用,检测到商用场景直接断连,有次我正在改一个紧急文档,屏幕突然弹窗说会话受限,气的我差点把笔记本扔了。AnyDesk免费版人数限制少一点,但画质和延迟在高分屏下表现一般。向日葵对国内网络优化得不错,但免费版同样有带宽和功能限制。至于Windows自带的远程桌面,内网体验很好,但需要公网IP加端口转发,而且只支持Windows到Windows,手机想连还要装第三方RDP客户端。

这些方案最核心的问题在于中转服务器不在自己手里。你并不知道自己的屏幕画面经过了哪些节点,被谁记录了数据,免费套餐还能不能一直用下去。对于偶尔远程处理文件、维护服务器、帮家里人修电脑的场景,我更需要一个“可控、够快、不花钱”的方案,RustDesk自建服务器正好命中这三个点。

1.2 树莓派4B当服务器够用吗

你可能会问,树莓派4B性能那么弱,当远程桌面服务器扛得住吗?这里要澄清一个概念:RustDesk服务器端(hbbs + hbbr)做的事情并不是直接处理视频编码,而是在客户端之间做ID注册、信令协调和流量中继。简单说,它更像是远程连接里的“电话交换机”,真正传输画面的带宽走的是两台设备之间的P2P通道,只有当P2P打洞失败时才通过服务器中转。

所以树莓派4B 4GB版本完全够用。官方推荐的服务器硬件配置并不高,4核ARM Cortex-A72处理器加上千兆网口,能轻松处理几十个活跃连接的信令开销。我实际跑下来,平时两个会话同时在线,CPU占用率基本在10%以下,内存占用也就几百MB,完全不会影响其他服务。再加上树莓派功耗只有5W左右,24小时开着当家庭服务器,一年电费也就一杯奶茶钱。

1.3 整体架构和端口规划

在动手之前,先弄明白RustDesk服务器的整体架构,后面配置才不会懵。RustDesk服务器端由两个程序组成:hbbs(ID/注册服务器)负责管理设备ID、生成连接密钥、协调会话建立;hbbr(中继服务器)负责当两台设备无法直接通信时转发流量。两个程序可以跑在同一台机器上,也就是树莓派上。

整套系统部署后,客户端会先连接hbbs获取设备列表和连接信息,然后尝试P2P直连,失败则走hbbr中继。这意味着树莓派需要对外暴露一组固定端口,我整理了一张端口规划表,照着防火墙和路由器配置就不会漏:

端口协议用途
21115TCPNAT类型测试
21116TCP + UDPhbbs注册与心跳(两个协议都要放行)
21117TCPhbbr中继服务
21118TCPhbbs网页客户端(可选)
21119TCPhbbr网页客户端(可选)

记住核心端口是21116和21117,21115用于网络类型探测,很多外网连接问题其实就是少放了UDP的21116端口导致的,后面排查章节会细说。

2. 树莓派4B系统准备:先把底子打好

树莓派4B要稳定运行RustDesk服务,系统镜像和基础配置非常关键。我建议不要用桌面版系统,服务器的宿主机越干净越好,跑的东西越少越不容易出幺蛾子。我选的是Ubuntu Server 64位系统,树莓派官方推荐的Raspberry Pi OS Lite也完全可以,两者选一个熟悉的就行。

2.1 系统镜像与烧录工具

当前Ubuntu Server已经发布到24.04 LTS版本,新版本对树莓派4B的兼容性很好,内核直接支持硬件加速和千兆网卡。如果你手里的树莓派还是旧系统,建议这次直接重装,别在旧系统上升级大版本,容易遇到各种依赖冲突。Ubuntu Server的树莓派版本可以在Ubuntu官网下载,选择Raspberry Pi的arm64镜像即可。

烧录工具我用的是树莓派官方的Raspberry Pi Imager,全平台都能用。烧录时有几个细节值得注意:第一,存储卡建议选32GB以上的高速卡,至少U3级别,闪迪和三星的卡我都用过,速度和稳定性都过关;第二,Imager烧录完成后可能会提示“分区未被识别”,这是正常现象,直接拔卡插到树莓派上启动就行;第三,烧录前最好在Imager的高级设置里就配置好SSH、WiFi和用户名,这样第一次开机就能直接远程管理,省得接显示器键盘折腾。

2.2 首次启动和SSH配置

树莓派4B插电开机后,如果你没有配置显示器,可以靠SSH远程登录。我习惯的做法是先在Imager的“高级选项”里勾选启用SSH并设置好用户名密码,这样系统第一次启动就会自动开启SSH服务。如果你的系统已经刷好且没开SSH,可以拔下存储卡插到电脑上,在boot目录里新建一个名为ssh的空文件,再启动系统就会自动开启SSH了。

SSH登录之后,第一步要做的是修改默认密码和更新系统。Ubuntu Server树莓派版默认用户是ubuntu,默认密码是ubuntu,首次登录会强制要求修改。建议直接换成自己的密码并立刻执行系统更新:

sudo passwd sudo apt update && sudo apt upgrade -y

更新过程可能持续几分钟,取决于网络状况和存储卡速度。更新完成后顺手安装几个基础工具,比如curl、vim、net-tools,后面排查问题会用到。

2.3 固定IP、更新系统与安装Docker

树莓派做服务器必须用固定内网IP,否则路由器重启后IP变了,端口转发的规则就全部失效。固定IP可以在路由器后台给树莓派的MAC地址绑定一个固定地址,更直接的办法是在系统里配置静态IP。编辑Netplan配置文件:

sudo nano /etc/netplan/50-cloud-init.yaml

参考下面的配置,把IP段改成你自家局域网的真实网段:

network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 114.114.114.114]

保存后执行sudo netplan apply生效。这里解释一下为什么把DNS改成国内公共DNS,因为树莓派默认的DNS解析在某些网络环境下会变慢,换成延迟更低的公共DNS能明显加快后续apt和Docker镜像拉取的速度。

接下来安装Docker,这是让部署步骤大幅简化的关键。Linux上一行命令搞定:

curl -fsSL https://get.docker.com | bash -s -- --mirror Aliyun sudo systemctl enable --now docker

Docker装好后,树莓派的基础环境就准备完了。顺便提一句,树莓派4B建议装个散热片或小风扇,夏天连续跑中继服务温度可能会飙到80度,虽然不至于宕机,但长期高温会加速老化。

3. RustDesk服务器部署:5分钟跑起来

环境准备好之后,真正部署RustDesk服务器其实很快。这里说句实话,我第一次部署的时候卡在不少细节上,折腾了快两个小时,后来理清思路后发现官方已经把流程简化得很好了,关键是你得知道每个参数在干什么。

3.1 Docker Compose一键部署

强烈推荐用Docker Compose方式部署,一份配置文件搞定两个服务,重启开机自启都不用额外操心。在树莓派上新建一个目录,写入docker-compose.yml:

mkdir -p ~/rustdesk cd ~/rustdesk nano docker-compose.yml
services: hbbs: image: rustdesk/rustdesk-server:latest container_name: hbbs command: hbbs -r your.ddns.example.com:21117 ports: - "21115:21115" - "21116:21116" - "21116:21116/udp" - "21118:21118" volumes: - ./data:/root restart: always network_mode: host hbbr: image: rustdesk/rustdesk-server:latest container_name: hbbr restart: always network_mode: host volumes: - ./data:/root

然后执行docker compose up -d,服务就启动了。看到这里你可能注意到,我把网络模式设置成了host,没用默认的bridge模式。这是RustDesk部署里最主要的坑之一:如果使用bridge模式,容器内绑定的端口会被映射到宿主机,但hbbs获取到的本机IP可能变成容器内网IP(如172.17.0.2),导致客户端能注册却不能正常通信。使用host模式后,hbbs直接使用宿主机网络,获取到的IP就是树莓派的内网IP,省去一堆麻烦。

启动后执行docker compose ps,如果两个容器状态都是Up,说明部署成功。

3.2 hbbs和hbbr到底在做什么

部署命令虽然简单,但搞懂这两个进程的角色对后续排查问题帮助很大。hbbs全称是RustDesk ID/Registration Server,负责处理客户端的注册请求,生成和维护每台设备的唯一ID,并且在两台客户端建立会话时充当信令服务器。简单打个比方,hbbs就像运营商客服中心,你拨号时先找它要对方的号码,它负责把两边的需求对接上。

hbbr全称是RustDesk Relay Server,负责流量中转。正常情况下,两台设备会先尝试P2P直连,以降低延迟和带宽消耗。但如果网络环境比较复杂,比如一方在严格的NAT后面或企业内网里,P2P打洞失败,流量就会自动降级走hbbr中转。hbbr的带宽和延迟决定了中继模式下的画质上限,所以如果家里上行带宽不够,外网连接体验就会受影响。这也是为什么推荐把服务器放在上行带宽比较充裕的位置,而不是随便塞在某个弱电箱里。

部署在host模式下还有个好处,容器日志直接跟着systemd或journal走,通过docker logs hbbs就能看到实时日志,排查注册失败、连接超时这类问题非常直观。

3.3 服务验证与日志排查

服务启动后,先不要急着配客户端,先做一轮基础验证。第一步,检查监听端口是否正常:

sudo netstat -tuln | grep -E '2111[5-9]'

正常情况下应该能看到21115、21116(TCP和UDP)、21117、21118、21119都在监听。如果你看到21116只有TCP而没有UDP,说明docker或防火墙配置漏了,这个端口负责设备心跳和注册,UDP不通会导致客户端无法上线。

第二步,查看数据目录里是否生成了密钥文件:

ls -la ~/rustdesk/data/

首次运行后目录里会出现id_ed25519和id_ed25519.pub两个文件,这是RustDesk的加密密钥对,客户端配置时需要填写id_ed25519.pub里的内容。这个Key非常重要,它决定了哪些客户端可以连接你的服务器,理论上只要Key不泄露,别人即使知道你的服务器地址也进不来。

第三步,用客户端简单测试。下载任意平台RustDesk客户端,在“设置-网络”里填入树莓派的内网IP作为ID服务器和中继服务器,Key填id_ed25519.pub的内容。如果客户端能显示“就绪”,说明内网部署已经成功,接下来就是外网访问配置了。

3.4 升级与数据备份

RustDesk服务器版本更新比较频繁,升级操作很简单,在docker-compose.yml所在目录执行:

docker compose pull docker compose up -d

两条命令搞定,镜像拉取完成后会重建容器。数据目录就是volume挂载的~/rustdesk/data,备份时把这个目录整体打包拷贝走就行。我习惯每次升级前先复制一份data目录,万一新版有问题可以随时回滚。

需要注意的是,RustDesk服务器和客户端版本之间要保持一定兼容性,如果客户端版本太新而服务器版本太旧,可能出现连接后无法建立会话的情况。客户端长期不升级、服务器保持最新,是我目前踩坑最少的使用方式。

4. 外网访问配置:让家里服务器暴露在公网

树莓派部署在内网,想让外部设备(比如办公室电脑、手机4G网络)也能连回家里,就必须打通公网链路。整个外网访问配置涉及三层:宽带侧、路由器侧、树莓派防火墙侧,缺一不可。

4.1 路由器端口转发

首先确认你家宽带有公网IP。怎么看?在路由器WAN口状态页里看IP地址,如果IP不是常见的100.64.x.x、10.x.x.x这类保留地址,大概率是公网IP。然后进入路由器管理后台,找到“端口转发”或“虚拟服务器”功能,把前面表格里的5个端口全部映射到树莓派的内网IP上。以常用的TP-LINK路由器为例,需要分别添加TCP和UDP规则,某些路由器支持端口段映射,可以直接写21115-21119。

这里有个很多新手容易忽略的点:端口转发规则添加后,一定要先在内网验证服务是通的,再测试外网。否则内网都不通,排错时根本分不清是转发问题还是服务问题。内网客户端填树莓派IP能连上,再做外网测试才有意义。

对于光猫拨号的情况,还要额外处理一层“光猫路由模式下的端口映射”。有的运营商光猫默认是路由模式,宽带IP落在光猫上,路由器其实是在做二次NAT,这时在路由器上做端口转发是不生效的,需要在光猫里再映射一次,或者把光猫改成桥接模式让路由器直接拨号。改桥接需要宽带账号密码,一般情况下打运营商电话就能要到。

4.2 动态公网IP与DDNS

国内大部分家庭宽带的公网IP是动态的,可能几天或几周变一次,如果通过IP直连,IP一变就失联了。解决办法是DDNS(动态域名解析),把域名固定指向你当前的公网IP,IP变了自动更新解析。比较省心的方案是买一个便宜域名,用阿里云或腾讯云的DDNS脚本在树莓派上自动更新解析记录。

我用的方式是路由器自带DDNS功能,很多路由器都内置了花生壳、No-IP等DDNS服务商,只需要注册一个免费域名绑定到路由器WAN口即可。如果路由器不支持,也可以在树莓派上装ddclient或配置cron脚本定时上报IP。有了DDNS域名,后面客户端配置时只需要填域名,不管公网IP怎么变都能找得到服务器。

4.3 防火墙与安全组放行

很多树莓派系统默认开启了ufw防火墙,如果没放行端口,外部流量即使被路由器转发进来也会被系统拒之门外。放行命令如下:

sudo ufw allow 21115/tcp sudo ufw allow 21116/tcp sudo ufw allow 21116/udp sudo ufw allow 21117/tcp sudo ufw allow 21118/tcp sudo ufw allow 21119/tcp sudo ufw reload

这里再说一个容易被忽略的安全细节:不要为了省事直接关闭防火墙。RustDesk服务器暴露在公网后,端口扫描是家常便饭,防火墙即便只是起到基础过滤作用,也能挡掉不少试探流量。如果需要更严格的控制,还可以限制来源IP,比如只允许公司的公网出口IP或常用手机流量所在IP段访问21117中继端口,这样即使Key泄露,攻击者也没法从其他IP连入。

4.4 外网访问验证

配置完成后,用手机流量或请朋友在外面帮你测一下。手机装RustDesk客户端,把ID/中继服务器填成DDNS域名,Key填公钥内容,然后尝试连接家里树莓派:

  1. 确认手机能正常访问外网,打开测试网站能加载。
  2. 打开可能影响访问的应用或在路由器里开启端口转发日志。
  3. 手机RustDesk客户端连接ID服务器,观察是否显示“就绪”。
  4. 尝试连接一台内网设备,检查画面是否能正常显示。

如果手机端连接不上,大概率还是公网链路的问题。可以先从手机浏览器访问你的DDNS域名加特定端口测试端口是否开放,比如http://域名:21117,如果提示连接被拒绝或超时,说明端口没有真正暴露到公网,依次检查路由器映射、光猫桥接和树莓派防火墙。

5. 客户端接入实战:电脑和手机怎么连

服务端和外网链路都准备好之后,剩下的就是客户端配置了。RustDesk客户端做得比较简洁,设置逻辑也一致,我分别说下电脑端和手机端的操作要点。

5.1 客户端设置服务器地址和Key

从RustDesk官网下载对应平台客户端,安装后先不要直接发起连接,先进行网络设置。在Windows版主界面中,点击右上角菜单按钮,选择“设置”,进入“网络”选项卡,在“ID/中继服务器”栏中填写你的服务器信息,ID服务器填DDNS域名或树莓派公网IP,中继服务器填同一个地址,Key填id_ed25519.pub文件里的那串字符串(注意别填成私钥id_ed25519里的内容,那样客户端直接报错无法连接)。

保存配置后,客户端会自动向服务器注册,此时主界面会显示“就绪”,并且分配到一个服务器内的原始ID。这个ID是别人连接你设备的标识,可以在客户端主界面看到,不需要自己设置,由服务器自动分配。

手机端逻辑完全一样,在“设置-网络”里填入相同的服务器信息和Key,保证手机端和电脑端使用同一套配置,即可互连互通。

5.2 内网与公网场景测试

配置完成后,建议分两个场景做完整测试。第一个场景是内网环境,将笔记本连到家里WiFi,然后用手机端发起连接,此时两台设备都在局域网内,连接建立速度应该很快,画面延迟基本感觉不到,原因在于hbbs完成信令协调后,两台设备直接走了P2P内网通道,不经过服务器中转。

第二个场景是纯公网环境,把手机切到4G/5G网络或到公司网络测试。此时P2P能否打通取决于两边的NAT类型,如果打洞成功,延迟也会比较低;如果打洞失败,流量会走树莓派的hbbr中继,延迟和画质会受家庭宽带上行带宽影响。在家宽上行只有20-30Mbps的情况下,1080P画面基本能流畅显示,但拖拽窗口或切换桌面会有轻微卡顿感,这是正常现象,也是自建方案无法回避的物理限制。

5.3 安全加固:密码、密钥和访问控制

RustDesk的安全性取决于三层:第一层是访问密码,每台设备都可以设置独立密码或临时密码,连入时必须输入密码;第二层是服务器的Key,只有Key匹配的客户端才能注册到服务器;第三层是网络层面的防火墙限制。这三层建议都做好,不要偷懒。

密码设置方面,在客户端“设置-安全”里可以启用在连接时输入密码的功能,建议使用高强度密码,并定期更换。临时密码可以设置为每次会话后自动更新,适合临时远程帮人修电脑的场景,避免密码长期有效被滥用。

我实际使用中还会做一个额外动作:在路由器防火墙里限制21117中继端口的来源IP,仅允许我自己常用设备的公网出口IP访问。这样即使某个设备的RustDesk临时密码被泄露,攻击者从陌生网络也连不进来,安全等级会高很多。

6. 常见问题与排查技巧实录

自建服务器方案,服务跑起来只是第一步,日常使用中总会遇到各种奇奇怪怪的问题。我把自己踩过的坑和排查思路整理成下面几类,希望能帮你少走弯路。

6.1 服务起来了但是客户端连接失败

先检查客户端是否显示“就绪”。如果显示“未连接”或“连接失败”,第一优先排查Key是否填写正确。Key是id_ed25519.pub文件里的内容,不是私钥,一定不要填错。第二排查端口是否全部放行,尤其21116的UDP,可以用netstat检查监听状态。

如果Key和端口都没问题,查看hbbs日志:

docker logs hbbs --tail 50

日志中如果出现failed to bind address,说明端口被其他进程占用,用sudo lsof -i:21116查看占用进程,确认不是其他服务占用了RustDesk的端口。如果日志中出现invalid key,说明客户端填写的Key与服务器不匹配,重新复制公钥内容即可。

6.2 外网无法访问但内网正常

这个现象基本可以断定是公网链路的问题。按顺序排查:

  1. 先从外网访问你的DDNS域名,确认解析出的IP和当前公网IP一致。如果不一致,DDNS更新失败,检查ddclient或路由器的DDNS状态。
  2. 用在线端口检测工具(比如站长工具的端口扫描)测试21115-21119端口是否对外开放。如果扫描显示超时或关闭,问题在路由器端口映射或光猫桥接。
  3. 确认运营商没有封禁相关端口。少数宽带运营商会限制部分常见端口,这时候可以在路由器端口映射时把外部端口改成高位端口(比如41115-41119),内部端口仍然指向21115-21119,同时客户端配置里需要把中继服务器地址写成域名加端口的形式。

外网无法访问的场景最耗时,建议每改一步就重新测试一次,别一口气改完再查,不然根本不知道是哪一步生效的。我一般用一台手机流量作为固定测试端,这样测试条件更可控。

6.3 连接卡顿与延迟优化

如果外网连接画面卡顿,先看是否是中继模式。客户端连接后,在会话窗口右上角或统计信息里能看到当前是直连还是经由中继。容量判断、画面码率、延迟情况一目了然。中继模式下卡顿,核心优化方向是提高家庭宽带上行带宽和降低链路延迟,这两个因素完全取决于你的宽带线路。

软件层面能做的是调整画质设置。RustDesk客户端支持自定义码率和分辨率,在会话工具栏里把码率从“自动”改成手动,降低到2-4Mbps,画质损失不多但卡顿会明显减少。高延迟网络下,建议把分辨率调低到1280x720甚至更低,操作响应会顺畅很多。我实测在移动网络环境下,720P + 3Mbps码率是流畅性和画质的平衡点。

6.4 常见问题速查表

现象排查点解决方案
客户端显示未连接Key、端口21116重新复制公钥;确认TCP和UDP均放行
内网正常外网超时端口转发、DDNS、运营商封端口检查路由器映射和DDNS解析;改用高位外部端口
能注册但无法建立会话hbbs的-r参数确保hbbs启动命令中-r指向中继服务器公网地址
Docker部署后IP异常bridge网络模式改用network_mode: host
画面卡顿、延迟高中继模式下带宽不足手动降低码率和分辨率;提升上行带宽
忘了服务器Key数据目录加密文件查看~/rustdesk/data/id_ed25519.pub内容

最后再分享一个我自己的经验:树莓派这类ARM小主机跑RustDesk服务,最大的敌人不是性能,而是存储卡寿命。频繁写入日志到TF卡,质量差的卡一两年就可能挂掉。建议把日志级别调低,或者在Linux里挂一个日志重定向到内存tmpfs,同时定期备份data目录。我就是吃了这个亏,一张旧卡跑了大半年突然只读,重新部署花了半小时,数据倒是没丢。稳定运行半年多,这套树莓派RustDesk服务器从来没让我失望过,远程维护家里电脑、帮朋友处理问题、出差拿文件,全指望它了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询