docker自建rustdesk-server远程桌面

rustdesk简介

RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。
在这里插入图片描述

RustDesk 是一款功能齐全的远程桌面应用,具有以下特性:

  • 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。
  • 支持 VP8 / VP9 / AV1 软件编解码器和 H264 / H265 硬件编解码器。
  • 完全掌控数据,轻松自建。
  • P2P 连接,端到端加密。
  • 在 Windows 上可以非管理员不安装运行,根据需要在本地或远程提升权限。
  • 我们崇尚简单,尽一切可能让它简单。

官方网站:https://rustdesk.com/zh/

项目地址:https://github.com/rustdesk/rustdesk

RustDesk 架构

RustDesk 采用了经典的客户端-服务器模型,其中涉及三个主要组件:RustDesk 客户端、RustDesk 服务器和 ID Server。

  1. RustDesk 客户端:运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
  2. RustDesk 中继服务器(Relay Server):运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转
  3. ID 服务器(ID Server):运行在服务器上,用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。

在RustDesk的服务器端部署中,hbbrhbbs 是两个重要的组件,分别用于不同的功能:

  • hbbs - 代表 RustDesk ID / Rendezvous Server,RustDesk ID注册服务器,用于分配和注册ID;hbbs 是RustDesk的中介服务器(Broker Server),用于管理和协调客户端连接。它帮助客户端找到并建立P2P连接。hbbs 负责维护客户端的在线状态,并处理连接请求。当客户端A希望连接客户端B时,它会向hbbs发送请求,hbbs会帮助它们建立连接。
  • hbbr -代表 RustDesk Relay Server,RustDesk 中继服务器,如果P2P无法连接,会使用hbbr进行流量中继。hbbr 是RustDesk的中继服务器(Relay Server),用于在两台客户端之间进行连接中继。它允许无法直接建立P2P连接的客户端通过中继服务器进行通信。当客户端A和客户端B之间无法建立直接连接时,它们会通过hbbr中继服务器进行数据传输。
  • rustdesk-utils - RustDesk 命令行工具

P2P直连说明:

  • RustDesk 首先尝试建立直接 P2P 连接,如果 P2P 失败,将使用中继服务器。

  • 确认连接方式,首先连接到远程主机,可以将鼠标移动到工具栏图标(绿色图标),将显示它是直接连接还是通过中继服务器连接。

使用端口说明:

序号服务端口协议用途是否可选
1hbbs21114TCP用于 Web 控制台API,仅在专业版中可用可选
2hbbs21115TCPNAT类型测试必选
3hbbs21116TCP/UDPUDP用于ID注册和心跳服务,TCP用于TCP打洞和连接服务必选
4hbbr21117TCP用于Relay服务必选
5hbbs21118TCP用于支持Web客户端可选
6hbbr21119TCP用于支持Web客户端可选

部署rustdesk-server

rustdesk支持自行搭建属于你的RustDesk服务器,所有的一切都是免费且开源的。所谓自建服务器,也就是自建 ID Server 和 Relay Server。

整体部署架构如下:

在这里插入图片描述

官方文档:https://github.com/rustdesk/rustdesk-server/blob/master/README-ZH.md

前置部署要求

前置要求:

  • 准备一台公网linux服务器,并绑定公网IP地址,以阿里云轻量应用服务器为例,操作系统为Ubuntu 22.04。
  • 服务器已安装dockerdocker-compose工具

1、登录阿里云控制台,配置防火墙规则,开通以下端口
在这里插入图片描述

端口放通说明:

  • 放通TCP端口2111521116211172111822229
  • 放通UDP端口21116

2、登录阿里云控制台,配置域名解析(可选):

  • 配置一条A记录,将rustdesk-server公网IP地址解析到rustdesk.example.com域名(需自行准备域名并进行备案)。

在这里插入图片描述

部署rustdesk-server

配置主机名

hostnamectl set-hostname rustdesk-server

创建部署目录

mkdir -p /data/rustdesk/compose
cd /data/rustdesk/compose

创建docker-compose文件

root@rustdesk-server:/data/rustdesk/compose# vim docker-compose.yaml 
services:hbbs:container_name: hbbsimage: rustdesk/rustdesk-server:1.1.11command: hbbsenvironment:- "RELAY=hbbr:21117"- "ENCRYPTED_ONLY=1"ports:- 21115:21115- 21116:21116- 21116:21116/udp- 21118:21118volumes:- /data/rustdesk/root:/rootnetworks:- rustdesk-netdepends_on:- hbbrrestart: unless-stoppedhbbr:container_name: hbbrimage: rustdesk/rustdesk-server:1.1.11command: hbbrports:- 21117:21117- 21119:21119volumes:- /data/rustdesk/root:/rootnetworks:- rustdesk-netrestart: unless-stoppednetworks:rustdesk-net:external: false

主要参数说明:

  • 环境变量RELAY:指定hbbr 服务的地址和端口,由于使用同一个docker network,可以通过容器名称hbbr连接
  • 环境变量ENCRYPTED_ONLY:启用加密连接并使用key验证,防止其他获取地址的客户端非法连接

执行以下命令运行容器

root@rustdesk-server:/data/rustdesk/compose# docker-compose up -d
[+] Building 0.0s (0/0)                                                                                                                                                                   docker:default
[+] Running 3/3✔ Network compose_rustdesk-net  Created                                                                                                                                                            0.1s ✔ Container hbbr                Started                                                                                                                                                            0.1s ✔ Container hbbs                Started    

查看运行的两个容器hbbrhbbs

root@rustdesk-server:/data/rustdesk/compose# docker-compose ps
NAME         IMAGE                                   COMMAND                  SERVICE      CREATED          STATUS          PORTS
hbbr         rustdesk/rustdesk-server:1.1.11         "hbbr"                   hbbr         44 seconds ago   Up 43 seconds   0.0.0.0:21117->21117/tcp, :::21117->21117/tcp, 0.0.0.0:21119->21119/tcp, :::21119->21119/tcp
hbbs         rustdesk/rustdesk-server:1.1.11         "hbbs"                   hbbs         44 seconds ago   Up 42 seconds   0.0.0.0:21115-21116->21115-21116/tcp, :::21115-21116->21115-21116/tcp, 0.0.0.0:21118->21118/tcp, :::21118->21118/tcp, 0.0.0.0:21116->21116/udp, :::21116->21116/udp
root@rustdesk-server:/data/rustdesk/compose# 

查看主机当前目录结构

root@rustdesk-server:~# apt install -y tree
root@rustdesk-server:~# tree /data/rustdesk/
/data/rustdesk/
├── compose
│   └── docker-compose.yaml
└── root├── db_v2.sqlite3├── db_v2.sqlite3-shm├── db_v2.sqlite3-wal├── id_ed25519└── id_ed25519.pub2 directories, 6 files
root@rustdesk-server:~# 

连接验证

服务端搭建好后,在要连接的两个客户端设备上都下载 RustDesk 客户端。

下载地址是:https://github.com/rustdesk/rustdesk/releases

在rustdesk-server上获取默认生成的公钥key

root@rustdesk-server:~# cat /data/rustdesk/root/id_ed25519.pub 
G2yFoE+0pWWqXAHM174TXbsoUqJB1brHKOxZhEKv7hA=

首先找到 RustDesk 客户端的 设置 -> ID/中继服务器 ,然后输入如下三个信息

  • ID 服务器:rustdesk.example.com:21116,默认端口为21116时可以省略端口配置
  • 中级服务器:rustdesk.example.com:21117,默认端口为21117时可以省略端口配置
  • Key:填写部署服务默认生成的 id_ed25519.pub 文件中的内容

示例配置如下:
在这里插入图片描述
所有客户端必须都完成相应配置,配置完成后连接测试:

1、中继连接测试

连接成功后鼠标指针放在左上角绿色图标处,显示通过加密中继连接,说明两台机器位于不同网络,无法通过P2P直连,要经过阿里云rustdesk-server中继连接。
在这里插入图片描述
2、直连连接测试

如果位于同一网络的两台客户端互联,由于中间不存在NAT设备和防火墙,将显示两台客户端为加密直连,无需经过中继:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 04

上一篇实现了客户端与服务器的通信,这一篇继续实现相关功能 本章内容 服务器与数据库的连接通信格式的规范登录信息的验证 1.数据库的建立 这里连接的是Mysql8.0数据库,如果想要简单点可以直接用sqlite3数据库,调用逻辑基本差不多,数据库语法也基本一致。 在服务器工程里…

python需要掌握那些语法

1-list数据类型 内置方法查看长度len(list) 2.array数据类型 查看形状 3.tuple 取出元组 t (1, 2, 3, 4, 5) # 取出第一个元素 2first_element t[0] 3print(first_element) # 输出:1 4 5# 取出第三个元素 6third_element t[2] 7pr…

数据流通环节如何规避安全风险

由于参与数据流通与交易的数据要素资源通常是经过组织加工的高质量数据集,甚至可能涉及国家核心战略利益,一旦发生针对数据流通环节的恶意事件,将造成较大负面影响,对数据要素市场的价值激活造成潜在威胁。具体来说,数…

【面试题】Golang之互斥锁与读写锁(第七篇)

在Go语言(Golang)中,锁是用来实现并发控制的一种机制,它可以帮助多个goroutine安全地访问共享资源,防止数据竞争和条件竞争的发生。Go标准库提供了多种锁的实现,其中最常见和最基本的包括互斥锁&#xff08…

好用的接口文档swagger

本篇文章记录怎么给我们的后端项目整一个好用的接口文档 这个东西好像叫什么swagger吧 1. 依赖引入&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency>…

IP转接服务的重要性及其应用

在现今互联网高度发达的时代&#xff0c;IP转接服务的重要性日益凸显。对于家庭和企业而言&#xff0c;它不仅是连接互联网的桥梁&#xff0c;更是确保网络稳定、高效运行的关键。本文将深入探讨IP转接服务的核心意义及其在互联网世界中的应用。 IP转接服务&#xff0c;简而言之…

记录|C# winform布局学习

目录 前言一、自适应布局Step1. 添加AutoAdaptWindowsSize类Step2. Form中引用Step3. 创建SizeChanged事件函数Step4. 在Fram.Disiger中添加 更新时间 前言 参考视频&#xff1a; C#5分钟winform快速自适应布局 参考文章&#xff1a; 其他参考&#xff1a; 写这篇文章&#xff…

在 Java 中,怎样设计一个可扩展且易于维护的微服务架构?

在Java中设计一个可扩展且易于维护的微服务架构&#xff0c;可以考虑以下几个方面&#xff1a; 模块化设计&#xff1a;将应用拆分为多个小的、独立的模块&#xff0c;每个模块负责处理特定的业务逻辑。每个模块可以独立开发、测试和部署&#xff0c;增加或替换模块时不会影响其…

AI学习指南机器学习篇-t-分布领域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE)简介

AI学习指南机器学习篇-t-分布领域嵌入&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;简介 导言 在机器学习中&#xff0c;高维数据的降维和可视化一直是一个重要的问题。高维数据往往难以理解和分析&#xff0c;而且直接在高维空间中…

C#知识|账号管理系统-修改账号按钮功能的实现

哈喽,你好啊,我是雷工! 前边学习了通过选择条件查询账号的功能: 《提交查询按钮事件的编写》 本节继续学习练习C#,今天练习修改账号的功能实现。 以下为学习笔记。 01 实现功能 ①:从查询到的账号中,选择某一账号,然后点击【修改账号】按钮,将选中的信息获取显示到…

Java多线程-----线程安全问题(详解)

目录 &#x1f347;一.线程安全问题的引入&#xff1a; &#x1f352;二.线程安全问题产生的原因&#xff1a; &#x1f34c;三.如何解决线程安全问题&#xff1a; &#x1f389;1.synchronized关键字: &#x1f989;sychronized关键字的特性: ✨2.volatile关键字: &#…

橙芯创想:香橙派AIPRO解锁升腾LLM与Stable Diffusion的创意密码

文章目录 引言 一. 香橙派AI PRO配置以及展示优秀的扩展能力实物展示 二、Ascend-LLM模型部署开机xshell连接香橙派实战运行部署运行结果分析开发版表现 三、Stable Diffusion文生图性能表现 四、体验总结性能噪音便捷性 引言 在科技的浪潮中&#xff0c;一场融合智慧与创意的盛…

SpringBoot+Vue的图书销售网站(前后端分离)

技术栈 Java SpringBoot Maven MySQL mybatis Vue Shiro Element-UI 角色对应功能 网站用户 管理员 项目功能截图

C#中的线性表

什么是线性表 线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即:(1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数…

Kotlin协程最佳实践

使用合适的作用域&#xff1a; 避免使用GlobalScope&#xff0c;因为它的生命周期是整个应用程序&#xff0c;可能会导致内存泄漏。相反&#xff0c;使用与组件生命周期绑定的CoroutineScope&#xff0c;例如在Android中使用lifecycleScope。 管理协程的生命周期&#xff1a; …

代码随想录训练营【贪心算法篇】

贪心 注&#xff1a;本文代码来自于代码随想录 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 这个四步其实过于理论化了&#xff0c;我们平时在做贪心类的题目 很难去按照这四步…

深潜数据海洋:Java文件读写全面解析与实战指南

在软件开发的世界里&#xff0c;文件如同沉默的守护者&#xff0c;承载着程序与现实世界的交流。Java语言&#xff0c;以其强大的文件处理能力&#xff0c;为我们提供了丰富的工具箱&#xff0c;让数据的读写变得既优雅又高效。本文将带你从零开始&#xff0c;逐步深入Java文件…

掌握Python中的文件序列化:Json和Pickle模块解析

Python 文件操作与管理&#xff1a;Open函数、Json与Pickle、Os模块 在Python中&#xff0c;文件是一个重要的数据处理对象。无论是读取数据、保存数据还是进行数据处理&#xff0c;文件操作都是Python编程中不可或缺的一部分。本文将详细介绍Python中文件操作的几种常用方法&…

ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘

降低setuptools版本 pip install setuptools69.5.1https://github.com/aws-neuron/aws-neuron-sdk/issues/893

阿尔泰科技利用485模块搭建自动灌溉系统实现远程控制

自动灌溉系统又叫土壤墒情监控系统&#xff0c;土壤墒情监控系统主要实现固定站无人值守情况下的土壤墒情数据的自动采集和无线传输&#xff0c;数据在监控中心自动接收入库&#xff1b;可以实现24小时连续在线监控并将监控数据通过有线、无线等传输方式实时传输到监控中心生成…