部署远程利器-RustDesk

目录

一、RustDesk

二、部署流程

1、NAT打洞

2、中继服务器

3、客户端

三、ID/中继服务器的部署

三、客户端开始远程


一、RustDesk

RustDesk是一个开源的,可以部署自己ID/中继服务器的远程工具,可以很好的替代 ToDesk、向日葵等其他远程工具。

二、部署流程

主要分为两个步骤。

1、ID/中继服务器的部署

2、客户端

在说部署流程前,先聊一下"NAT打洞",明白了打洞的原理后,相信你将会对将要部署的两个部件工作有一定的认识。

1、NAT打洞

在计算机网络中,实现两个内网设备的点对点直接连接,即在两个封闭的内网之间"凿开"一个通道。

关于 NAT打洞的实现原理,是一个非常经典且巧妙的技术。它的核心目标是:让两个分别位于不同私有局域网的用户设备,能够建立直接的P2P连接,而不永远依赖中心服务器转发数据。

拓扑图如下,存在客户端A、客户端B,以及一个在公网上、客户端A、B都能访问到的协调服务器S(Server)。

第一步:登记与发现

1、A和B启动后,主动与公网上的服务器S建立一个长期连接。

2、通过这个连接,S记录了每个客户端的<公网IP: 端口>。注意,这个"端口"是A/B的数据包经过自家路由器NAT转换时,路由器临时分配的外网端口,不是设备自身的私有端口。

第二步:连接发起与信息交换

3、假设A想直接联系B。A向服务器S发送请求:"I wanna to connect B"。

4、服务器S将B的公网IP和端口信息告诉A,同时也将A的公网IP和端口信息告诉B。此时,A和B都知道了对方"在公网上看起来的地址",但这个地址指向的是对方的路由器,而不是设备本身。

第三步:关键"打洞尝试"

这时最核心的一步,关键在于"主动发出第一个数据包"。

5、第一次尝试(通常失败):

A拿到B的公网地址后,主动向这个地址发送一个 UDP数据包。

这个包到达B的路由器。但B的路由器NAT表里没有预先建立从A到这个端口的映射规则,因此路由器会认为这是一个未经请求的入站连接,默认将其丢弃。A的首次尝试通常会超时。

6、"凿开"洞口

虽然A发给B的第一个包被B的路由器丢了,但这个行为在A自己的路由器上产生了决定性效果!A的路由器会记录:"我的内网设备A,向B的公网<IP: 端口>发送了数据。那么,从B的<IP: 端口>"返回的数据,应该转发给A"。这就是在A的路由器NAT上"凿开"了一个指向B的"洞"。

7、同步"凿洞":

几乎同时,B在收到服务器S的指令后,也会主动向A的公网<IP: 端口>发送一个UDP数据包。

同样,这个包会在B自己的路由器上"凿开"一个指向A的"洞"。而当这个包到达A的路由器时,由于第6步已经建立了映射规则,A的路由器会允许这个包通过,并转发给内网的A。

第四步:直接P2P通道建立

8、一旦A收到了B发来的第一个包,A到B的"洞"在B的路由器那边其实也已经通了(因为B主动发过包)。此时,A和B之间就可以利用对方路由为这个会话打开的"洞口",开始直接、双向的通信。

9、协调服务器S在完成引荐后,就可以退出,A和B进入直接的点对点直接通信。

2、中继服务器

准备工作:一台阿里云 ECS 实例(我是用的阿里云的云服务器,免费使用3个月):确保已获取服务器的公网IP地址,并已开放所需端口。

系统权限:拥有 root用户或具有 sudo权限的普通用户。

开放的防火墙端口:在阿里云控制台的 安全组规则​ 中,为ECS实例添加以下入方向规则:

端口 协议 说明 必须
21115 TCP 用于 ID 注册和心跳
21116 TCP/UDP 用于服务发现
21116 TCP 网页客户端访问(可选)
21117 TCP 网页客户端WebSocket(可选)
21118 TCP 网页客户端HTTPS(可选)
21119 TCP 中继数据端口
22 TCP SSH管理端口(建议开放但限制IP)

如下:

工作量主要在于ID/中继服务器的部署,这部分单独放在第三节详细的说。

3、客户端

客户端简单一些。windows 下直接在官网上下载然后安装使用。

三、ID/中继服务器的部署

第一步:通过 ssh 连接阿里云服务器

第二步:下载并运行 RustDesk 服务器程序。RustDesk 官方提供了编译好的二进制文件,直接下载运行即可。

1、创建目录

mkdir -p /opt/rustdesk-server

cd /opt/rustdesk-server

2、下载服务器端程序

wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11/rustdesk-server-linux-amd64.zip

3、解压

unzip rustdesk-server-linux-amd64.zip

cd amd64

chmod +x hbbs hbbr

bash 复制代码
root@xxx:/opt/rustdesk-server# ls -l
total 8348
drwxr-xr-x 2 root root    4096 Apr  1 10:29 amd64
-rw-r--r-- 1 root root 8541206 May 24  2024 rustdesk-server-linux-amd64.zip

root@xxx:/opt/rustdesk-server/amd64# ls -l
total 27596
-rwxr-xr-x 1 root root  9165904 May 24  2024 hbbr
-rwxr-xr-x 1 root root 14354808 May 24  2024 hbbs
-rwxr-xr-x 1 root root  4734920 May 24  2024 rustdesk-utils

解压后会得到几个可执行文件:

hbbs:ID/注册服务器(必须运行)

hbbr:中继服务器(必须运行)

rustdesk-utils:工具集

4、首次运行,生成密钥对

密钥是保证连接安全的关键。运行 hbbs 会自动生成。

bash 复制代码
./hbbs
bash 复制代码
root@xxx:/opt/rustdesk-server/amd64# l
total 27704
-rw-r--r-- 1 root root    24576 Apr  1 10:36 db_v2.sqlite3
-rw-r--r-- 1 root root    32768 Apr  1 10:36 db_v2.sqlite3-shm
-rw-r--r-- 1 root root    41232 Apr  1 10:36 db_v2.sqlite3-wal
-rwxr-xr-x 1 root root  9165904 May 24  2024 hbbr
-rwxr-xr-x 1 root root 14354808 May 24  2024 hbbs
-rw-r--r-- 1 root root       88 Apr  1 10:36 id_ed25519
-rw-r--r-- 1 root root       44 Apr  1 10:36 id_ed25519.pub
-rwxr-xr-x 1 root root  4734920 May 24  2024 rustdesk-utils

运行 ./hbbs 后可以按 Ctrl+c 停止,可以看到生成了密钥对:

公钥:id_ed25519.pub

私钥:id_ed25519

第三步:使用 systemd 创建服务,以后台服务方式运行,保证服务器奔溃或重启后能自动运行。

1、创建 hbbs 服务文件:将下面的<your ip>替换成阿里云服务器上公网 ip

bash 复制代码
root@xxx:/opt/rustdesk-server/amd64# sudo nano /etc/systemd/system/rustdesk-hbbs.service

root@xxx:/opt/rustdesk-server/amd64# cat /etc/systemd/system/rustdesk-hbbs.service
[Unit]
Description=RustDesk ID Server (hbbs)
After=network.target

[Service]
Type=simple
ExecStart=/opt/rustdesk-server/amd64/hbbs -r <your ip>:21117
WorkingDirectory=/opt/rustdesk-server/amd64
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target

2、创建 hbbr 服务文件:

bash 复制代码
root@xxx:/opt/rustdesk-server/amd64# sudo nano /etc/systemd/system/rustdesk-hbbr.service

root@xxx:/opt/rustdesk-server/amd64# cat /etc/systemd/system/rustdesk-hbbr.service
[Unit]
Description=RustDesk Relay Server (hbbr)
After=network.target

[Service]
Type=simple
ExecStart=/opt/rustdesk-server/amd64/hbbr
WorkingDirectory=/opt/rustdesk-server/amd64
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target

3、启动服务并设置开机自启

bash 复制代码
root@xxx:/opt/rustdesk-server/amd64# systemctl daemon-reload
root@xxx:/opt/rustdesk-server/amd64# systemctl start rustdesk-hbbs
root@xxx:/opt/rustdesk-server/amd64# systemctl start rustdesk-hbbr
root@xxx:/opt/rustdesk-server/amd64# systemctl enable rustdesk-hbbs
root@xxx:/opt/rustdesk-server/amd64# systemctl enable rustdesk-hbbr

4、验证服务状态:可以看到处于 active (running)

bash 复制代码
root@xxx:/opt/rustdesk-server/amd64# systemctl daemon-reload
systemctl start rustdesk-hbbs
systemctl start rustdesk-hbbr
systemctl enable rustdesk-hbbs
systemctl enable rustdesk-hbbr
root@iZz4lwdphtggqkZ:/opt/rustdesk-server/amd64# systemctl status rustdesk-hbbs
● rustdesk-hbbs.service - RustDesk ID Server (hbbs)
     Loaded: loaded (/etc/systemd/system/rustdesk-hbbs.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-04-01 09:23:44 CST; 1h 31min ago
   Main PID: 12468 (hbbs)
      Tasks: 6 (limit: 1860)
     Memory: 1.0M (peak: 1.4M)
        CPU: 1.487s
     CGroup: /system.slice/rustdesk-hbbs.service
             └─12468 /opt/rustdesk-server/amd64/hbbs -r 8.163.63.86:21117

root@xxx:/opt/rustdesk-server/amd64#
root@iZz4lwdphtggqkZ:/opt/rustdesk-server/amd64# systemctl status rustdesk-hbbr
● rustdesk-hbbr.service - RustDesk Relay Server (hbbr)
     Loaded: loaded (/etc/systemd/system/rustdesk-hbbr.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-04-01 09:23:39 CST; 1h 31min ago
   Main PID: 12462 (hbbr)
      Tasks: 5 (limit: 1860)
     Memory: 552.0K (peak: 952.0K)
        CPU: 273ms
     CGroup: /system.slice/rustdesk-hbbr.service
             └─12462 /opt/rustdesk-server/amd64/hbbr

到这里ID/中继服务器便部署完毕并启动了。

三、客户端开始远程

1、配置ID中继服务器(客户端A、B都是同样的配置)

2、启动服务

一切正常的话,这里会显示就绪状态。恭喜你,可以愉快的远程了~

相关推荐
gihigo199817 小时前
高效微逆变器设计:程序实现与上位机监控系统
网络
有毒的教程18 小时前
Ubuntu 虚拟机磁盘空间不足完整解决教程
linux·运维·ubuntu
北 染 星 辰18 小时前
无源光网络-PON
网络
WiChP18 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
geNE GENT19 小时前
Nginx WebSocket 长连接及数据容量配置
运维·websocket·nginx
Cx330❀20 小时前
一文吃透Linux System V共享内存:原理+实操+避坑指南
大数据·linux·运维·服务器·人工智能
OPHKVPS20 小时前
Anthropic 为 Claude Code 推出“自动模式”:AI 编码工具迈向更高自主性
网络·人工智能·安全·ai
薛定谔的悦20 小时前
储能系统(EMS)核心架构解析:充放电控制、防逆流、防过载与 PID 调节
linux·运维·架构
志栋智能20 小时前
超自动化运维的终极目标:让系统自治运行
运维·网络·人工智能·安全·自动化
3GPP仿真实验室21 小时前
【MATLAB源码】CSI-RS:测量链路
linux·网络·matlab