记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

RustDesk私服搭建教程

RustDesk私服搭建教程
RustDesk是一款功能强大、易于使用的开源的远程桌面软件,支持多种不同的操作系统。在安全上, RustDesk采用了端到端加密来保护远程连接的安全性,只有授权的用户才可以访问;在便捷上,RustDesk可以做到开箱即用,无需任何配置。
官网地址:https://rustdesk.com/zh/
Github:https://github.com/rustdesk/rustdesk
RustDesk亮点特性:
支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。
支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。
完全掌控数据,轻松自建。
P2P 连接,端到端加密。
在 Windows 上可以非管理员不安装运行,根据需要在本地或远程提升权限。
我们崇尚简单,尽一切可能让它简单。
因为RustDesk不对国内提供服务,故需要自己部署RustDesk服务器,才能正常使用,并且自己搭建服务器,远程速度更快更流畅。
搭建教程:
物理机搭建:
hbbs - RustDesk ID/会和服务器
hbbr - RustDesk 中继服务器
rustdesk-utils - RustDesk 命令行工具
您可以在 releases 页面中找到最新的服务端软件。
Docker 镜像:
Docker镜像会在每次 GitHub 发布新的release版本时自动构建。我们提供两种类型的镜像。
Classic 传统镜像
这个类型的镜像是基于 ubuntu-20.04 进行构建,镜像仅包含两个主要的可执行程序(hbbr 和 hbbs)。它们可以通过以下tag在 Docker Hub 上获得:
XML/HTML代码
  1. 架构       image:tag
  2. amd64     rustdesk/rustdesk-server:latest
  3. arm64v8   rustdesk/rustdesk-server:latest-arm64v8
您可以使用以下命令,直接通过 docker run 來启动这些镜像:
XML/HTML代码
  1. docker run --name hbbs --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r <relay-server-ip[:port]>
  2. docker run --name hbbr --net=host -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
或不使用 --net=host 参数启动, 但这样 P2P 直连功能将无法工作。
对于使用了 SELinux 的系统,您需要将 /root 替换为 /root:z,以保证容器的正常运行。或者,也可以通过添加参数 --security-opt label=disable 来完全禁用 SELinux 容器隔离。
XML/HTML代码
  1. docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbs -r <relay-server-ip[:port]>
  2. docker run --name hbbr -p 21117:21117 -p 21119:21119 -v "$PWD/data:/root" -d rustdesk/rustdesk-server:latest hbbr
relay-server-ip 参数是运行这些容器的服务器的 IP 地址(或 DNS 名称)。如果你不想使用 21117 作为 hbbr 的服务端口,可使用可选参数 port 进行指定。
您也可以使用 docker-compose 进行构建,以下为配置示例:
XML/HTML代码
  1. version: '3'
  2.  
  3. networks:
  4.   rustdesk-net:
  5.     external: false
  6.  
  7. services:
  8.   hbbs:
  9.     container_name: hbbs
  10.     ports:
  11.       - 21115:21115
  12.       - 21116:21116
  13.       - 21116:21116/udp
  14.       - 21118:21118
  15.     image: rustdesk/rustdesk-server:latest
  16.     command: hbbs -r rustdesk.example.com:21117
  17.     volumes:
  18.       - ./data:/root
  19.     networks:
  20.       - rustdesk-net
  21.     depends_on:
  22.       - hbbr
  23.     restart: unless-stopped
  24.  
  25.   hbbr:
  26.     container_name: hbbr
  27.     ports:
  28.       - 21117:21117
  29.       - 21119:21119
  30.     image: rustdesk/rustdesk-server:latest
  31.     command: hbbr
  32.     volumes:
  33.       - ./data:/root
  34.     networks:
  35.       - rustdesk-net
  36.     restart: unless-stopped
编辑第16行来指定你的中继服务器 (默认端口监听在 21117 的那一个)。 如果需要的话,您也可以编辑 volume 信息 (第 18 和 33 行)。
基于 S6-overlay 的镜像(二合一)
这些镜像是针对 busybox:stable 构建的,并添加了可执行程序(hbbr 和 hbbs)以及 S6-overlay。 它们可以使用以下tag在 Docker hub 上获取:
XML/HTML代码
  1. 构架         version image:tag
  2. multiarch   latest  rustdesk/rustdesk-server-s6:latest
  3. amd64       latest  rustdesk/rustdesk-server-s6:latest-amd64
  4. i386        latest  rustdesk/rustdesk-server-s6:latest-i386
  5. arm64v8     latest  rustdesk/rustdesk-server-s6:latest-arm64v8
  6. armv7       latest  rustdesk/rustdesk-server-s6:latest-armv7
  7. multiarch   2       rustdesk/rustdesk-server-s6:2
  8. amd64       2       rustdesk/rustdesk-server-s6:2-amd64
  9. i386        2       rustdesk/rustdesk-server-s6:2-i386
  10. arm64v8     2       rustdesk/rustdesk-server-s6:2-arm64v8
  11. armv7       2       rustdesk/rustdesk-server-s6:2-armv7
  12. multiarch   2.0.0   rustdesk/rustdesk-server-s6:2.0.0
  13. amd64       2.0.0   rustdesk/rustdesk-server-s6:2.0.0-amd64
  14. i386        2.0.0   rustdesk/rustdesk-server-s6:2.0.0-i386
  15. arm64v8     2.0.0   rustdesk/rustdesk-server-s6:2.0.0-arm64v8
  16. armv7       2.0.0   rustdesk/rustdesk-server-s6:2.0.0-armv7
强烈建议您使用major version 或 latest tag 的 multiarch 架构的镜像。
S6-overlay 在此处作为监控程序,用以保证两个进程的运行,因此使用此镜像,您无需运行两个容器。
您可以使用 docker run 命令直接启动镜像,如下:
XML/HTML代码
  1. docker run --name rustdesk-server \
  2.   --net=host \
  3.   -e "RELAY=rustdeskrelay.example.com" \
  4.   -e "ENCRYPTED_ONLY=1" \
  5.   -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
或刪去 --net=host 参数, 但 P2P 直连功能将无法工作。
XML/HTML代码
  1. docker run --name rustdesk-server \
  2.   -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \
  3.   -p 21117:21117 -p 21118:21118 -p 21119:21119 \
  4.   -e "RELAY=rustdeskrelay.example.com" \
  5.   -e "ENCRYPTED_ONLY=1" \
  6.   -v "$PWD/data:/data" -d rustdesk/rustdesk-server-s6:latest
或着您也可以使用 docker-compose 文件:
XML/HTML代码
  1. version: '3'
  2.  
  3. services:
  4.   rustdesk-server:
  5.     container_name: rustdesk-server
  6.     ports:
  7.       - 21115:21115
  8.       - 21116:21116
  9.       - 21116:21116/udp
  10.       - 21117:21117
  11.       - 21118:21118
  12.       - 21119:21119
  13.     image: rustdesk/rustdesk-server-s6:latest
  14.     environment:
  15.       - "RELAY=rustdesk.example.com:21117"
  16.       - "ENCRYPTED_ONLY=1"
  17.     volumes:
  18.       - ./data:/data
  19.     restart: unless-stopped
对于此容器镜像,除了在下面的环境变量部分指定的变量之外,您还可以使用以下环境变量
XML/HTML代码
  1. 环境变量       是否可选    描述
  2. RELAY           否       运行此容器的宿主机的 IP 地址/ DNS 名称
  3. ENCRYPTED_ONLY  是       如果设置为 "1",将不接受未加密的连接。
  4. KEY_PUB         是       密钥对中的公钥(Public Key)
  5. KEY_PRIV        是       密钥对中的私钥(Private Key)
基于 S6-overlay 镜像的密钥管理
您可以将密钥对保存在 Docker volume 中,但我们建议不要将密钥写入文件系統中;因此,我们提供了一些方案。
在容器启动时,会检查密钥对是否存在(/data/id_ed25519.pub 和 /data/id_ed25519),如果其中一個密钥不存在,则会从环境变量或 Docker Secret 中重新生成它。 然后检查密钥对的可用性:如果公钥和私钥不匹配,容器将停止运行。 如果您未提供密钥,hbbs 将会在默认位置生成一个。
使用 ENV 存储密钥对
您可以使用 Docker 环境变量來存储密钥。如下:
XML/HTML代码
  1. docker run --name rustdesk-server \
  2.   --net=host \
  3.   -e "RELAY=rustdeskrelay.example.com" \
  4.   -e "ENCRYPTED_ONLY=1" \
  5.   -e "DB_URL=/db/db_v2.sqlite3" \
  6.   -e "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==" \
  7.   -e "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=" \
  8.   -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
XML/HTML代码
  1. version: '3'
  2.  
  3. services:
  4.   rustdesk-server:
  5.     container_name: rustdesk-server
  6.     ports:
  7.       - 21115:21115
  8.       - 21116:21116
  9.       - 21116:21116/udp
  10.       - 21117:21117
  11.       - 21118:21118
  12.       - 21119:21119
  13.     image: rustdesk/rustdesk-server-s6:latest
  14.     environment:
  15.       - "RELAY=rustdesk.example.com:21117"
  16.       - "ENCRYPTED_ONLY=1"
  17.       - "DB_URL=/db/db_v2.sqlite3"
  18.       - "KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ=="
  19.       - "KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE="
  20.     volumes:
  21.       - ./db:/db
  22.     restart: unless-stopped
使用 Docker Secret 来保存密钥对
您还可以使用 Docker Secret 来保存密钥。 如果您使用 docker-compose 或 docker swarm,推荐您使用。 只需按照以下示例操作:
XML/HTML代码
  1. cat secrets/id_ed25519.pub | docker secret create key_pub -
  2. cat secrets/id_ed25519 | docker secret create key_priv -
  3. docker service create --name rustdesk-server \
  4.   --secret key_priv --secret key_pub \
  5.   --net=host \
  6.   -e "RELAY=rustdeskrelay.example.com" \
  7.   -e "ENCRYPTED_ONLY=1" \
  8.   -e "DB_URL=/db/db_v2.sqlite3" \
  9.   --mount "type=bind,source=$PWD/db,destination=/db" \
  10.   rustdesk/rustdesk-server-s6:latest
XML/HTML代码
  1. version: '3'
  2.  
  3. services:
  4.   rustdesk-server:
  5.     container_name: rustdesk-server
  6.     ports:
  7.       - 21115:21115
  8.       - 21116:21116
  9.       - 21116:21116/udp
  10.       - 21117:21117
  11.       - 21118:21118
  12.       - 21119:21119
  13.     image: rustdesk/rustdesk-server-s6:latest
  14.     environment:
  15.       - "RELAY=rustdesk.example.com:21117"
  16.       - "ENCRYPTED_ONLY=1"
  17.       - "DB_URL=/db/db_v2.sqlite3"
  18.     volumes:
  19.       - ./db:/db
  20.     restart: unless-stopped
  21.     secrets:
  22.       - key_pub
  23.       - key_priv
  24.  
  25. secrets:
  26.   key_pub:
  27.     file: secrets/id_ed25519.pub
  28.   key_priv:
  29.     file: secrets/id_ed25519
如何生成密钥对
加密需要一对密钥;您可以按照前面所述提供它,但需要一个工具去生成密钥对。
您可以使用以下命令生成一对密钥:
XML/HTML代码
  1. /usr/bin/rustdesk-utils genkeypair
如果您沒有(或不想)在系统上安装 rustdesk-utils 套件,您可以使用 Docker 执行相同的命令:
XML/HTML代码
  1. docker run --rm --entrypoint /usr/bin/rustdesk-utils  rustdesk/rustdesk-server-s6:latest genkeypair
运行后的输出内容如下:
XML/HTML代码
  1. Public Key:  8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
  2. Secret Key:  egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
ENV 环境变量
可以使用这些环境变量参数來配置 hbbs 和 hbbr。 您可以像往常一样指定参数,或者使用 .env 文件。
XML/HTML代码
  1. 参数                   可执行文件   描述
  2. ALWAYS_USE_RELAY       hbbs     如果设定为 "Y",将关闭直接点对点连接功能
  3. DB_URL                 hbbs     数据库配置
  4. DOWNGRADE_START_CHECK  hbbr     降级检查之前的延迟是啊尽(以秒为单位)
  5. DOWNGRADE_THRESHOLD    hbbr     降级检查的阈值(bit/ms)
  6. KEY                    hbbs/hbbr 如果设置了此参数,将强制使用指定密钥对,如果设为 "_",则强制使用任意密钥
  7. LIMIT_SPEED            hbbr     速度限制(以Mb/s为单位)
  8. PORT                   hbbs/hbbr 监听端口(hbbs为21116,hbbr为21117)
  9. RELAY_SERVERS          hbbs     运行hbbr的机器的IP地址/DNS名称(用逗号分隔)
  10. RUST_LOG               all      设置 debug level (error|warn|info|debug|trace)
  11. SINGLE_BANDWIDTH       hbbr     单个连接的最大带宽(以Mb/s为单位)
  12. TOTAL_BANDWIDTH        hbbr     最大总带宽(以Mb/s为单位)
“环境”变量这里需要更改两个地方:
RELAY:我们准备好的NNDS域名:21117
ENCRYPTED_ONLY:1(意思是不接受未加密的连接)
客户端设置:
现在可以去https://github.com/rustdesk/rustdesk/releases下载对应的客户端,安装完毕后,需要去下载 hbbs 文件夹中的pub文件,(前面命令设置为 hbbr -k  的话,这里需要把 id_ed25519 和 id_ed25519.pub 文件拷贝到 hbbr 文件夹下)
在“网络”设置中:
ID服务器:【DDNS域名:21116】
中继服务器:【DDNS域名:21117】
Key:就是我们前面看到的“id_ed25519.pub”文件里面的字符
最后点“应用”按钮。
RustDesk API--web用户管理系统
RustDesk API:https://github.com/lejianwen/rustdesk-api
Dockerhub:https://hub.docker.com/r/lejianwen/rustdesk-api
后台访问地址是http://<your server>[:port]/_admin/初次安装管理员为用户名密码为admin admin,请即时更改密码
新版本已经使用随机密码,可以在log日志查看,第二行 Admin Password Is: 后面就是密码。
查看日志命令:
XML/HTML代码
  1. #查看全部日志
  2. docker logs rustdesk-api
  3. #查看前两行日志(密码就在第二行)
  4. docker logs rustdesk-api | head -n 2
Docker运行
直接docker运行,配置可以通过挂载配置文件/app/conf/config.yaml来修改,或者通过环境变量覆盖配置文件中的配置
XML/HTML代码
  1. docker run -d --name rustdesk-api -p 21114:21114 \
  2. -v /data/rustdesk/api:/app/data \
  3. -e TZ=Asia/Shanghai \
  4. -e RUSTDESK_API_LANG=zh-CN \
  5. -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
  6. -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
  7. -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
  8. -e RUSTDESK_API_RUSTDESK_KEY=<key> \
  9. lejianwen/rustdesk-api
XML/HTML代码
  1. services:
  2.    rustdesk-api:
  3.     container_name: rustdesk-api
  4.     environment:
  5.       - RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116
  6.       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117
  7.       - RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114
  8.       - RUSTDESK_API_RUSTDESK_KEY=<key>
  9.     ports:
  10.       - 21114:21114
  11.     image: lejianwen/rustdesk-api
  12.     volumes:
  13.       - /data/rustdesk/api:/app/data #将数据库挂载出来方便备份
  14.     networks:
  15.       - rustdesk-net
  16.     restart: unless-stopped
下载release直接运行:
下载地址:https://github.com/lejianwen/rustdesk-api/releases
RustDesk API配套RustDesk Server
XML/HTML代码
  1. networks:
  2.    rustdesk-net:
  3.      external: false
  4.  services:
  5.    rustdesk:
  6.      ports:
  7.        - 21114:21114
  8.        - 21115:21115
  9.        - 21116:21116
  10.        - 21116:21116/udp
  11.        - 21117:21117
  12.        - 21118:21118
  13.        - 21119:21119
  14.      image: lejianwen/rustdesk-server-s6:latest
  15.      environment:
  16.        - RELAY=<relay_server[:port]>
  17.        - ENCRYPTED_ONLY=1
  18.        - MUST_LOGIN=N
  19.        - TZ=Asia/Shanghai
  20.        - RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>
  21.        - RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
  22.        - RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
  23.        - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
  24.        - RUSTDESK_API_JWT_KEY=xxxxxx # jwt key
  25.      volumes:
  26.        - /data/rustdesk/server:/data
  27.        - /data/rustdesk/api:/app/data #将数据库挂载
  28.      networks:
  29.        - rustdesk-net
  30.      restart: unless-stopped
详细参数可以参考github说明。
编译客户端,实现自定义配置集成到客户端,不需要自己修改教程其他教程 教程
总结:搭建服务器必要的是hbbr hbbs-ID服务器和中继服务器,可以使用官方命令单独搭建两个服务器,也可以是用S6镜像直接搭建二合一更简单。rustdesk-api是API服务器,也就是带用户管理的web服务器,有了他可以直接客户端登录账号,同步用户信息管理机器,实现和官方服务器完全一样的效果,也就是相当于和todesk完全一样的效果。
以下是简单教程做一个示例,详细参数可以参考上面的说明:
1、生成密钥对
XML/HTML代码
  1. docker run --rm --entrypoint /usr/bin/rustdesk-utils  rustdesk/rustdesk-server-s6:latest genkeypair
回显(Public Key必须记住,客户端填写需要这个
XML/HTML代码
  1. Public Key:  bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=
  2. Secret Key:  UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==
2、基于 S6-overlay 镜像的密钥管理
XML/HTML代码
  1. docker run --name rustdesk-server \
  2.   --net=host \
  3.   --restart=always \
  4.   -e "RELAY=rustdeskrelay.example.com" \
  5.   -e "ENCRYPTED_ONLY=1" \
  6.   -e "DB_URL=/db/db_v2.sqlite3" \
  7.   -e "KEY_PRIV=UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==" \
  8.   -e "KEY_PUB=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=" \
  9.   -v "$PWD/db:/db" -d rustdesk/rustdesk-server-s6:latest
3、RustDesk API--web用户管理系统
XML/HTML代码
  1. docker run -d --name rustdesk-api \
  2. --net=host \
  3. --restart=always \
  4. -v $PWD/rustdesk/api:/app/data \
  5. -e TZ=Asia/Shanghai \
  6. -e RUSTDESK_API_LANG=zh-CN \
  7. -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
  8. -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
  9. -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
  10. -e RUSTDESK_API_RUSTDESK_KEY=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M= \
  11. lejianwen/rustdesk-api
4、查看后台密码,登陆后台
XML/HTML代码
  1. docker logs rustdesk-api | head -n 2
后台访问地址是http://192.168.1.66:21114/_admin/初次安装管理员为用户名为admin admin,密码为log日志第二行 Admin Password Is: 后面就是8位字符,请及时更改密码。
XML/HTML代码
  1. docker update --restart=always rustdesk-server
  2. docker update --restart=always  rustdesk-api
如果忘记设置容器开机自动启动,可以用上面命令更新容器即可。
多合一容器一键搞定:
XML/HTML代码
  1. docker run --rm --entrypoint /usr/bin/rustdesk-utils  lejianwen/rustdesk-api:full-s6 genkeypair
XML/HTML代码
  1. docker run --name rustdesk-server \
  2.   --net=host \
  3.   --restart=always \
  4.   -e "RELAY=rustdeskrelay.example.com" \
  5.   -e "ENCRYPTED_ONLY=0" \
  6.   -e "DB_URL=/db/db_v2.sqlite3" \
  7.   -e TZ=Asia/Shanghai \
  8.   -e RUSTDESK_API_LANG=zh-CN \
  9.   -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
  10.   -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
  11.   -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
  12.   -e "KEY_PRIV=UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==" \
  13.   -e "KEY_PUB=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=" \
  14.   -v "$PWD/db:/db" -d lejianwen/rustdesk-api:full-s6
上面容器具有hbbs+hbbr+web用户管理功能与一体,使用 --net=host 可以开启P2P连接功能,可以通过web直接远程服务器,非常方便,数据也可以方便备份,推荐使用。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):