docker搭建远程桌面控制中继rustdesk

docker搭建远程桌面控制中继rustdesk

一、前言

最近不知怎么,经常需要帮朋友远程,远程工具一般都是用向日葵,不过似乎现在需要登陆才能使用。

总感觉不是很爽。

今天就来推荐一款向日葵的开源替代品——Rust desk

  1. 介绍

一个非常好用的远程桌面软件。

1.1 特点

咕咕这边简单在网上抄搜集了一些特点,供大家参考:

用Rust编写

开箱即用,不需要复杂的配置

你可以完全控制你的数据,而不用担心安全问题

你可以使用官方的rendezvous/relay服务器,也可以建立你自己的rendezvous/relay服务器。

当然我们今天就是和大家分享一下如何搭建。

  1. 项目展示
    GitHub原项目地址(感谢作者的付出):https://github.com/rustdesk/rustdesk(23.2k star)

二、Docker运行

Docker镜像地址:https://hub.docker.com/r/rustdesk/rustdesk-server/tags

官网地址:https://rustdesk.com

文档地址:https://rustdesk.com/docs/zh-cn/self-host/

直接docker-compose.yaml代码:

version: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r hbbs.example.com:21117   # hbbs.example.com改成
    volumes:
      - ./hbbs:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./hbbr:/root
    networks:
      - rustdesk-net
    restart: unless-stopped

打开防火墙的端口21115、21116、21117、21118、21119

默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。

务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。

其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。

如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。

在客户端设置 hbbs/hbbr 地址

点击 ID 右侧的菜单按钮如下,选择“ ID/中继服务器”。

img

在 ID 服务器输入框中(被控端+主控端)输入 hbbs 主机或 ip 地址,另外两个地址可以不填,RustDesk会自动推导(如果没有特别设定),中继服务器指的是hbbr(21116)端口。

例如:

hbbs.example.com

或者

hbbs.example.com:21116

img

但是存在一个问题:hbbs和hbbr在系统重启后IP会变动,建议将IP地址固定:

在networks内加入

   ipam:
     config:
      - subnet: 172.28.0.0/16
        gateway: 172.28.0.1

相关的网络设置内加入IP地址。附:docker-compose.yaml:

version: '3'

networks:
  rustdesk-net:
   ipam:
     config:
      - subnet: 172.28.0.0/16
        gateway: 172.28.0.1

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r rust.xxx.xxx:21117
    volumes:
      - ./hbbs:/root
    networks:
      rustdesk-net:
        ipv4_address: 172.28.0.2
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./hbbr:/root
    networks:
      rustdesk-net:
        ipv4_address: 172.28.0.3
    restart: unless-stopped

三、二进制运行(官网文档)

https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-oss/install/

如何自建中继


步骤1: 下载服务器端软件程序

下载或者使用docker rustdesk/rustdesk-server

提供版本:

  • Linux
  • Windows

以下针对Linux版本做使用说明。

有两个可执行文件和一个文件夹:

  • hbbs - RustDesk ID注册服务器
  • hbbr - RustDesk 中继服务器

Linux版本在Centos7构建,在 Centos7/8,Ubuntu 18/20上测试过,Debian系列的发行版本应该都没有问题。如果有其他发行版本需求,请联系我。

服务器要求

硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的。关于网络大小,如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。

步骤2: 在服务器上运行 hbbs 和 hbbr

pm2 自动启动

为了方便自动启动,文档中提到了使用 pm2 进行管理。我这里也参考官方文档进行一些补充。

首先是 npm 的安装,这里可以直接偷懒使用 apt 安装:

sudo apt install npm
sudo npm install -g pm2

之后使用 npm 启动「当前目录下下载好的 hbbr 和 hbbs」

pm2 start ./hbbr
pm2 start ./hbbs -- -r [Server IP]

然后可以在 pm2 list 命令的帮助下查看运行状况:

img

如果这里出现了 error 或者 stopped,有两个主要的可能性:

  1. 之前的端口冲突了,使用上文的方法检查端口使用情况
  2. 使用云服务器厂商需要检查一下防火墙设置是否打开了 21115-21119 的 TCP,其中 21116 同时需要 TCP 和 UDP。这里是在云服务器管理页面进行设置。(为了偷懒,我直接把自己的服务器 2000-60000 的端口全部打开了,大家不要学习)

img

pm2 的状态正常之后,可以使用 pm2 save 存储 pm2 正在管理的任务。

pm2 需要 nodejs v16+,如果你运行 pm2 失败(例如在 pm2 list 中看不到 hbbs/hbbr),请从 https://nodejs.org 下载并安装 LTS 版本的 nodejs。 如果你想让 hbbs/hbbr 在重启后自动运行,请查看 pm2 savepm2 startup。 更多关于 pm2。另一个不错的日志工具是 pm2-logrotate

hhbs的-r参数不是必须的,他只是方便你不用在客户端指定中继服务器,如果是默认21117端口,可以不填port。客户端指定的中继服务器优先级高于这个。

默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。

  • TCP(21115, 21116, 21117, 21118, 21119)
  • UDP(21116)

如果你想选择自己的端口,使用 “-h” 选项查看帮助。

Docker示范

如果你运行 docker 版本时候,要求注册码,说明你下载的是老版本,国内的 docker 镜像缓存没有更新

sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r <relay-server-ip[:port]>
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr
Docker Compose
version: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - <hbbs_port>:21116 # 自定义 hbbs 映射端口
      - <hbbs_port>:21116/udp # 自定义 hbbs 映射端口
    image: rustdesk/rustdesk-server
    command: hbbs -r <your_domain>:<hbbr_port> # 填入个人域名或 IP + hbbr 暴露端口
    volumes:
      - <mount_path>:/root # 自定义挂载目录
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 64M

  hbbr:
    container_name: hbbr
    ports:
      - <hbbr_port>:21117 # 自定义 hbbr 映射端口
    image: rustdesk/rustdesk-server
    command: hbbr
    volumes:
      - <mount_path>:/root # 自定义挂载目录
    networks:
      - rustdesk-net
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 64M

据我所知,–net=host 仅适用于 Linux,它让 hbbs/hbbr 可以看到对方真实的ip, 而不是固定的容器ip (172.17.0.1)。 如果–net=host运行正常,-p选项就不起作用了, 可以去掉。

请去掉 –net=host,如果您在非Linux系统上遇到无法连接的问题

步骤3: 在客户端设置 hbbs/hbbr 地址

点击 ID 右侧的菜单按钮如下,选择“ ID/中继服务器”。

img

在 ID 服务器输入框中(被控端+主控端)输入 hbbs 主机或 ip 地址,另外两个地址可以不填,RustDesk会自动推导(如果没有特别设定),中继服务器指的是hbbr(21117)端口。

例如:

hbbs.example.com

或者

hbbs.example.com:21116

img

把配置放在可执行文件名里 (Windows only)

rustdesk.exe 修改为 rustdesk-host=<host-ip-or-name>,key=<public-key-string>.exe, 例如: rustdesk-host=192.168.1.137,key=xfdsfsd32=32.exe,你可以在About窗口看到配置结果,如下图所示。

hostkey 都需要添加,缺少一个就不好使。

If there are invalid characters in the key which can not be used in file name, please remove id_ed25519 file and restart your hbbs/hbbr, the id_ed25519.pub file will be regenerated, please repeat until you get valid characters.

Menu About Page
img img

Key


同上个版本不同,本版本中的key是强制的,但是不用你自己设置。hbbs在第一次运行时,会自动产生一对加密私钥和公钥(分别位于运行目录下的id_ed25519id_ed25519.pub文件中),其主要用途是为了通讯加密。

如果您在上一步骤中没有填写Key:(公钥文件id_ed25519.pub中的内容),不影响连接,但是连接无法加密。

cat ./id_ed25519.pub

如果您禁止没有key的用户建立非加密连接,请在运行hbbs和hbbr的时候添加-k _ 参数,例如:

./hbbs -r <relay-server-ip[:port]> -k _
./hbbr -k _

如果要更改key,请删除 id_ed25519id_ed25519.pub 文件并重新启动 hbbs/hbbr,hbbs将会产生新的密钥对。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 vault@coolxy.cn

×

喜欢就点赞,疼爱就打赏

github