环境:
Nginx v1.27.4
Ubuntu v22.04.5 LTS
Docker version 26.1.3
Rustdesk Server OSS v1.1.14
Rustdesk windows exe 客户端 v1.2.7 /v1.3.8 / v1.4.2 /v1.4.3


更新:2025-10-28

由于官方服务端、客户端更新频繁,已知问题:使用自建 API 服务器登录 + 自建中继服务器 这种搭配,会出现连接缓慢、超时报错 Failed to secure tcp......
最简单有效的解决方法,任意远程的发起方不要在 RUstdesk 客户端登录 API 服务器账户,被控端可以登录账户没事,远控发起方不能登录 API 账户,即可秒连无异常
并且官方上游项目可能很长一段时间不会修复这个问题,因为开源版是没有 API 服务器功能的,遇不到这个问题,只能自己重新编译客户端,而且还有多个不同平台系统客户端都要编译

即使编译成功正常使用,这也只是临时 workaround,而非长期稳定解决方案,在未来的上游更新版本中也可能失效,参考下面的这些讨论
https://github.com/lejianwen/rustdesk-api/issues?q=Failed%20to%20secure%20tcp
https://github.com/lejianwen/rustdesk-api/issues/92

上面的方法在不同的客户端版本、服务端版本上会有不同表现:失效不可用、特定版本可用,服务端客户端严格版本匹配才可以等复杂条件,我也基本遇到过来,最后发现放弃 API 服务器不登录,仅单纯使用自建服务器,就没任何 BUG 了

目前推荐方案:暂时不使用 登录 API 服务器方案,纯粹使用 自建服务器方案,稳定秒连,就是失去 API 服务器相关功能
或者使用其他大佬开发的完整实现方案,如方案 2:https://github.com/lejianwen/rustdesk-api,但是也是无法单方面解决,需要使用大佬 hook 修改过的自定义客户端,需要时不时同步上游的更改,无法直接使用官方客户端


前面的文章 https://www.0z.gs/memo/rustdesk.html 提到了官方的 API 服务是需要付费订阅计划才可以
并且有且只有年付计划,9.9 美元 * 12 = 118.8 美元,按照此时此刻汇率 7.2634 计算,一年得花 862.8919 元
并且由于服务器在国外,面临一些网络风险,国际出口拥堵、被墙、线路质量、UDP 封锁等等不可抗拒因素

所以当然是自力更生,看看有没有第三方的开源项目,这里以之前提到的这个项目为例,部署一个自用

一些第三方 Rustdesk API Server GitHub 项目地址
https://github.com/lantongxue/rustdesk-api-server-pro
https://github.com/lejianwen/rustdesk-api
https://github.com/kingmo888/rustdesk-api-server

强烈推荐使用第 2 个项目,基本完整的 API 实现 + web 客户端 + 解决了使用API链接超时问题 ,我这里使用的是第 1 个,因为没使用高级功能

在 readme 文档的基础上修改了一下

这里使用 docker 方案部署

  1. 创建配置文件,并根据自己的需要修改自定义内容,主要是配置文件路径、签名密钥 signKey、 api 端口 port,如果不要自动化注册收发验证邮件、修改密码,smtpConfig 这个邮局配置弄不弄无所谓,

     cat > /example/opt/server.yaml <<EOF
     signKey: "HtsglnQeimfgAmnwDOAXkDBLimHjoNkI" # 这里填写 32 位长度的随机字符作为签名密钥
     debugMode: true
     db:
       driver: "sqlite"
       dsn: "./server.db"
       timeZone: "Asia/Shanghai" # 设置时区
       showSql: false
    
     httpConfig:
       printRequestLog: true
       port: "127.0.0.1:1111" # 自定义 API 后端的端口,这里不直接对公网暴露端口,端口随便写,而是使用反向代理统一管理公网暴露的端口
    
     smtpConfig:
       host: "127.0.0.1"
       port: 587
       username: "admin@example.com" 
       password: "example"
       encryption: "tls" # 不需要加密则填写 none,如果是 ssl 加密则为 ssl,这里我使用了 tls
       from: "example@example.com"
    
     jobsConfig:
       deviceCheckJob:
         duration: 30
     EOF
    
  2. 运行容器,这里修改下,因为我按文档没走通,发现如果使用桥接模式自定义映射端口,一直无法访问容器内的端口,折腾很久一直没法解决这个问题,只能简单粗暴一把梭,直接指定 host 模式,就可以访问容器内的端口了,这里自己指定 -v 参数后面的宿主机配置文件路径,就是第一步创建的那个配置文件路径
    另外,自己修改里面的创建的管理员用户名和密码 ADMIN_USERADMIN_PASS
    这里特别说明一下,无论是通过环境变量设置/或者 CLI 创建的第一个管理员,是无法通过前端 UI 或者 CLI 命令行删除的,且第一个管理员也无法修改用户名,只能删除容器重新部署才能删除首次创建的管理员账户,所以用户名不要乱设置(不过重新部署也不是很麻烦),等待开发者后续更新删除接口,或者自己去修改 sqlite 格式的 server.db 数据库文件,改用户名信息

请输入图片描述
请输入图片描述

    docker run \
    --name rustdesk-api-server-pro \
    --network host \
    -d \
    -e ADMIN_USER=admin \
    -e ADMIN_PASS=admin \
    -e TZ=Asia/Shanghai \
    -v /example/opt/server.yaml:/app/server.yaml \
    ghcr.io/lantongxue/rustdesk-api-server-pro:latest

也可以不在 docker 命令行设置环境变量设置管理员信息,容器运行后使用提供的 CLI 增加管理员

docker exec -it rustdesk-api-server-pro sh

进入容器内部后执行命令,exampleUsername 为用户名,examplePassword 为密码,--admin 参数表示该用户权限为管理员

./rustdesk-api-server-pro user add exampleUsername examplePassword --admin

启动后,我们再使用 Nginx 反向代理管理对公网开放的端口、SSL 证书
这里以 Nginx v1.27.4 为例,进行反向代理
参考配置如下

    #PROXY-START /api for rustdesk client
    location ^~ /api
    {
        proxy_pass http://127.0.0.1:1111;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        # proxy_hide_header Upgrade;

        add_header X-Cache $upstream_cache_status;
    }
    #PROXY-END/

    #PROXY-START /admin for web-ui
    location ^~ /admin
    {
        proxy_pass http://127.0.0.1:1111/admin;
        proxy_set_header Host 127.0.0.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        # proxy_hide_header Upgrade;

        add_header X-Cache $upstream_cache_status;
    }
    #PROXY-END/

然后复制容器里面的已构建好的前端 UI 到宿主机的 Nginx 反向代理的目录,自行修改宿主机的实际反向代理目录路径

docker cp rustdesk-api-server-pro:/app/dist /usr/share/nginx/html

如果此时容器内的服务跑起来,却没有连通,请检查下相关服务状态详情和日志
日志路径

ls /var/log/rustdesk/
relayserver.error  relayserver.log  signalserver.error  signalserver.log

主要是 relayserver.logsignalserver.log 2 个文件

相关服务状态
systemctl status rustdeskrelay -l
systemctl status rustdesksignal -l

  • rustdesk 客户端如何填写
    rustdesk 客户端 → 设置 → 网络 → API 服务器,填写你的 API 后端域名/IP,因为已经反向代理了,所以无需填写端口
    https://rustdeskapi.example.com
    ID 和 中继服务器对于单服务器部署而言,都是同一个意思,可以只填写 ID 服务器,中继服务器为空会默认使用 ID 服务器的值

但这里我踩了个 BUG,有空可以提个 issue 给项目上游
在 Windows 7 下,rustdesk 客户端无法使用 https 加密的 API 后端,会在账户界面点击登录按钮后,还没输入时直接触发闪退,应该是 Windwos 7 缺少了一些 Win10 + 新增的 Windows API 导出函数,所以直接闪退了
使用 VxKex 项目来扩展 Windows 7 的系统函数解决这个问题

Win 7 API extensions
https://www.alipan.com/s/wsrsZj7HbLD
提取码 fj08

安装之后,对 Rustdesk 客户端右键,选择属性,选择 VxKex 标签页,启用如下选项

  • 选择为此程序启用 VxKex NEXT
  • 报告其他版本的 Windwos:Windows 10

如果创建了 rustdesk 快捷方式,可能需要对快捷方式再次设置一次 VxKex
设置之后可以保留 https 加密使用 API,如果不使用 vxkex,只能降级牺牲安全性,使用 http 明文通讯,改为
http://rustdeskapi.example.com

在 Windwos 10+ 的系统使用 https 的 API 后端无此问题

请输入图片描述

鸣谢

https://github.com/lantongxue/rustdesk-api-server-pro
https://github.com/rustdesk/rustdesk
最后修改:2025 年 10 月 31 日
如果觉得我的文章对你有用,请随意赞赏