企业每年在远程桌面授权上烧掉的钱,够买下一整层写字楼。TeamViewer的商用授权按设备计费,AnyDesk的企业版报价单长得像房贷合同。更麻烦的是数据主权——你的屏幕画面、文件传输、键盘记录,全在别人的服务器上走了一圈。
2024年GitHub星标数突破6.8万的RustDesk,给了一个反常识的选项:开源、自托管、零授权费。不是"免费试用",是真正意义上的买断制自由。
本文基于Ubuntu 22.04/24.04 LTS环境,完整还原从裸机到生产级部署的全流程。所有命令经过实测,可直接复制到终端执行。
第一步:准备一台"干净"的Linux服务器
RustDesk的服务端对硬件极其克制。官方文档给出的底线是1核CPU、512MB内存、10GB存储——这比大多数智能家居网关的配置还低。实际生产环境建议2核2GB起步,留给日志和并发连接一些余量。
系统选择只有一条硬约束:必须是Ubuntu 22.04或24.04 LTS。其他发行版能跑,但Docker镜像的兼容性测试以这两个版本为基准。
SSH登录后先做三件事:更新系统、校准时区、重启生效。时区设置常被忽略,但日志时间戳错乱会让后期排障变成噩梦。
ssh root@你的服务器IP apt update && apt upgrade -y timedatectl set-timezone Asia/Shanghai # 按实际地理位置修改 reboot
重启后重新连接,确认内核版本和Docker兼容性。Ubuntu 24.04默认的6.8内核对容器运行时支持良好,无需额外调整。
第二步:安装Docker——别用apt默认源
Ubuntu自带的docker.io包版本滞后,且缺少compose插件。必须从Docker官方仓库安装,这是后续所有操作的前置条件。
安装流程分四段:依赖准备、GPG密钥、软件源配置、实际安装。每一步都有验证命令,确保不会中途翻车。
apt install -y ca-certificates curl gnupg install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
装完后执行docker --version和docker compose version,看到版本号才算过关。如果compose显示为docker-compose(带横杠),说明插件没装对,需要回退检查。
第三步:目录结构与持久化数据
RustDesk服务端由两个组件构成:hbbs(ID注册与心跳服务)和hbbr(中继转发服务)。它们需要共享同一个数据目录,用于存储密钥、设备ID映射和临时配置。
在/opt下创建独立目录是Linux服务的最佳实践。既方便备份,也避免和系统目录混为一谈。
mkdir -p /opt/rustdesk-server/data cd /opt/rustdesk-server
data目录会挂载到两个容器的/root路径下。这意味着容器内的密钥生成、ID分配记录,都会实时同步到宿主机。即使容器被删除重建,数据不会丢失。
第四步:编排文件——network_mode是隐藏考点
compose.yml的内容看起来平淡无奇,但network_mode: "host"这一行决定了成败。RustDesk的协议设计需要直接读取宿主机的网络接口信息,NAT或端口映射会导致客户端无法正确识别中继地址。
文件路径:/opt/rustdesk-server/compose.yml
services: hbbr: container_name: hbbr image: rustdesk/rustdesk-server:latest command: hbbr volumes: - ./data:/root network_mode: "host" restart: unless-stopped hbbs: container_name: hbbs image: rustdesk/rustdesk-server:latest command: hbbs volumes: - ./data:/root network_mode: "host" depends_on: - hbbr restart: unless-stopped
depends_on确保hbbr先启动,hbbs后启动。这个顺序不能乱,因为hbbs注册设备ID时需要向hbbr查询中继可用性。
启动命令简洁到可疑:docker compose up -d。后台运行后,用docker ps确认两个容器状态为Up,docker compose logs查看是否有报错。
第五步:提取公钥——这是你的"根证书"
首次启动后,hbbs会在data目录生成一对Ed25519密钥。私钥id_ed25519必须严加保管,公钥id_ed25519.pub则需要分发给所有客户端。
客户端连接自托管服务器时,必须验证服务器公钥匹配。这个设计防止了中间人攻击——即使有人劫持了你的域名或IP,没有正确的公钥也无法伪装成你的服务器。
cat /opt/rustdesk-server/data/id_ed25519.pub && echo ""
输出格式是一行Base64编码的字符串,末尾带等号。复制完整内容,包括等号。建议同时备份到密码管理器和离线存储。
如果这步没看到文件,说明容器启动失败或权限配置有误。检查data目录的所有者是否为root,以及Docker日志中的权限拒绝错误。
第六步:防火墙与端口——比想象中简单
RustDesk服务端只需要暴露三个端口:21114(TCP,Web控制台,可选)、21115-21119(TCP,ID注册与中继)、21116(UDP,心跳探测)。如果不用Web控制台,实际只需21115-21119和21116。
云服务器需要在安全组放行这些端口。物理服务器则用ufw或iptables配置。一个常见的坑是只放行了TCP而忘记UDP,导致客户端显示"在线"却无法建立直连。
验证端口是否监听:ss -tlnp | grep 211。应该看到hbbr和hbbs进程分别占用了不同端口。
客户端配置:从"公共服务器"切换到"自建"
下载RustDesk客户端后,默认连接的是官方公共服务器。切换到自己的服务器需要三处修改:ID服务器地址、中继服务器地址、公钥。
设置路径:设置 → 网络 → ID/中继服务器。ID服务器和中继服务器填同一个域名或IP,Key栏粘贴刚才提取的公钥。
点击应用后,客户端会断开并重连。成功标志是主界面底部的连接状态显示为你的服务器地址,而非"rs-ny.rustdesk.com"之类的公共节点。
测试连接:在两台设备上分别配置同一台服务器,尝试远程控制。第一次连接会提示"是否信任此设备",确认后后续自动放行。
高级加固:从"能用"到"敢用"
基础部署完成后,生产环境还需要三层加固:TLS加密、访问控制、审计日志。
TLS加密通过反向代理实现。Nginx或Traefik都可以,将21114端口(Web控制台)和21115-21119用HTTPS封装。证书用Let's Encrypt自动续期,避免自签名证书的浏览器警告。
访问控制分两级。服务端层面,hbbs支持IP白名单,在compose.yml的command后追加-r参数指定允许连接的网段。客户端层面,RustDesk内置"仅允许特定设备访问"的ACL,需要被控端主动授权。
审计日志默认存储在data目录的rustdesk.log。企业合规场景下,建议挂载到宿主机的rsyslog,统一收集到SIEM平台。日志包含连接时间、设备ID、操作类型,但不记录屏幕内容——这是隐私设计的底线。
成本核算:自建 vs 商业方案
以50人团队、每人2台设备计算,TeamViewer商业版年费约1.2-1.8万元(视折扣力度)。AnyDesk企业版报价类似,且按并发会话数额外计费。
自建方案的成本结构完全不同:一台2核2G云服务器年费约600-800元(阿里云/腾讯云轻量应用服务器),域名和证书成本可忽略。人力成本方面,首次部署需要2-4小时,后续维护几乎为零。
隐性收益在于数据主权。金融、医疗、政务等敏感行业,远程桌面走第三方服务器通常无法通过合规审计。自建方案将数据流限制在自有基础设施内,省去了大量的合规解释成本。
风险也有:没有7×24小时客服热线,出问题需要自己看日志。但RustDesk的GitHub Issues响应速度相当快,核心维护者通常在24小时内回复。
一个被低估的细节:RustDesk的P2P穿透率
远程桌面工具的核心体验指标,不是画质或延迟,而是"能不能连上"。NAT穿透失败时,流量被迫走服务器中转,延迟从20ms暴涨到200ms以上。
RustDesk采用了和WebRTC类似的ICE框架,支持STUN/TURN/中继三级 fallback。实测在普通家庭宽带环境下,P2P直连成功率约85%-90%,优于TeamViewer的75%-80%(数据来源:社区用户自发统计,非官方benchmark)。
自建服务器的中继带宽成为瓶颈场景下的救命稻草。商业方案的中继资源是共享的,高峰期排队不可避免。自建服务器独占带宽,50人团队同时走中继也绰绰有余。
部署完成后,你的服务器会开始积累一些有趣的统计数据。比如哪台设备最活跃、哪个时段连接峰值、有多少次穿透失败 fallback到中继。这些数据不会出现在任何仪表盘上,但cat rustdesk.log | grep "Connection"能告诉你很多关于团队工作模式的事。
最后一个问题留给你:当远程桌面工具从"订阅制"变成"基础设施制",IT部门的角色会从"采购审批者"变成"运维责任者"——这个转变,你的组织准备好了吗?
热门跟贴