使用 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 startservice hbbr start来启动这两项服务,启动后可以通过service hbbs statusservice hbbr status查看进程的运行状态,显示绿色的Active即无误。

一切准备就绪后即可通过systemctl enable hbbssystemctl 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是为了支持网页客户端

手动设置防火墙规则,iptablesfirewalldufw的命令分别如下,其中的端口请按照你的设置的进行放行(默认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.

相关推荐
斯~内克1 小时前
Centrifugo 深度解析:构建高性能实时应用的开源引擎
前端·开源
说私域3 小时前
基于开源AI智能名片链动2+1模式的S2B2C商城小程序:门店私域流量与视频号直播融合的生态创新研究
人工智能·小程序·开源
不讲道理的柯里昂7 小时前
Vue MathJax Beautiful,基于Mathjax的数学公式编辑插件
vue.js·开源
FIT2CLOUD飞致云8 小时前
多项功能优化与改进,1Panel开源面板v2.0.3版本发布
开源
Qiuner9 小时前
【源力觉醒 创作者计划】开源、易用、强中文:文心一言4.5或是 普通人/非AI程序员 的第一款中文AI?
人工智能·百度·开源·文心一言·gitcode
Simon_He1 天前
一个免费的在线压缩网站超越了付费的压缩软件
前端·开源·图片资源
Codebee1 天前
50行代码搞定OneCode摄像头插件:快速定制实战指南
前端框架·开源·ecmascript 6
mortimer1 天前
从零到一:构建一个 Chatterbox-TTS API 服务
开源·github·ai编程
Sherlock Ma1 天前
百度开源文心一言4.5:论文解读和使用入门
人工智能·百度·自然语言处理·开源·大模型·文心一言·多模态