Toggle
- RustDesk 介绍及架构
- 其它远程软件对比
- Kubernetes 安装RustDesk
- 客户端连接RustDesk测试
RustDesk 介绍及架构
RustDesk远程桌面软件,开箱即用,无需任何配置。您完全掌控数据,不用担心安全问题。您可以使用我们的注册/中继服务器, 或者自己设置, 亦或者开发您的版本。
- rustdesk-hbbs是RustDesk的注册/信令服务器,负责客户端的注册、身份验证和会话信息交换。
- rustdesk-hbbr是中继服务器,当客户端之间无法建立直接连接(P2P)时,它会作为数据中继,在两个客户端之间传输数据。
其它远程软件对比
| 对比维度 | RustDesk | ToDesk | 向日葵 |
|---|---|---|---|
| 核心定位 | 开源私有化部署,数据自主可控 | 兼顾个人与企业,主打低延迟流畅体验 | 大众向全场景,适配硬件辅助功能 |
| 连接性能 | 依赖自建服务器,P2P 连接快,速度可控 | 国内节点多,低延迟,游戏、设计等场景流畅 | 国内服务器稳定,免费版延迟中等,偶有连接不稳定情况 |
| 功能特点 | 基础远程控制、文件传输,无远程打印等高级功能;多屏需手动切换,远程唤醒需自行配置 | 支持 4K 高流畅显示、设备分组、批量管理,免费版不限速,功能贴合办公与轻娱乐 | 支持 4K 自动适配,提供开机棒等硬件,有远程打印、摄像头访问等功能,免费版功能限制多 |
| 安全性 | 开源透明,端到端加密,可自定义密钥;无强制账号登录,数据不经过第三方服务器 | 采用 AES - 256 加密,需账号绑定,数据经官方服务器,无公开严重漏洞 | 免费版广告多,需登录账号,数据经第三方服务器,曾有隐私争议和 RCE 漏洞(已修复) |
| 使用门槛 | 较高,自建服务器需运维技术,适合有技术基础的用户 | 低,开箱即用,免费版足够日常使用,企业版操作也较简单 | 低,界面友好,用户基数大,普通用户易上手 |
| 费用情况 | 免费版无功能限制,商业版仅针对企业级管理收费,自建服务器需承担服务器成本(后面文章会介绍如何使用RustDesk API来解决商业版功能) | 免费版不限速,专业版年费 118 元,企业版价格较高 | 免费版限速 300kbps、单文件传输受限,个人 Pro 版年费 198 元,企业版年费 3000 元起 |
| 适用场景 | 政府、金融等敏感数据场景,技术团队、需要私有化部署的企业 | 个人日常远程、企业批量设备管理,国内办公协作 | 个人临时远程、小型企业基础远程需求,依赖硬件辅助控制的场景 |
**rustdesk-hbbs(注册/信令服务器)**
- 功能: 主要负责处理客户端连接的注册和身份验证。
- 工作原理: 客户端启动后,会向 hbbs 注册身份。当一个客户端需要连接另一个客户端时,它们会通过 hbbs 来交换建立直接连接所需的信息,例如 IP 地址和端口。
- 比喻: 就像一个电话簿,帮助两个想要通话的人(客户端)找到对方。
**rustdesk-hbbr(中继服务器)**
- 功能: 在两个客户端之间中继数据。
- 工作原理: 当 hbbs 发现两个客户端无法直接建立点对点(P2P)连接时,它会指示两个客户端通过中继服务器进行通信。这时,数据会先发送到 hbbr,然后再转发给另一个客户端。
- 何时使用: 适用于 NAT 穿透失败的情况,例如客户端位于两个不同的防火墙后面。
比喻: 就像一个电话转接台,当两个人无法直接通话时,电话会先转接到转接台,由转接台将信息转达给对方。
Kubernetes 安装RustDesk
- Kubernetes版本v1.29.9
- RustDesk 版本1.4.3
- 存储卷使用StorageClass
- 还需要有公网IP、或者FRP服务器
> 所有的项目我均放在了tools命名空间下
创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rustdesk-data
namespace: tools
spec:
accessModes:
- ReadWriteOnce
storageClassName: dsm7-nfs-client
resources:
requests:
storage: 30Gi创建hbbs和hbbr Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: rustdesk-hbbs
namespace: tools
spec:
replicas: 1
selector:
matchLabels:
app: hbbs
template:
metadata:
labels:
app: hbbs
spec:
restartPolicy: Always
containers:
- name: hbbs
image: rustdesk/rustdesk-server:latest
command: ["hbbs"]
volumeMounts:
- name: rustdesk-data # 卷名称,需与下方volumes.name一致
mountPath: /root
ports:
- containerPort: 21115
- containerPort: 21116
- containerPort: 21116
protocol: UDP
- containerPort: 21118
# 新增volumes定义,关联PVC
volumes:
- name: rustdesk-data # 卷名称,与volumeMounts.name一致
persistentVolumeClaim:
claimName: rustdesk-data # 关联的PVC名称
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rustdesk-hbbr
namespace: tools
spec:
replicas: 1
selector:
matchLabels:
app: hbbr
template:
metadata:
labels:
app: hbbr
spec:
restartPolicy: Always
containers:
- name: hbbr
image: rustdesk/rustdesk-server:latest
command: ["hbbr"]
volumeMounts:
- name: rustdesk-data # 卷名称,需与下方volumes.name一致
mountPath: /root
ports:
- containerPort: 21117
- containerPort: 21119
# 新增volumes定义,关联PVC
volumes:
- name: rustdesk-data # 卷名称,与volumeMounts.name一致
persistentVolumeClaim:
claimName: rustdesk-data # 关联的PVC名称创建SVC
这里SVC我使用NodePort模式
apiVersion: v1
kind: Service
metadata:
name: rustdesk-hbbs-service
namespace: tools
spec:
selector:
app: hbbs
ports:
- name: port-21115
port: 21115
targetPort: 21115
- name: port-21116-tcp
port: 21116
targetPort: 21116
protocol: TCP
- name: port-21116-udp
port: 21116
targetPort: 21116
protocol: UDP
- name: port-21118
port: 21118
targetPort: 21118
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: rustdesk-hbbr-service
namespace: tools
spec:
selector:
app: hbbr
ports:
- name: port-21117
port: 21117
targetPort: 21117
- name: port-21119
port: 21119
targetPort: 21119
type: NodePort接下来可以检查下我们创建的应用信息
root@k8s-master-01:~/rustdesk# kubectl get svc,pod -n tools|grep rust
service/rustdesk-hbbr-service NodePort 10.96.2.252 <none> 21117:30409/TCP,21119:30602/TCP 29h
service/rustdesk-hbbs-service NodePort 10.96.0.66 <none> 21115:30449/TCP,21116:32421/TCP,21116:32421/UDP,21118:30911/TCP 29h
pod/rustdesk-hbbr-758547cbc7-cjbrc 1/1 Running 0 29h
pod/rustdesk-hbbs-659cb54c47-r862s 1/1 Running 0 29h端口参数说明
| 组件 | 端口 | 协议 | 作用 |
|---|---|---|---|
| hbbs | 21115 | TCP | 用于客户端与服务器之间的心跳检测和身份验证。客户端通过此端口注册到服务器,并保持连接状态。 |
| hbbs | 21116 | TCP/UDP | 用于TCP 打洞和连接建立。当 P2P 连接失败时,客户端会通过此端口与服务器进行中转通信。 |
| hbbs | 21116 | TCP/UDP | 用于UDP 打洞。客户端尝试通过 UDP 直接连接到另一台客户端,服务器在此过程中提供地址信息。 |
| hbbs | 21118 | TCP | 用于HTTP API。可以通过此端口获取服务器状态、在线设备列表等信息(可选,默认关闭)。 |
| hbbr | 21117 | TCP | 用于数据中继。当 P2P 连接失败时,客户端会通过此端口将数据转发到中继服务器,再由服务器转发到目标客户端。 |
| hbbr | 21119 | TCP | 用于中继服务器的管理接口(可选,默认关闭)。 |
此时实际上已经将上述端口映射到NodePort中,除了以上端口还需要到hbbs找到Key进行保存
root@k8s-master-01:~/rustdesk# kubectl logs -f -n tools rustdesk-hbbs-659cb54c47-r862s
#找到日志Key部分进行保存
客户端连接RustDesk测试
Windows客户端演示
下载地址https://github.com/rustdesk/rustdesk/releases/tag/1.4.3
正常安装后打开软件,需要进行配置,打开软件,点击右边设置

选择网络,配置ID/中继服务器

- ID服务器 hbbs地址内网端口21116,主机端口32421
- 中继服务器 hbbr地址内网端口21117,主机端口30409
- Key前面已经提示需要保留,填写进即可
接下来只需要将32421和30409 映射到公网即可,其它端口按需映射
> 如果没有公网IP,这里就需要配置FRP,将对应端口使用FRP映射到公网,此处不多介绍,有问题可以私聊我

按照下图配置即可
- Key 是前面保存的密钥

还需要设置访问密码


连接验证测试
> 只需要输入ID即可

连接时可以强制走中继线路

现在即连接成功

后续只需要保存ID即可
我这里提供软件包下载,可使用下放地址直接下载
https://esxi-dsm.frps.cn/s/8f98c0efe5d149fa81