使用 RustDesk 搭建私有远程桌面环境

介绍

简介 RustDesk,工具如其名,基于高效的Rust语言构建的开源远程桌面工具。

  • 轻量:不论服务端还是客户端、不论哪个平台,软件小巧、功能完备。
  • 全平台支持:支持Android、Linux、Windows任意双向控制,iOS单向控制。
  • 安全可控:软件开源,服务端自建,通信加密。
  • 带宽高效:仅需2-3M即可流畅1080P,支持TCP打洞端对端P2P连接。

RustDesk官网:rustdesk.com/zh/

GitHub:github.com/rustdesk/ru...

RustDesk的优势在于可以使用自己的服务器,硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的。

如果控制端和被控端位于同一网段下时,不需要通过 relay server 中转,直接建立内网链接。如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。非直连情况下,播放全屏视频(1920x1080屏幕)实测近两分钟,带宽平均占用1.3Mbps左右。

RustDesk 服务部署

rustdesk.com/docs/en/sel...

在Docker部署和常规部署之间选择一个即可

Docker部署

rustdesk.com/docs/en/sel...

docker-compose.ymal

yaml 复制代码
    services:
      hbbs:
        container_name: hbbs
        image: rustdesk/rustdesk-server:latest
        command: hbbs
        volumes:
          - ./data:/root
        network_mode: "host"
        depends_on:
          - hbbr
        restart: unless-stopped

      hbbr:
        container_name: hbbr
        image: rustdesk/rustdesk-server:latest
        command: hbbr
        volumes:
          - ./data:/root
        network_mode: "host"
        restart: unless-stopped

Linux/arm64v8 架构则使用 rustdesk/rustdesk-server:latest-arm64v8

--net=host 桥接网络非 nat, 仅适用于 Linux,它让 hbbs/hbbr 可以看到对方真实的ip 和 port 。 如果 --net=host 不能正常运行,则使用 port 增加端口映射。

markdown 复制代码
hbbs
port:
  - 21115:21115
  - 21116:21116
  - 21116:21116/udp
  - 21118:21118
hbbr
port:
  - 21117:21117
  - 21119:21119

启动服务

复制代码
sudo docker-compose up -d

常规部署 直接运行

在服务器上运行 hbbs/hbbr (Centos 或 Ubuntu)。 ./hbbs -r <hbbr运行所在主机的地址:port> ./hbbr

systemd 服务运行

使用 systemd 配置服务运行,方便系统自启动服务,以及守护进程。

hbbs

解压出来的hbbs文件先通过chmod +x hbbs赋予可执行权限,先运行一次./hbbs,生成用于客户端认证使用的公钥id_ed25519.pub,随后用cat id_ed25519.pub命令查看公钥并记下。然后通过喜欢的编辑器编辑/etc/systemd/system/hbbs.service,将用于参考的以下配置根据需要进行修改并保存,这时也要将强制校验密钥以-k _参数写入启动命令中。

ini 复制代码
    # systemd配置路径

    # /etc/systemd/system/hbbs.service

    [Unit]
    Description=Rust Desk Service
    After=network.target

    [Service]
    Type=simple
    User=root
    Restart=on-failure
    RestartSec=5s
    # 设置运行路径

    WorkingDirectory=/*程序路径*/rustdesk

    # 可修改锚点端口,当前为21116(锚点)和21115(锚点-1)和21118(锚点+2)

    # -r用于指定网卡IP(适用多网卡),-k参数用于强制校验客户端公钥,用于避免未授权的使用

    ExecStart=/*程序路径*/rustdesk/hbbs -r 0.0.0.0 -p 21116 -k _

    [Install]
    WantedBy=multi-user.target

hbbr

解压出来的hbbr文件先通过chmod +x hbbr赋予可执行权限,然后通过喜欢的编辑器编辑/etc/systemd/system/hbbr.service,将用于参考的以下配置根据需要进行修改并保存,同样将密钥校验以-k _参数写入启动命令中。

ini 复制代码
    # systemd配置路径

    # /etc/systemd/system/hbbr.service

    [Unit]
    Description=Rust Desk Service
    After=network.target

    [Service]
    Type=simple
    User=root
    Restart=on-failure
    RestartSec=5s

    # 设置运行路径

    WorkingDirectory=/*程序路径*/rustdesk

    # 可修改锚点端口,当前为21117(锚点)和21119(锚点+2)

    # -k参数用于强制校验客户端公钥,用于避免未授权的使用

    ExecStart=/*程序路径*/rustdesk/hbbr -p 21117 -k _

    [Install]
    WantedBy=multi-user.target

service设置好后,即可通过service hbbs start和service hbbr start来启动这两项服务,启动后可以通过service hbbs status和service hbbr status查看进程的运行状态,显示绿色的Active即无误。

一切准备就绪后即可通过systemctl enable hbbs和systemctl enable hbbr允许它们开机自启。

rustdesk

在我们远程控制主机时,可能不得不完成重启的操作,远控软件不自启可不行,那么接下来我们一起来配置一下自启。

编辑文本文档 rustdesk.service

ini 复制代码
[Unit]
Description=RustDesk
Requires=network.target
After=systemd-user-sessions.service

[Service]
Type=simple
ExecStart=/usr/bin/rustdesk --service
PIDFile=/var/run/rustdesk.pid
KillMode=mixed
TimeoutStopSec=30
User=root
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

移动到 /usr/lib/systemd/system 文件夹下,执行:

bash 复制代码
sudo systemctl enable rustdesk

查看服务运行状态

lua 复制代码
systemctl status rustdesk

端口放行

确保下面端口未被防火墙拦截

  • TCP(21115, 21116, 21117, 21118, 21119)
  • UDP(21116)
端口号 协议 程序 用途 锚点
21115 tcp HBBS NAT类型测试
21116 tcp/udp HBBS TCP 打洞与连接服务/UDP ID注册与心跳服务 HBBS锚点
21117 tcp HBBR 中继服务 HBBR锚点
21118 tcp HBBS WebSocket服务
21119 tcp HBBR WebSocket转发
  • hbbs:

    • 21114 (TCP): used for web console, only available in Pro version.
    • 21115 (TCP): used for the NAT type test. 21115是hbbs用作NAT类型测试
    • 21116 (TCP/UDP): Please note that 21116 should be enabled both for TCP and UDP. 21116/UDP is used for the ID registration and heartbeat service. 21116/UDP是hbbs用作ID注册与心跳服务 21116/TCP is used for TCP hole punching and connection service.21116/TCP是hbbs用作TCP打洞与连接服务
    • 21118 (TCP): used to support web clients.21118 是为了支持网页客户端
  • hbbr:

    • 21117 (TCP): used for the Relay services.21117是hbbr用作中继服务
    • 21119 (TCP): used to support web clients. 21119是为了支持网页客户端

手动设置防火墙规则,iptables、firewalld、ufw的命令分别如下,其中的端口请按照你的设置的进行放行(默认21115-21117),这里需要注意hbbs锚点端口必须同时放行tcp和udp。

csharp 复制代码
    # CentOS firewalld

    firewall-cmd --zone=public --add-port=21115/tcp --permanent
    firewall-cmd --zone=public --add-port=21116/tcp --permanent
    firewall-cmd --zone=public --add-port=21116/udp --permanent
    firewall-cmd --zone=public --add-port=21117/tcp --permanent

    # Debian/Ubuntu ufw

    ufw allow 21115:21119/tcp
    ufw allow 21116/udp # 请注意21116同时要开启TCP和UDP
    sudo ufw enable

    # iptables

    iptables -I INPUT 1 -p tcp --dport 21115 -j ACCEPT
    iptables -I INPUT 1 -p tcp --dport 21116 -j ACCEPT
    iptables -I INPUT 1 -p udp --dport 21116 -j ACCEPT
    iptables -I INPUT 1 -p tcp --dport 21117 -j ACCEPT
    iptables-save //保存(解决重启失效)

Rustdesk 客户端

客户端安装

rustdesk.com/docs/en/cli...

可以从这里下载客户端 GitHub.

目前支持的客户端平台:

  • Microsoft Windows
  • macOS
  • Debian Derivatives (Ubuntu ≥ 16, Linux Mint, etc.)
  • Red Hat Derivatives (CentOS, Fedora ≥ 18, Rocky Linux, etc.)
  • Arch Linux/Manjaro
  • openSUSE
  • NixOS
  • AppImage / Flatpak
  • Android
  • iOS (not support being controlled)
  • Web

客户端配置

rustdesk.com/docs/en/sel...

  • ID Server: RustDesk 服务部署设备的 IP
  • Relay Server: 不填,则使用 ID server
  • Key: 在 RustDesk 服务启动后,在 data 目录下可以找到 id_ed25519.pub 文件,其中的内容则是 key

Lock screen

Login screen using Wayland is not supported yet. If you wanna access login screen after reboot or logout with RustDesk, you need to change login screen to X11, please modify below line to WaylandEnable=false in /etc/gdm/custom.conf or /etc/gdm3/custom.conf:

shell 复制代码
#WaylandEnable=false

Note

Please reboot to make above changes taking effect.

相关推荐
Είναι η κοπέλα11 小时前
显存计算与模型选择:你的显卡能跑多大的模型
人工智能·pytorch·python·开源·conda
miofly13 小时前
Reflection AI 发布 501B 参数开放权重模型 Beam
开源·github
m4Rk_14 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
microrain15 小时前
同一个寄存器,四种读法:SagooIoT Modbus 驱动的字节序、宽度与功能码
物联网·golang·开源·sagooiot
EatFan17 小时前
从 CUDA 到昇腾:一张对照表拆解 DeepSeek 最新开源组件(TileLang / DeepGEMM / DeepEP / TileKernels)
开源·cuda·deepseek·deepgemm·tilelang·华为昇腾
ttwuai18 小时前
Go开源后台管理系统推荐:README、源码和License应该怎么验
开发语言·golang·开源
CEZ18 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·开源
miofly19 小时前
Opus 5.5 智能体发现两种室温磁性半导体候选材料,其中一种已有实验验证
开源·github
斯内普吖19 小时前
(开源)宠物饲养系统实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源·宠物
挖掘狂人20 小时前
把 AI Agent 养在自己电脑上:从本地部署到远程接管的一份完整思路
人工智能·开源·ai编程