基于frp的RustDesk部署教程,优秀的远程控制工具
0、初衷
平时使用远程桌面主要是向日葵,但在网络不太好时候总是延迟比较大、画面卡顿,并且支持设备数量有限、文件传输速度受限制,因此希望解决找到一款工具随时随地控制自有设备,解决延迟太大、画面卡顿问题,同时支持win系统、linux、安卓、IOS。幸运的是rustdesk就是这么一款可以私有化部署的远程工具,并且可以接入自己的公网ip,实现远程访问。
一、RustDesk API介绍
1.什么是 RustDesk?为什么选择自托管?
(1)RustDesk 是什么?
RustDesk 是一款远程桌面控制软件,支持 Windows、Linux等多种平台。与 向日葵、TeamViewer、AnyDesk 等商业软件类似,它提供远程控制、文件传输等功能,但更加轻量、开源,并允许用户自建服务器。
(2)为什么选择自托管?
- 数据隐私:所有远程连接数据经过自己的服务器,避免第三方窥探。
- 性能优化:自建服务器可以选择合适的机房,优化网络延迟和带宽。
- 不受限制:自托管版本没有连接时间或设备数量的限制。
- 定制化强:可根据需要调整服务器配置和中继策略。
(3)rustdesk原理
rustdesk有两个服务,hbbs负责验证签名,hbbr负责转发远程控制产生的数据包。
RustDesk 会先用 TCP 21116 信令服务 NAT 打洞,如果打洞成功,直接 P2P 直连,RustDesk 不参与中继。RustDesk 如果没有打洞成功,则走 TCP 21117 中继服务,延迟、画质取决于中继服务器的带宽。
2.RustDesk API项目
RustDesk API项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。RustDesk是一个远程桌面软件,提供了自托管的解决方案,官方API是收费的,这次咱们用到的是Github开源的第三方API源码。
✅特性
- PC端API
- 支持
github,google和OIDC登录, - 支持
web后台授权登录 - 支持
LDAP(AD和OpenLDAP已测试), 如果API Server配置了LDAP - 个人版API
- 登录
- 地址簿
- 群组
- 授权登录
- i18n
- 支持
- Web Admin
- 用户管理
- 设备管理
- 地址簿管理
- 标签管理
- 群组管理
- Oauth 管理
- 配置LDAP, 配置文件或者环境变量
- 登录日志
- 链接日志
- 文件传输日志
- 快速使用web client
- i18n
- 通过 web client 分享给游客
- server控制
- Web Client
- 自动获取API server
- 自动获取ID服务器和KEY
- 自动获取地址簿
- 游客通过临时分享链接直接远程到设备
- v2 Preview
- CLI
- 重置管理员密码
二、rustdesk本地部署和远程端口映射
0、整体思路
本地搭建rustdesk,然后将本地rustdesk端口映射到公网服务器,实现通过域名远程访问rustdesk,解决rustdesk只能在局域网访问问题。
搭建前提条件,需要熟悉一下技术或具备以下资源:
frp
docker compose
iptables,用于配置ip白名单
公网服务器
绑定公网ip的域名
1、rustdesk本地docker compose部署
开源项目地址:github.com/lejianwen/r…
因为需要使用将rustdesk本地端口映射到公网,通过域名进行访问,因此需要配置自己的域名和端口,配置时候注意看清楚
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=反代21117的域名:端口
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N # 是否必须登录才能远程
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=反代21116的域名:端口
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=反代21117的域名:端口
- RUSTDESK_API_RUSTDESK_API_SERVER=反代21114的域名:端口
- RUSTDESK_API_RUSTDESK_WS_HOST=反代21114的域名:端口
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY= # jwt 为空不启用
- RUSTDESK_API_JWT_EXPIRE_DURATION= # jwt 为空不启用
volumes:
- ./data/rustdesk/server:/data
- ./data/rustdesk/api:/app/data #将数据库挂载
networks:
- rustdesk-net
restart: unless-stopped
本地实际docker-compose.yml配置:
networks:
rustdesk-net:
driver: bridge
services:
rustdesk:
image: lejianwen/rustdesk-server-s6:latest
ports:
- "23114:21114"
- "23115:21115"
- "23116:21116"
- "23116:21116/udp"
- "23117:21117"
- "23118:21118"
- "23119:21119"
environment:
- RELAY=https://域名或ip地址:27142
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=https://域名或ip地址:27141
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=https://域名或ip地址:27142
- RUSTDESK_API_RUSTDESK_API_SERVER=https://域名或ip地址:27140
- RUSTDESK_API_RUSTDESK_WS_HOST=https://域名或ip地址:27140
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY= # jwt 为空不启用
- RUSTDESK_API_JWT_EXPIRE_DURATION= # jwt 为空不启用
volumes:
- ./data:/data
- ./data:/app/data
networks:
- rustdesk-net
restart: unless-stopped
启动容器:
docker compose up
**password:**注意看管理员密码,后面要用:
**key:**此外注意看日志中的key,后面也要用到。key也可以在data/id_ed25519.pub中查看
2、frp端口映射到公网
注意frps.ini配置中一定要配置bind_udp_port的端口,我在这里浪费了很长时间。刚开始frpc.ini中虽然配置了21116端口的tcp和udp映射,但是没配置bind_udp_port,在访问时网络死活不通,最后排查出来需要配置这个参数
客户端frpc.ini中需配置rustdesk21114、21116、211117、21118端口的映射,由于我使用docker启动时端口映射关系为:
- "23114:21114"
- "23115:21115"
- "23116:21116"
- "23116:21116/udp"
- "23117:21117"
- "23118:21118"
- "23119:21119"
因此,我需要将23114/23116/23117/23118j端口进行映射,同时23116端口要进行tcp和udp映射
上面所提到的端口公网服务器的防火墙都要开通(有几个墙开几个墙,比如云服务器服务商提供的安全组策略,以及服务器主机上的防火墙策略),尤其不能忘了udp端口也要开通
完成上面设置之后,已经将本地rustdesk映射到公网,可以正常访问rustdesk服务了。
3、安全加固
将本地端口直接开放到公网存在安全隐患,因此可以使用iptables设置特定地域或ip白名单访问,在此不再细述。
建议:先做好安全加固再在公网使用,否则只建议局域网使用,数据安全不可掉以轻心
三、win、linux、安卓、ios客户端安装与使用
1.平台访问
(1)登陆管理后台,修改admin密码
访问rustdesk本地服务的http://ip:21114(或http://域名:27140)访问管理后台。用户名admin,密码为上面rustdesk启动时日志中的密码,登陆之后可以修改下密码
(2)创建用户
登陆admin账户之后,在系统-用户管理中创建用户,然后重置密码。然后使用http://ip:21114(或http://域名:27140)登陆管理后台,可以查看自己账户的配置。
2.客户端安装
win、linux、安卓的客户端下载地址为:github.com/rustdesk/ru…
以win系统为例,安装客户端启动后需要安装服务:
开始设置:
根据自己的上面的实际映射端口进行配置,key为rustdesk启动时日志中显示的key
如果局域网则配置为:
ID服务器:ip:21116
中继服务器:ip:21117
API服务器:http://ip:21114
key:日志中的key
公网配置如下图:
配置之后,如下图为正常状态:
最佳配置:
客户端中用户登陆:登陆刚才创建的用户名、密码。可以将本地机器添加到地址簿中,这样登陆同一个账户的客户端之间就可以相互访问了
3.安卓手机安装
由于rustdesk被诈骗分子使用过,安卓手机再github.com/rustdesk/ru…
4.ubuntu安装
安装时遇到如下问题:
解决办法:
sudo apt --fix-broken install
sudo apt update sudo apt install libxdo3 libva2 libva-drm2 libva-x11-2 gstreamer1.0-pipewire
四、联系我
本人算法工程师,专注于人工智能技术研究和项目落地,目前主要聚焦大语言模型、多模态模型、检索增强、智能话术等领域研究。欢迎交流学习,欢迎商务合作,微信号littlesnail_slf。如需远程协助部署,请联系我