目录一、RustDesk二、部署流程1、NAT打洞2、中继服务器3、客户端三、ID/中继服务器的部署三、客户端开始远程一、RustDeskRustDesk是一个开源的可以部署自己ID/中继服务器的远程工具可以很好的替代 ToDesk、向日葵等其他远程工具。二、部署流程主要分为两个步骤。1、ID/中继服务器的部署2、客户端在说部署流程前先聊一下“NAT打洞”明白了打洞的原理后相信你将会对将要部署的两个部件工作有一定的认识。1、NAT打洞在计算机网络中实现两个内网设备的点对点直接连接即在两个封闭的内网之间“凿开”一个通道。关于 NAT打洞的实现原理是一个非常经典且巧妙的技术。它的核心目标是让两个分别位于不同私有局域网的用户设备能够建立直接的P2P连接而不永远依赖中心服务器转发数据。拓扑图如下存在客户端A、客户端B以及一个在公网上、客户端A、B都能访问到的协调服务器SServer。第一步登记与发现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​TCPSSH管理端口建议开放但限制IP是如下工作量主要在于ID/中继服务器的部署这部分单独放在第三节详细的说。3、客户端客户端简单一些。windows 下直接在官网上下载然后安装使用。三、ID/中继服务器的部署第一步通过 ssh 连接阿里云服务器第二步下载并运行 RustDesk 服务器程序。RustDesk 官方提供了编译好的二进制文件直接下载运行即可。1、创建目录mkdir -p /opt/rustdesk-servercd /opt/rustdesk-server2、下载服务器端程序wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11/rustdesk-server-linux-amd64.zip3、解压unzip rustdesk-server-linux-amd64.zipcd amd64chmod x hbbs hbbrrootxxx:/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 rootxxx:/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解压后会得到几个可执行文件hbbsID/注册服务器必须运行hbbr中继服务器必须运行rustdesk-utils工具集4、首次运行生成密钥对密钥是保证连接安全的关键。运行 hbbs 会自动生成。./hbbsrootxxx:/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 后可以按 Ctrlc 停止可以看到生成了密钥对公钥id_ed25519.pub私钥id_ed25519第三步使用 systemd 创建服务以后台服务方式运行保证服务器奔溃或重启后能自动运行。1、创建 hbbs 服务文件将下面的your ip替换成阿里云服务器上公网 iprootxxx:/opt/rustdesk-server/amd64# sudo nano /etc/systemd/system/rustdesk-hbbs.service rootxxx:/opt/rustdesk-server/amd64# cat /etc/systemd/system/rustdesk-hbbs.service [Unit] DescriptionRustDesk ID Server (hbbs) Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/amd64/hbbs -r your ip:21117 WorkingDirectory/opt/rustdesk-server/amd64 Restartalways RestartSec10 Userroot [Install] WantedBymulti-user.target2、创建 hbbr 服务文件rootxxx:/opt/rustdesk-server/amd64# sudo nano /etc/systemd/system/rustdesk-hbbr.service rootxxx:/opt/rustdesk-server/amd64# cat /etc/systemd/system/rustdesk-hbbr.service [Unit] DescriptionRustDesk Relay Server (hbbr) Afternetwork.target [Service] Typesimple ExecStart/opt/rustdesk-server/amd64/hbbr WorkingDirectory/opt/rustdesk-server/amd64 Restartalways RestartSec10 Userroot [Install] WantedBymulti-user.target3、启动服务并设置开机自启rootxxx:/opt/rustdesk-server/amd64# systemctl daemon-reload rootxxx:/opt/rustdesk-server/amd64# systemctl start rustdesk-hbbs rootxxx:/opt/rustdesk-server/amd64# systemctl start rustdesk-hbbr rootxxx:/opt/rustdesk-server/amd64# systemctl enable rustdesk-hbbs rootxxx:/opt/rustdesk-server/amd64# systemctl enable rustdesk-hbbr4、验证服务状态可以看到处于 active (running)rootxxx:/opt/rustdesk-server/amd64# systemctl daemon-reload systemctl start rustdesk-hbbs systemctl start rustdesk-hbbr systemctl enable rustdesk-hbbs systemctl enable rustdesk-hbbr rootiZz4lwdphtggqkZ:/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 rootxxx:/opt/rustdesk-server/amd64# rootiZz4lwdphtggqkZ:/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、启动服务一切正常的话这里会显示就绪状态。恭喜你可以愉快的远程了~