ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

树莓派搭建RustDesk服务器:自建远程桌面的完整指南

树莓派搭建RustDesk服务器:自建远程桌面的完整指南 以前出差在外最崩溃的一件事就是想连回家里电脑拿个文件结果第三方远程软件要么限速、要么限制设备数量免费版画质糊得像马赛克还总担心数据经过别人服务器。后来我花了两百块收了一台二手树莓派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服务器端由两个程序组成hbbsID/注册服务器负责管理设备ID、生成连接密钥、协调会话建立hbbr中继服务器负责当两台设备无法直接通信时转发流量。两个程序可以跑在同一台机器上也就是树莓派上。整套系统部署后客户端会先连接hbbs获取设备列表和连接信息然后尝试P2P直连失败则走hbbr中继。这意味着树莓派需要对外暴露一组固定端口我整理了一张端口规划表照着防火墙和路由器配置就不会漏端口协议用途21115TCPNAT类型测试21116TCP UDPhbbs注册与心跳两个协议都要放行21117TCPhbbr中继服务21118TCPhbbs网页客户端可选21119TCPhbbr网页客户端可选记住核心端口是21116和2111721115用于网络类型探测很多外网连接问题其实就是少放了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 dockerDocker装好后树莓派的基础环境就准备完了。顺便提一句树莓派4B建议装个散热片或小风扇夏天连续跑中继服务温度可能会飙到80度虽然不至于宕机但长期高温会加速老化。3. RustDesk服务器部署5分钟跑起来环境准备好之后真正部署RustDesk服务器其实很快。这里说句实话我第一次部署的时候卡在不少细节上折腾了快两个小时后来理清思路后发现官方已经把流程简化得很好了关键是你得知道每个参数在干什么。3.1 Docker Compose一键部署强烈推荐用Docker Compose方式部署一份配置文件搞定两个服务重启开机自启都不用额外操心。在树莓派上新建一个目录写入docker-compose.ymlmkdir -p ~/rustdesk cd ~/rustdesk nano docker-compose.ymlservices: 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、21116TCP和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动态域名解析把域名固定指向你当前的公网IPIP变了自动更新解析。比较省心的方案是买一个便宜域名用阿里云或腾讯云的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填公钥内容然后尝试连接家里树莓派确认手机能正常访问外网打开测试网站能加载。打开可能影响访问的应用或在路由器里开启端口转发日志。手机RustDesk客户端连接ID服务器观察是否显示“就绪”。尝试连接一台内网设备检查画面是否能正常显示。如果手机端连接不上大概率还是公网链路的问题。可以先从手机浏览器访问你的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 外网无法访问但内网正常这个现象基本可以断定是公网链路的问题。按顺序排查先从外网访问你的DDNS域名确认解析出的IP和当前公网IP一致。如果不一致DDNS更新失败检查ddclient或路由器的DDNS状态。用在线端口检测工具比如站长工具的端口扫描测试21115-21119端口是否对外开放。如果扫描显示超时或关闭问题在路由器端口映射或光猫桥接。确认运营商没有封禁相关端口。少数宽带运营商会限制部分常见端口这时候可以在路由器端口映射时把外部端口改成高位端口比如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服务器从来没让我失望过远程维护家里电脑、帮朋友处理问题、出差拿文件全指望它了。
返回列表