忍受够了向日葵和ToDesk的付费服务,并且很多场景下没法优先控制。就使用了Rustdesk作为替代品。

Rustdesk官方提供了免费的中转服务器,唯一的问题是开源版不提供WEB界面和登录管理等功能。但是官方也不限制第三方的API管理。这也让预算有限的用户有了更多选择。

RustDesk客户端下载界面

https://github.com/rustdesk/rustdesk/releases

安装

官方开源版(无WEB界面)

这里贴一下官方的开源版教程,安装官方的开源服务端,仅仅进行中转链接,不支持web管理。推荐直接docker部署。同时官方也提供了system和deb包的安装。详细可以看一下官方的教程。

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

无论哪种安装方式,都要在防火墙侧放行如下端口

  • hbbs:

    • 21114 (TCP): 用于网页控制台,仅在 Pro 版本中可用。

    • 21115 (TCP): 用于 NAT 类型测试。

    • 21116 (TCP/UDP): 请注意 21116 应该同时为 TCP 和 UDP 启用。 21116/UDP 用于 ID 注册和心跳服务。21116/TCP 用于 TCP 打洞和连接服务。

    • 21118 (TCP): 用于支持网页客户端。

  • hbbr:

    • 21117 (TCP): 用于中继服务。

    • 21119 (TCP): 用于支持网页客户端。

如果您不需要网页客户端支持,可以禁用相应的端口 2111821119。(开源版不支持)

Docker compose部署

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

第三方API实现(有web面)

这里使用的是lejianwen实现的WEB-AP,下面是Github仓库,使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。RustDesk 是一个远程桌面软件,提供了自托管的解决方案。

https://github.com/lejianwen/rustdesk-api

这里直接使用其s6镜像,仓库在下面:

https://github.com/lejianwen/rustdesk-server


解决当客户端登录了Api账号时链接超时的问题

  • s6镜像添加了Api支持,Api开源地址 https://github.com/lejianwen/rustdesk-api

  • 是否必须登录才能链接, MUST_LOGIN 默认为 N,设置为 Y 则必须登录才能链接

  • RUSTDESK_API_JWT_KEY,设置后会通过JWT校验token的合法性

docker-compose

 networks:
   rustdesk-net:
     external: false
 services:
   rustdesk:
     ports:
       - 21114:21114 #web界面,反代本端口即可,为了安全起见,请在服务器防火墙禁用外部对于本端口的访问。
       - 21115:21115
       - 21116:21116
       - 21116:21116/udp 
       - 21117:21117
       - 21118:21118
       - 21119:21119
     image: lejianwen/rustdesk-server-s6:latest
     environment:
       - RELAY=<relay_server[:port]>
       - ENCRYPTED_ONLY=1
       - MUST_LOGIN=N
       - TZ=Asia/Shanghai
       - RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]> #格式为https://rustdesk.example.com:port形式
       - RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
       - RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
       - 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
       

使用

然后通过反代网址访问WEB界面即可。在客户端的ID中继服务器配置界面配置信息。这里我采用了绑定域名解析IP地址的方式,解析类型为A,便于更换服务器直接替换解析目标地址即可。

API服务器直接使用反代的21114端口的域名,如果绑定了SSL,需要添加https:// 前面。key需要在映射的/data 目录下找id_ed25519.pub 文件,用记事本打开,获取秘钥。即可完成