<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="RustDesk私服搭建教程">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2025-02-08 10:11<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
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代码


    架构       image:tag

    amd64     rustdesk/rustdesk-server:latest

    arm64v8   rustdesk/rustdesk-server:latest-arm64v8







您可以使用以下命令，直接通过 docker run 來启动这些镜像：




XML/HTML代码


    docker run --name hbbs --net=host -v &quot;$PWD/data:/root&quot; -d rustdesk/rustdesk-server:latest hbbs -r &lt;relay-server-ip[:port]&gt;

    docker run --name hbbr --net=host -v &quot;$PWD/data:/root&quot; -d rustdesk/rustdesk-server:latest hbbr







或不使用 --net=host 参数启动， 但这样 P2P 直连功能将无法工作。


对于使用了 SELinux 的系统，您需要将 /root 替换为 /root:z，以保证容器的正常运行。或者，也可以通过添加参数 --security-opt label=disable 来完全禁用 SELinux 容器隔离。




XML/HTML代码


    docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v &quot;$PWD/data:/root&quot; -d rustdesk/rustdesk-server:latest hbbs -r &lt;relay-server-ip[:port]&gt;

    docker run --name hbbr -p 21117:21117 -p 21119:21119 -v &quot;$PWD/data:/root&quot; -d rustdesk/rustdesk-server:latest hbbr







relay-server-ip 参数是运行这些容器的服务器的 IP 地址（或 DNS 名称）。如果你不想使用 21117 作为 hbbr 的服务端口,可使用可选参数 port 进行指定。


您也可以使用 docker-compose 进行构建,以下为配置示例：




XML/HTML代码


    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 rustdesk.example.com:21117

        volumes:

          - ./data:/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:

          - ./data:/root

        networks:

          - rustdesk-net

        restart: unless-stopped







编辑第16行来指定你的中继服务器 （默认端口监听在 21117 的那一个）。 如果需要的话，您也可以编辑 volume 信息 (第 18 和 33 行)。


基于 S6-overlay 的镜像（二合一）


这些镜像是针对 busybox:stable 构建的，并添加了可执行程序（hbbr 和 hbbs）以及 S6-overlay。 它们可以使用以下tag在 Docker hub 上获取：




XML/HTML代码


    构架         version image:tag

    multiarch   latest  rustdesk/rustdesk-server-s6:latest

    amd64       latest  rustdesk/rustdesk-server-s6:latest-amd64

    i386        latest  rustdesk/rustdesk-server-s6:latest-i386

    arm64v8     latest  rustdesk/rustdesk-server-s6:latest-arm64v8

    armv7       latest  rustdesk/rustdesk-server-s6:latest-armv7

    multiarch   2       rustdesk/rustdesk-server-s6:2

    amd64       2       rustdesk/rustdesk-server-s6:2-amd64

    i386        2       rustdesk/rustdesk-server-s6:2-i386

    arm64v8     2       rustdesk/rustdesk-server-s6:2-arm64v8

    armv7       2       rustdesk/rustdesk-server-s6:2-armv7

    multiarch   2.0.0   rustdesk/rustdesk-server-s6:2.0.0

    amd64       2.0.0   rustdesk/rustdesk-server-s6:2.0.0-amd64

    i386        2.0.0   rustdesk/rustdesk-server-s6:2.0.0-i386

    arm64v8     2.0.0   rustdesk/rustdesk-server-s6:2.0.0-arm64v8

    armv7       2.0.0   rustdesk/rustdesk-server-s6:2.0.0-armv7







强烈建议您使用major version 或 latest tag 的 multiarch 架构的镜像。


S6-overlay 在此处作为监控程序，用以保证两个进程的运行，因此使用此镜像，您无需运行两个容器。


您可以使用 docker run 命令直接启动镜像，如下：




XML/HTML代码


    docker run --name rustdesk-server \

      --net=host \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=1&quot; \

      -v &quot;$PWD/data:/data&quot; -d rustdesk/rustdesk-server-s6:latest







或刪去 --net=host 参数， 但 P2P 直连功能将无法工作。


XML/HTML代码


    docker run --name rustdesk-server \

      -p 21115:21115 -p 21116:21116 -p 21116:21116/udp \

      -p 21117:21117 -p 21118:21118 -p 21119:21119 \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=1&quot; \

      -v &quot;$PWD/data:/data&quot; -d rustdesk/rustdesk-server-s6:latest





或着您也可以使用 docker-compose 文件:




XML/HTML代码


    version: '3'

     

    services:

      rustdesk-server:

        container_name: rustdesk-server

        ports:

          - 21115:21115

          - 21116:21116

          - 21116:21116/udp

          - 21117:21117

          - 21118:21118

          - 21119:21119

        image: rustdesk/rustdesk-server-s6:latest

        environment:

          - &quot;RELAY=rustdesk.example.com:21117&quot;

          - &quot;ENCRYPTED_ONLY=1&quot;

        volumes:

          - ./data:/data

        restart: unless-stopped







对于此容器镜像，除了在下面的环境变量部分指定的变量之外，您还可以使用以下环境变量




XML/HTML代码


    环境变量       是否可选    描述

    RELAY           否       运行此容器的宿主机的 IP 地址/ DNS 名称

    ENCRYPTED_ONLY  是       如果设置为 &quot;1&quot;，将不接受未加密的连接。

    KEY_PUB         是       密钥对中的公钥（Public Key）

    KEY_PRIV        是       密钥对中的私钥（Private Key）







基于 S6-overlay 镜像的密钥管理


您可以将密钥对保存在 Docker volume 中，但我们建议不要将密钥写入文件系統中；因此，我们提供了一些方案。


在容器启动时，会检查密钥对是否存在（/data/id_ed25519.pub 和 /data/id_ed25519），如果其中一個密钥不存在，则会从环境变量或 Docker Secret 中重新生成它。 然后检查密钥对的可用性：如果公钥和私钥不匹配，容器将停止运行。 如果您未提供密钥，hbbs 将会在默认位置生成一个。


使用 ENV 存储密钥对


您可以使用 Docker 环境变量來存储密钥。如下：




XML/HTML代码


    docker run --name rustdesk-server \

      --net=host \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=1&quot; \

      -e &quot;DB_URL=/db/db_v2.sqlite3&quot; \

      -e &quot;KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==&quot; \

      -e &quot;KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=&quot; \

      -v &quot;$PWD/db:/db&quot; -d rustdesk/rustdesk-server-s6:latest









XML/HTML代码


    version: '3'

     

    services:

      rustdesk-server:

        container_name: rustdesk-server

        ports:

          - 21115:21115

          - 21116:21116

          - 21116:21116/udp

          - 21117:21117

          - 21118:21118

          - 21119:21119

        image: rustdesk/rustdesk-server-s6:latest

        environment:

          - &quot;RELAY=rustdesk.example.com:21117&quot;

          - &quot;ENCRYPTED_ONLY=1&quot;

          - &quot;DB_URL=/db/db_v2.sqlite3&quot;

          - &quot;KEY_PRIV=FR2j78IxfwJNR+HjLluQ2Nh7eEryEeIZCwiQDPVe+PaITKyShphHAsPLn7So0OqRs92nGvSRdFJnE2MSyrKTIQ==&quot;

          - &quot;KEY_PUB=iEyskoaYRwLDy5+0qNDqkbPdpxr0kXRSZxNjEsqykyE=&quot;

        volumes:

          - ./db:/db

        restart: unless-stopped







使用 Docker Secret 来保存密钥对


您还可以使用 Docker Secret 来保存密钥。 如果您使用 docker-compose 或 docker swarm，推荐您使用。 只需按照以下示例操作：




XML/HTML代码


    cat secrets/id_ed25519.pub | docker secret create key_pub -

    cat secrets/id_ed25519 | docker secret create key_priv -

    docker service create --name rustdesk-server \

      --secret key_priv --secret key_pub \

      --net=host \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=1&quot; \

      -e &quot;DB_URL=/db/db_v2.sqlite3&quot; \

      --mount &quot;type=bind,source=$PWD/db,destination=/db&quot; \

      rustdesk/rustdesk-server-s6:latest









XML/HTML代码


    version: '3'

     

    services:

      rustdesk-server:

        container_name: rustdesk-server

        ports:

          - 21115:21115

          - 21116:21116

          - 21116:21116/udp

          - 21117:21117

          - 21118:21118

          - 21119:21119

        image: rustdesk/rustdesk-server-s6:latest

        environment:

          - &quot;RELAY=rustdesk.example.com:21117&quot;

          - &quot;ENCRYPTED_ONLY=1&quot;

          - &quot;DB_URL=/db/db_v2.sqlite3&quot;

        volumes:

          - ./db:/db

        restart: unless-stopped

        secrets:

          - key_pub

          - key_priv

     

    secrets:

      key_pub:

        file: secrets/id_ed25519.pub

      key_priv:

        file: secrets/id_ed25519







如何生成密钥对


加密需要一对密钥；您可以按照前面所述提供它，但需要一个工具去生成密钥对。


您可以使用以下命令生成一对密钥：




XML/HTML代码


    /usr/bin/rustdesk-utils genkeypair




如果您沒有（或不想）在系统上安装 rustdesk-utils 套件，您可以使用 Docker 执行相同的命令：




XML/HTML代码


    docker run --rm --entrypoint /usr/bin/rustdesk-utils  rustdesk/rustdesk-server-s6:latest genkeypair







运行后的输出内容如下：




XML/HTML代码


    Public Key:  8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=

    Secret Key:  egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==







ENV 环境变量


可以使用这些环境变量参数來配置 hbbs 和 hbbr。 您可以像往常一样指定参数，或者使用 .env 文件。




XML/HTML代码


    参数                   可执行文件   描述

    ALWAYS_USE_RELAY       hbbs     如果设定为 &quot;Y&quot;，将关闭直接点对点连接功能

    DB_URL                 hbbs     数据库配置

    DOWNGRADE_START_CHECK  hbbr     降级检查之前的延迟是啊尽（以秒为单位）

    DOWNGRADE_THRESHOLD    hbbr     降级检查的阈值（bit/ms）

    KEY                    hbbs/hbbr 如果设置了此参数，将强制使用指定密钥对，如果设为 &quot;_&quot;，则强制使用任意密钥

    LIMIT_SPEED            hbbr     速度限制（以Mb/s为单位）

    PORT                   hbbs/hbbr 监听端口（hbbs为21116，hbbr为21117）

    RELAY_SERVERS          hbbs     运行hbbr的机器的IP地址/DNS名称（用逗号分隔）

    RUST_LOG               all      设置 debug level (error|warn|info|debug|trace)

    SINGLE_BANDWIDTH       hbbr     单个连接的最大带宽（以Mb/s为单位）

    TOTAL_BANDWIDTH        hbbr     最大总带宽（以Mb/s为单位）







&ldquo;环境&rdquo;变量这里需要更改两个地方：


RELAY：我们准备好的NNDS域名:21117


ENCRYPTED_ONLY:1(意思是不接受未加密的连接)


客户端设置：


现在可以去https://github.com/rustdesk/rustdesk/releases下载对应的客户端，安装完毕后，需要去下载 hbbs 文件夹中的pub文件，（前面命令设置为 hbbr -k  的话，这里需要把 id_ed25519 和 id_ed25519.pub 文件拷贝到 hbbr 文件夹下）


在&ldquo;网络&rdquo;设置中：


ID服务器：【DDNS域名:21116】


中继服务器：【DDNS域名:21117】


Key：就是我们前面看到的&ldquo;id_ed25519.pub&rdquo;文件里面的字符


最后点&ldquo;应用&rdquo;按钮。


RustDesk API--web用户管理系统


RustDesk API：https://github.com/lejianwen/rustdesk-api


Dockerhub：https://hub.docker.com/r/lejianwen/rustdesk-api


后台访问地址是http://&lt;your server&gt;[:port]/_admin/初次安装管理员为用户名密码为admin admin，请即时更改密码


新版本已经使用随机密码，可以在log日志查看，第二行 Admin Password Is: 后面就是密码。


查看日志命令：




XML/HTML代码


    #查看全部日志

    docker logs rustdesk-api

    #查看前两行日志(密码就在第二行)

    docker logs rustdesk-api | head -n 2







Docker运行


直接docker运行,配置可以通过挂载配置文件/app/conf/config.yaml来修改,或者通过环境变量覆盖配置文件中的配置




XML/HTML代码


    docker run -d --name rustdesk-api -p 21114:21114 \

    -v /data/rustdesk/api:/app/data \

    -e TZ=Asia/Shanghai \

    -e RUSTDESK_API_LANG=zh-CN \

    -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \

    -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \

    -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \

    -e RUSTDESK_API_RUSTDESK_KEY=&lt;key&gt; \

    lejianwen/rustdesk-api









XML/HTML代码


    services:

       rustdesk-api:

        container_name: rustdesk-api

        environment:

          - RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116

          - RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117

          - RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114

          - RUSTDESK_API_RUSTDESK_KEY=&lt;key&gt;

        ports:

          - 21114:21114

        image: lejianwen/rustdesk-api

        volumes:

          - /data/rustdesk/api:/app/data #将数据库挂载出来方便备份

        networks:

          - rustdesk-net

        restart: unless-stopped







下载release直接运行：


下载地址：https://github.com/lejianwen/rustdesk-api/releases


RustDesk API配套RustDesk Server




XML/HTML代码


    networks:

       rustdesk-net:

         external: false

     services:

       rustdesk:

         ports:

           - 21114:21114

           - 21115:21115

           - 21116:21116

           - 21116:21116/udp

           - 21117:21117

           - 21118:21118

           - 21119:21119

         image: lejianwen/rustdesk-server-s6:latest

         environment:

           - RELAY=&lt;relay_server[:port]&gt;

           - ENCRYPTED_ONLY=1

           - MUST_LOGIN=N

           - TZ=Asia/Shanghai

           - RUSTDESK_API_RUSTDESK_ID_SERVER=&lt;id_server[:21116]&gt;

           - RUSTDESK_API_RUSTDESK_RELAY_SERVER=&lt;relay_server[:21117]&gt;

           - RUSTDESK_API_RUSTDESK_API_SERVER=http://&lt;api_server[:21114]&gt;

           - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub

           - RUSTDESK_API_JWT_KEY=xxxxxx # jwt key

         volumes:

           - /data/rustdesk/server:/data

           - /data/rustdesk/api:/app/data #将数据库挂载

         networks:

           - rustdesk-net

         restart: unless-stopped







详细参数可以参考github说明。


编译客户端，实现自定义配置集成到客户端，不需要自己修改教程。其他教程 教程  官方编译教程


总结：搭建服务器必要的是hbbr hbbs-ID服务器和中继服务器，可以使用官方命令单独搭建两个服务器，也可以是用S6镜像直接搭建二合一更简单。rustdesk-api是API服务器，也就是带用户管理的web服务器，有了他可以直接客户端登录账号，同步用户信息管理机器，实现和官方服务器完全一样的效果，也就是相当于和todesk完全一样的效果。


以下是简单教程做一个示例，详细参数可以参考上面的说明：


1、生成密钥对




XML/HTML代码


    docker run --rm --entrypoint /usr/bin/rustdesk-utils  rustdesk/rustdesk-server-s6:latest genkeypair




回显（Public Key必须记住，客户端填写需要这个）




XML/HTML代码


    Public Key:  bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=

    Secret Key:  UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==




2、基于 S6-overlay 镜像的密钥管理




XML/HTML代码


    docker run --name rustdesk-server \

      --net=host \

      --restart=always \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=1&quot; \

      -e &quot;DB_URL=/db/db_v2.sqlite3&quot; \

      -e &quot;KEY_PRIV=UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==&quot; \

      -e &quot;KEY_PUB=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=&quot; \

      -v &quot;$PWD/db:/db&quot; -d rustdesk/rustdesk-server-s6:latest




3、RustDesk API--web用户管理系统




XML/HTML代码


    docker run -d --name rustdesk-api \

    --net=host \

    --restart=always \

    -v $PWD/rustdesk/api:/app/data \

    -e TZ=Asia/Shanghai \

    -e RUSTDESK_API_LANG=zh-CN \

    -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \

    -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \

    -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \

    -e RUSTDESK_API_RUSTDESK_KEY=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M= \

    lejianwen/rustdesk-api




4、查看后台密码，登陆后台




XML/HTML代码


    docker logs rustdesk-api | head -n 2





后台访问地址是http://192.168.1.66:21114/_admin/初次安装管理员为用户名为admin admin，密码为log日志第二行 Admin Password Is: 后面就是8位字符，请及时更改密码。




XML/HTML代码


    docker update --restart=always rustdesk-server

    docker update --restart=always  rustdesk-api




如果忘记设置容器开机自动启动，可以用上面命令更新容器即可。


多合一容器一键搞定：




XML/HTML代码


    docker run --rm --entrypoint /usr/bin/rustdesk-utils  lejianwen/rustdesk-api:full-s6 genkeypair









XML/HTML代码


    docker run --name rustdesk-server \

      --net=host \

      --restart=always \

      -e &quot;RELAY=rustdeskrelay.example.com&quot; \

      -e &quot;ENCRYPTED_ONLY=0&quot; \

      -e &quot;DB_URL=/db/db_v2.sqlite3&quot; \

      -e TZ=Asia/Shanghai \

      -e RUSTDESK_API_LANG=zh-CN \

      -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \

      -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \

      -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \

      -e &quot;KEY_PRIV=UQCIx/Xrn074ZdJxE7BzBN4FksuY1IFNoUe8u1cDHc5slOHEk7q26jNhGn7x47BMoyC0KbrGYdq01oWVPeWb4w==&quot; \

      -e &quot;KEY_PUB=bJThxJO6tuozYRp+8eOwTKMgtCm6xmHatNaFlT3lm+M=&quot; \

      -v &quot;$PWD/db:/db&quot; -d lejianwen/rustdesk-api:full-s6




上面容器具有hbbs+hbbr+web用户管理功能与一体，使用 --net=host 可以开启P2P连接功能，可以通过web直接远程服务器，非常方便，数据也可以方便备份，推荐使用。


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
