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。
- RustDesk 客户端:运行在你的设备上(Windows,macOS,Linux,Android, iPhone)用于连接两个设备的软件,它负责监听来自客户端的连接请求,并在建立连接后向客户端发送屏幕更新和接收输入事件。
- RustDesk 中继服务器(Relay Server):运行在服务器上,充当客户端之间的桥梁,转发来自一方的数据包到另一方。在某些环境中(如经过 NAT 出网)设备之间无法进行 P2P 连接,可以用服务器来中转
- ID 服务器(ID Server):运行在服务器上,用于维护客户端及中继服务器的连接信息,促进设备之间建立 P2P 连接。
在RustDesk的服务器端部署中,hbbr
和 hbbs
是两个重要的组件,分别用于不同的功能:
- 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 失败,将使用中继服务器。
-
确认连接方式,首先连接到远程主机,可以将鼠标移动到工具栏图标(绿色图标),将显示它是直接连接还是通过中继服务器连接。
使用端口说明:
序号 | 服务 | 端口 | 协议 | 用途 | 是否可选 |
---|---|---|---|---|---|
1 | hbbs | 21114 | TCP | 用于 Web 控制台API,仅在专业版中可用 | 可选 |
2 | hbbs | 21115 | TCP | NAT类型测试 | 必选 |
3 | hbbs | 21116 | TCP/UDP | UDP用于ID注册和心跳服务,TCP用于TCP打洞和连接服务 | 必选 |
4 | hbbr | 21117 | TCP | 用于Relay服务 | 必选 |
5 | hbbs | 21118 | TCP | 用于支持Web客户端 | 可选 |
6 | hbbr | 21119 | TCP | 用于支持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。
- 服务器已安装
docker
和docker-compose
工具
1、登录阿里云控制台,配置防火墙规则,开通以下端口
端口放通说明:
- 放通TCP端口
21115
、21116
、21117
、21118
、22229
- 放通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
查看运行的两个容器hbbr
和hbbs
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设备和防火墙,将显示两台客户端为加密直连,无需经过中继:
相关文章:
![](https://i-blog.csdnimg.cn/direct/f089883cb2ed42dcb9a8afa01a95f1f3.png)
docker自建rustdesk-server远程桌面
rustdesk简介 RustDesk 是一款可以平替 TeamViewer 的开源软件,旨在提供安全便捷的自建方案。 RustDesk 是一款功能齐全的远程桌面应用,具有以下特性: 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。支持 VP8 / VP9 / AV1 …...
![](https://img-blog.csdnimg.cn/img_convert/f84bc91b552df4f56a80ca39ccb1d58f.jpeg)
海外抖音黑屏是网络问题还是硬件问题?
随着海外抖音(TikTok)在全球范围内的普及,越来越多的用户开始体验这一短视频社交平台。然而,不少用户在使用过程中遇到了黑屏问题,这让人不禁疑惑:这究竟是网络问题还是硬件问题? 首先…...
![](https://www.ngui.cc/images/no-images.jpg)
为了实现接口缓存,专门写了个缓存库 f-cache-memory
问题起因 起因是某次发版之后,服务器接口压力过大,当场宕机,排查之后发现有个接口在首页被调十来次(六七年的老项目了,都是泪呀),后端反馈这个接口的sql很复杂,很耗性能,…...
![](https://www.ngui.cc/images/no-images.jpg)
actual combat 35 —— es
一、windows中es执行步骤 参考:https://blog.csdn.net/qq_21197507/article/details/115076913 下es安装包下es前端gitHub代码,然后npm -i安装,npm run start 启动安装kibana 二、遇到的问题 1. 第二步安装前端代码依赖报错 npm ERR! co…...
![](https://i-blog.csdnimg.cn/direct/95f75dad05904344a34d150c540ba013.png)
android R ext4 image打包脚本介绍
一、Android R打包指令使用介绍 (1)mkuserimg_mke2fs #./mkuserimg_mke2fs --help usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE][--timestamp TIMESTAMP] [--fs_config FS_CONFIG][--product_out PRODUCT_OUT][--b…...
![](https://img-blog.csdnimg.cn/img_convert/c33379092f10c72295d9e6ca19bf6f3d.jpeg)
美式键盘 QWERTY 布局的来历
注:机翻,未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…...
![](https://i-blog.csdnimg.cn/direct/e180649f2b9047ecad0eca05a8f9fb7a.png)
ETL数据同步之DataX,附赠一套DataX通用模板
今天跟大家分享数据同步datax的模板,小伙伴们简单直接借鉴使用。 还记得上一篇关于大数据DS调度工具的分享嘛? 主流大数据调度工具DolphinScheduler之数据ETL流程-CSDN博客 里面的核心就是采用了DATAX的数据同步原理。 一,什么是DataX D…...
![](https://i-blog.csdnimg.cn/direct/2bcd89fd8aea4d6f973d96e66e76ff6f.png)
[论文笔记] CT数据配比方法论——1、Motivation
我正在写这方面的论文,感兴趣的可以和我一起讨论!!!!!! Motivation 1、探测原有模型的配比: 配比 与 ppl, loss, bpw, benchmark等指标 之间的关系。 2、效果稳定的配比:配比 与 模型效果 之间的规律。 Experiments 1、主语言(什么语言作为主语言,几种主语言?…...
![](https://i-blog.csdnimg.cn/direct/454dc5912f184af3aa21f30155c050ff.png)
某4G区域终端有时驻留弱信号小区分析
这些区域其实是长时间处于连接态的电信卡4G终端更容易出现。 出现问题时都是band1 100频点下发了针对弱信号的1650频点的连接态A4测量事件配置(其阈值为-106)。而这个条件很容易满足,一旦下发就会切到band3 1650频点。 而1650频点虽然下发ban…...
![](https://img-blog.csdnimg.cn/img_convert/578a466d92aa7a593e4ef7da74c19527.png)
【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用
体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux上启动和停止jar
linux 后台运行jar 在Linux系统中,要想让jar包在后台运行,可以使用nohup命令和&符号。nohup命令可以使进程在后台不受挂起信号影响的执行,而&符号则是将任务放入后台执行。 以下是一个简单的命令示例,它将启动一个jar包…...
![](https://i-blog.csdnimg.cn/direct/960336fb86334429a81f031f81810644.png)
浏览器缓存:强缓存与协商缓存实现原理有哪些?
1、强缓存:设置缓存时间的,那么在这个时间内浏览器向服务器发送请求更新数据,但是服务器会让其从缓存中获取数据。 可参考:彻底弄懂强缓存与协商缓存 - 简书 2、协商缓存每次都会向浏览器询问,那么是怎么询问的呢&…...
![](https://i-blog.csdnimg.cn/direct/3ab0ec688e5e486c8bd4bda7251c2e62.png)
持续集成04--Jenkins结合Gitee创建项目
前言 在持续集成/持续部署(CI/CD)的旅途中,Jenkins与版本控制系统的紧密集成是不可或缺的一环。本篇“持续集成03--Jenkins结合Gitee创建项目”将引导如何将Jenkins与Gitee(一个流行的Git代码托管平台)相结合ÿ…...
![](https://i-blog.csdnimg.cn/direct/5730516c6821454487000a76eda6b0e4.png)
【Node.js基础02】fs、path模块
目录 一:fs模块-读写文件 1 加载fs模块对象 2 读制定文件内容文件 3 向文件中写入内容 二:path模块-路径处理 1 问题引入 2 __dirname内置变量 使用方法 一:fs模块-读写文件 fs模块封装了与本机文件系统交互方法和属性 1 加载fs模块…...
![](https://i-blog.csdnimg.cn/direct/3fefd8264721448192732dd88a1db383.png)
牛客TOP101:单链表的排序
文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 按我们以往的排序算法来看,针对链表来说都是太不合适,因为很多都会出现指针前移后移,后移还好说,前移对于链表来说就太难了,而且大部分都是某一个…...
![](https://i-blog.csdnimg.cn/direct/4acd4373fad2480aa408eed952483d5e.gif)
数据可视化配色新工具,颜色盘多达2500+类
好看的配色,不仅能让图表突出主要信息,更能吸引读者,之前分享过很多配色工具,例如, 👉可视化配色工具:颜色盘多达3000+类,数万种颜色! 本次再分享一个配色工具pypalettes,颜色盘多达2500+类。 安装pypalettes pip install pypalettes pypalettes使用 第1步,挑选…...
![](https://i-blog.csdnimg.cn/direct/14813c9291f04cfa822a7408bee3e411.png)
SpringAI简单使用(本地模型+自定义知识库)
Ollama 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在本地机器上构建和运行语言模型,提供了一个简单易用的API来创建、运行和管理模型,同时还提供了丰富的预构建模型库,这些模型可以轻松地应用在多种应用场景中。O…...
![](https://img-blog.csdnimg.cn/img_convert/821fab883a786bb66e3b5dfa6f453d64.jpeg)
为什么要从C语言开始编程
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!很多小伙伴在入门编程时。都…...
![](https://i-blog.csdnimg.cn/direct/89e08086e789465da538c5424a1f993e.png)
[数据集][目标检测]导盲犬拐杖检测数据集VOC+YOLO格式4635张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4635 标注数量(xml文件个数):4635 标注数量(txt文件个数):4635 标注…...
![](https://i-blog.csdnimg.cn/direct/272ee7e58b104be085bdc0f386b7b091.png)
数据结构(稀疏数组)
简介 稀疏数组是一种数据结构,用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中,只有非零或非重复的元素会被存储,从而节省内存空间。 案例引入 假如想把下面这张表存入文件,我们会怎么做?…...
![](https://www.ngui.cc/images/no-images.jpg)
python 爬虫技术 第02节 基础复习
Python基础复习 Python 是一种高级、通用、解释型的编程语言,以其简洁的语法和强大的功能在数据科学、Web 开发、自动化脚本编写、机器学习等领域广泛使用。下面是一些 Python 基础概念的复习: 1. 数据类型 Python 支持多种内置数据类型,包…...
![](https://i-blog.csdnimg.cn/direct/c0655e16070942c39698328144e05940.png)
数据结构-C语言-排序(3)
代码位置:test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言: 1.1-排序定义: 排序就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。(注:我们这里的排序采用的都为升序) 1.2-排序分…...
![](https://i-blog.csdnimg.cn/direct/e0c3c6695fa34bc795f36a59b5ae57a7.jpeg)
【分布式事务】怎么解决分布式场景下数据一致性问题
分布式事务的由来 拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户余额服务。原本收到充值回调后,可以将修改订单状态和扣减余额放在一个mysql事务…...
![](https://www.ngui.cc/images/no-images.jpg)
C# 中的委托
委托的概念 在C#中,委托是一种引用类型,它表示对方法的引用,即委托就是一种用来指向一个方法的引用类型变量。委托的声明类似于方法签名,但是关键字是delegate。下面是一个委托的声明和使用的例子: // 声明一个委托 p…...
![](https://i-blog.csdnimg.cn/direct/45be2e9892194ec286ba00d25450915e.png)
通过docker构建基于LNMP的WordPress项目
目录 1.准备nginx 2.准备mysql 3.准备php 4.构建各镜像 5.运行wordpress 1、项目环境: 1.1 (1)公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能…...
![](https://i-blog.csdnimg.cn/direct/29af6fdf43644ba9a041c714b0b71fc4.png)
2024新版IntelliJ IDEA修改包名 全网最简单最粗暴的方法
问题再现 我们在网上淘一些后端框架 又或者是开源的项目 如果要变成自己的 难免会去改包名 即把com.后面的内容改成自己自定义的 第一次我们直接用网络上的方法 shift F6 快捷键 可以修改包名 出现以下情况 进行修改 我们发现失败了 并没有像预计的一样直接把包名修…...
![](https://www.ngui.cc/images/no-images.jpg)
C#中处理Socket粘包
在C#中使用Socket进行网络通信时,粘包问题是常见的。粘包问题通常发生在TCP协议中,因为TCP是流式协议,数据可能会被分割成多个包发送,也可能多个小包会被合并成一个大包接收。 处理粘包问题的常见方法是使用消息分隔符或消息长度…...
![](https://i-blog.csdnimg.cn/direct/a501b950eb464a3892b4ce260da30214.jpeg)
7.19IO
思维导图 第一题:测试错误检查锁和递归锁是否会造成死锁状态 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #i…...
![](https://img-blog.csdnimg.cn/direct/ee9077c56a1c476d803af8a178e0eb98.gif#pic_center)
【Vue】深入了解 Axios 在 Vue 中的使用:从基本操作到高级用法的全面指南
文章目录 一、Axios 简介与安装1. 什么是 Axios?2. 安装 Axios 二、在 Vue 组件中使用 Axios1. 发送 GET 请求2. 发送 POST 请求 三、Axios 拦截器1. 请求拦截器2. 响应拦截器 四、错误处理五、与 Vuex 结合使用1. 在 Vuex 中定义 actions2. 在组件中调用 Vuex acti…...
![](https://img-blog.csdnimg.cn/img_convert/aa8b529d33b42d8282d545c1d3ec5bb6.png)
【Qt】窗口
文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示,其总体结构如下: 菜单栏 菜单栏MenuBar,可包含多个菜单Menu,每个菜单也可以包含多个菜…...
![](https://img-blog.csdnimg.cn/20190916212459168.png)
网站建设与优化推广方案模板/中国制造网
论文链接:https://arxiv.org/abs/1903.00241?contextcs简介 对于一个深度神经网络来讲,如何评估该网络本身的预测质量是一个有趣并且有难度的任务。 在实例分割中,实例分类的置信得分被用作掩膜质量评估。然而,使用实例掩膜和实…...
![](/images/no-images.jpg)
中国体育直播在线观看斯诺克赛/西安seo网站关键词
AngularJS 1.2版本中提供了Controller As语法,简单说就是可以在Controller中使用this来替代$scope,使得Controller更像一个传统的JS类,相对于$scope的继承树要理解上要简单一些。 基础用法 传统的Controller是这样写的: app.contr…...
![](/images/no-images.jpg)
wordpress取消页尾/今日国际新闻大事件
http://poj.org/problem?id2184 dp[s]表示当TSs时,TF的最大值。 背包容量?——我们要找到它的最大值,不断分开累加正s和负s即可。 if (s > 0) {for (j Max; j > Min; --j)dp[j s] max(dp[j s], dp[j] f);///dp[s]表示当TSs时&…...
![](/images/no-images.jpg)
太原网站定制/爱站权重
参考代码: import tensorflow as tf import os from tensorflow.python.framework import graph_util def set_config():#设置GPU使用率 # 控制使用率 os.environ[CUDA_VISIBLE_DEVICES] 0 # 假如有16GB的显存并使用其中的8GB: gpu_options tf.…...
![](https://yqfile.alicdn.com/img_50d2f0538e701e9c08b4c3452e8f2d79.png)
扬州品牌网站设计/友链购买有效果吗
这本书是2016年8月出版的,一年半之后再看,虽然AI风口已过,但是由此延伸而来的概念正在引导出更深的内涵。 何谓大数据?作者的观点是体量大、维度高、及时性强。 为了说明数据的威力,书中举了许多例子。印象最深的一个是…...
![](/images/no-images.jpg)
软件下载网站怎么做/市场营销在线课程
Android不允许在子线程中进行UI的操作,但是有些时候我们确实需要在子线程中执行一些耗时的任务来更新UI,这时候就需要用到解析异步消息处理机制来完成操作。 异步消息处理包括: MessageHandlerMessageQueueLooper 该文章主要介绍Message和Ha…...