自己搭建开源的远程桌面(RustDesk)
“rustdesk是一款可以平替 TeamViewer 的远程桌面软件”,这是rustdesk官方对自己的描述。它是开源的,由Rust编写的远程访问和远程控制软件。它支持Windows、macOS、iOS、Android 和 Linux 等操作系统。
RustDesk 的特点包括完全掌控数据、轻松自建、支持P2P 连接以及端到端加密,RustDesk有多种安装方式。
本人建议是使用二进制方式安装,占用资源小。
rustdesk服务端口号默认情况下,hbbs 监听 21115 (tcp),21116 (tcp/udp),21118 (tcp),hbbr 监听21117 (tcp),21119 (tcp),需要在防火墙开启这几个端口,请注意 21116 同时要开启TCP和UDP 。
其中 21115 是hbbs用作NAT类型测试,21116/UDP是 hbbs 用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务。
21117 是 hbbr 用作中继服务,21118 和 21119 是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。
建议在安装服务时使用自定义端口号,同时使用key密钥方式连接会进一步增加服务安全性。
本例服务器操作系统使用的是Debian 12.5,以最小系统方式安装系统。
操作系统安装所需要的软件包:
apt-get update
apt-get install -y wget unzip bash sudo
修改hostname,并将hostname解析到127.0.0.1中,本机为例
hostnamectl set-hostname rustdesk
nano /etc/hosts
127.0.0.1 rustdesk
服务器配置
第一种,二进制方式安装Rustdesk服务
-
给rustdesk创建用户和组以及家目录
groupadd rustdesk useradd -m rustdesk -g rustdesk -s /bin/bash -d /home/rustdesk passwd rustdesk
-
给rustdesk用户授权root权限,执行命令:
nano /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# This fixes CVE-2005-4890 and possibly breaks some versions of kdesu
# (#1011624, https://bugs.kde.org/show_bug.cgi?id=452532)
Defaults use_pty
# This preserves proxy settings from user environments of root
# equivalent users (group sudo)
#Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"
# This allows running arbitrary commands, but so does ALL, and it means
# different sudoers have their choice of editor respected.
#Defaults:%sudo env_keep += "EDITOR"
# Completely harmless preservation of a user preference.
#Defaults:%sudo env_keep += "GREP_COLOR"
# While you shouldn't normally run git as root, you need to with etckeeper
#Defaults:%sudo env_keep += "GIT_AUTHOR_* GIT_COMMITTER_*"
# Per-user preferences; root won't have sensible values for them.
#Defaults:%sudo env_keep += "EMAIL DEBEMAIL DEBFULLNAME"
# "sudo scp" or "sudo rsync" should be able to use your SSH agent.
#Defaults:%sudo env_keep += "SSH_AGENT_PID SSH_AUTH_SOCK"
# Ditto for GPG agent
#Defaults:%sudo env_keep += "GPG_AGENT_INFO"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
rustdesk ALL=(ALL) ALL #在这里填写内容
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
保存退出,此时rustdesk用户就拥有了root权限
-
尝试进入到rustdesk用户
su - rustdesk
-
开始准备安装rustdesk,下载rustdesk二进制软件包
cd /home/rustdesk wget -O rustdesk.zip https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip
-
解压缩到当前目录
unzip rustdesk.zip
-
将解压后的amd64目录重命名为rustdesk
mv amd64 rustdesk
-
进入rustdesk目录,将hbbs和hbbr赋予执行权限
cd rustdesk sudo chmod +x hbbs sudo chmod +x hbbr
-
执行一次开启rustdesk服务,在当前目录会生成一个key密钥文件
./hbbs ./hbbr
ctrl+c #断开服务
查看当前目录,找到“id_ed25519.pub”密钥文件ls ./ db_v2.sqlite3 db_v2.sqlite3-shm db_v2.sqlite3-wal hbbr hbbs id_ed25519 id_ed25519.pub rustdesk-utils
-
查看公钥密钥,并记住key公钥,稍后需要在客户端上填写公钥
cat /home/rustdesk/rustdesk/id_ed25519.pub BVToZviuiFN0zbSnkzIQhFN123456Y2+F8lUJy+VgvA=
-
为rustdesk创建启动项
####创建hbbs启动项 sudo nano /etc/systemd/system/hbbs.service [Unit] Description=Rustdesk Signal Server [Service] Type=simple LimitNOFILE=1000000 #-p指定侦听端口号,-r指定网卡IP(适用多网卡),-M优化了传输数据包大小,-k启用加密传输(可以防止未授权用户加入到本服务器中) ExecStart=/home/rustdesk/rustdesk/hbbs -r 0.0.0.0 -p 21116 -M 52428800 -k _ WorkingDirectory=/home/rustdesk/rustdesk/ User=rustdesk Group=rustdesk Restart=always #日志文件位置 StandardOutput=append:/var/log/rustdesk/hbbs.log StandardError=append:/var/log/rustdesk/hbbs.error # Restart service after 10 seconds if node service crashes RestartSec=10 [Install] WantedBy=multi-user.target ####创建hbbr启动项 sudo nano /etc/systemd/system/hbbr.service [Unit] Description=Rustdesk Relay Server [Service] Type=simple LimitNOFILE=1000000 #-p指定侦听端口号,-k启用加密传输(可以防止未授权用户加入到本服务器中) ExecStart=/home/rustdesk/rustdesk/hbbr -p 21117 -k _ WorkingDirectory=/home/rustdesk/rustdesk/ User=rustdesk Group=rustdesk Restart=always #日志文件位置 StandardOutput=append:/var/log/rustdesk/hbbr.log StandardError=append:/var/log/rustdesk/hbbr.error # Restart service after 10 seconds if node service crashes RestartSec=10 [Install] WantedBy=multi-user.target
-
创建日志文件,添加用户权限
sudo mkdir -p /var/log/rustdesk sudo touch /var/log/rustdesk/hbbs.log sudo touch /var/log/rustdesk/hbbs.error sudo touch /var/log/rustdesk/hbbr.log sudo touch /var/log/rustdesk/hbbr.error sudo chown -R rustdesk:rustdesk /var/log/rustdesk
-
将hbbs和hbbr启动项文件修改权限
sudo chmod +x /etc/systemd/system/hbbs.service sudo chmod +x /etc/systemd/system/hbbr.service
-
尝试启动
sudo systemctl daemon-reload sudo systemctl restart hbbs.service sudo systemctl restart hbbr.service
-
查看服务状态
########查看hbbs启动状态 systemctl status hbbs ● hbbs.service - Rust Desk Service Loaded: loaded (/etc/systemd/system/hbbs.service; disabled; preset: enabled) Active: active (running) since Thu 2024-06-13 20:30:19 CST; 2s ago Main PID: 115513 (hbbs) Tasks: 12 (limit: 19136) Memory: 3.0M CPU: 8ms CGroup: /system.slice/hbbs.service └─115513 /home/rustdesk/rustdesk/hbbs -r 0.0.0.0 -p 21116 -M 52428800 -k _ ########查看hbbr启动状态 systemctl status hbbr ● hbbr.service - Rust Desk Service Loaded: loaded (/etc/systemd/system/hbbr.service; disabled; preset: enabled) Active: active (running) since Thu 2024-06-13 20:32:58 CST; 4s ago Main PID: 115747 (hbbr) Tasks: 11 (limit: 19136) Memory: 2.7M CPU: 7ms CGroup: /system.slice/hbbr.service └─115747 /home/rustdesk/rustdesk/hbbr -p 21117 -k _
-
查看rustdesk端口是否已启用
ss -antulp | grep hbb udp UNCONN 0 0 *:21116 *:* users:(("hbbs",pid=116473,fd=12)) udp UNCONN 0 0 *:47121 *:* users:(("hbbs",pid=116473,fd=16)) tcp LISTEN 0 128 *:21115 *:* users:(("hbbs",pid=116473,fd=14)) tcp LISTEN 0 128 *:21118 *:* users:(("hbbs",pid=116473,fd=15)) tcp LISTEN 0 128 *:21119 *:* users:(("hbbr",pid=116496,fd=10)) tcp LISTEN 0 128 *:21116 *:* users:(("hbbs",pid=116473,fd=13)) tcp LISTEN 0 128 *:21117 *:* users:(("hbbr",pid=116496,fd=9))
-
关闭或杀死服务进程
pkill hbbs pkill hbbr
以上操作完毕后,二进制方式安装完毕。
第二种,官方脚本方式安装rustdesk服务,官方文档说明
-
下载官方sh安装脚本
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
-
将下载的install.sh文件添加执行权限
chmod +x install.sh
-
执行脚本
bash install.sh
-
脚本会自动安装在/opt目录中
ls /opt rustdesk
-
查看公钥密钥,并记住key公钥,稍后需要在客户端上填写公钥
cat /opt/rustdesk/id_ed25519.pub BQ5O3dwLmNfI9NIhHf123ertyui8S3klVKEMdzNmn1s=
-
查看服务启动项
######查看hbbs启动项,根据自身要求进行修改 cat /etc/systemd/system/rustdesksignal.service [Unit] Description=Rustdesk Signal Server [Service] Type=simple LimitNOFILE=1000000 #修改端口号为23416,-M优化了传输udp数据包大小 ExecStart=/opt/rustdesk/hbbs -r 0.0.0.0 -p 23416 -M 52428800 -k _ WorkingDirectory=/opt/rustdesk/ User=root Group=root Restart=always StandardOutput=append:/var/log/rustdesk/signalserver.log StandardError=append:/var/log/rustdesk/signalserver.error # Restart service after 10 seconds if node service crashes RestartSec=10 [Install] WantedBy=multi-user.target ######查看hbbr启动项,根据自身要求进行修改 cat /etc/systemd/system/rustdeskrelay.service [Unit] Description=Rustdesk Relay Server [Service] Type=simple LimitNOFILE=1000000 #修改端口号为23417 ExecStart=/opt/rustdesk/hbbr -p 23417 -k _ WorkingDirectory=/opt/rustdesk/ User=root Group=root Restart=always StandardOutput=append:/var/log/rustdesk/relayserver.log StandardError=append:/var/log/rustdesk/relayserver.error # Restart service after 10 seconds if node service crashes RestartSec=10 [Install] WantedBy=multi-user.target
-
重启启动服务
systemctl daemon-reload systemctl restart rustdesksignal.service #rustdesksignal是hbbs systemctl restart rustdeskrelay.service #rustdeskrelay是hbbr
-
查看服务启动状态
-
关闭或杀死服务进程
-
日志文件路径
/var/log/rustdesk/
第三种,Docker方式安装服务
-
使用官方源安装docker,加入 Docker 的 GPG 公钥和 apt 源
curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
-
使用apt安装docker
apt update apt install docker-ce docker-ce-cli containerd docker-compose-plugin
-
使用docker version命令查看是否安装成功
docker version
-
使用docker-compose version命令检查是否安装成功
docker-compose version docker-compose version 1.29.2, build unknown docker-py version: 5.0.3 CPython version: 3.11.2 OpenSSL version: OpenSSL 3.0.11 19 Sep 2023
-
使用docker compose version命令检查是否安装成功
docker compose version Docker Compose version v2.27.1
-
使用docker-compose方式构建服务
mkdir rustdesk && cd rustdesk
nano docker-compose.yml
services:
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r 0.0.0.0 -p 31116 -k _
volumes:
- ./data:/root
network_mode: "host"
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr -p 31117 -k _
volumes:
- ./data:/root
network_mode: "host"
restart: unless-stopped
-
查看公钥密钥,并记住key公钥,稍后需要在客户端上填写公钥
cat ./data/id_ed25519.pub sKSP5I7tkzEMzk5PGk7jenaYHIU9gd4b5s1n8ySqyEQ=
-
关闭docker-compose的rustdesk服务
在刚刚创建的docker-compose.yml文件目录中执行 docker-compose down Stopping hbbs ... done Stopping hbbr ... done Removing hbbs ... done Removing hbbr ... done
-
删除docker-compose的rustdesk服务镜像
docker-compose down --rmi local Stopping hbbs ... done Stopping hbbr ... done Removing hbbs ... done Removing hbbr ... done
客户端配置
rustdesk是全平台远程控制软件,请根据自身系统进行下载,点击此处进行客户端下载。
本例客户端为Windows 11 64bit(手机端配置操作方法也是相同)
/usr/lib/systemd/system
下的rustdesk.service
[Unit]
Description=RustDesk
Requires=network.target
After=systemd-user-sessions.service
[Service]
Type=simple
#ExecStart=/usr/bin/rustdesk --service 目录/usr/lib/systemd/system下的rustdesk.service更改为如下:
ExecStart=/usr/bin/rustdesk --server
# kill --tray and --server both
ExecStop=/usr/bin/pkill -f "rustdesk --"
# below two lines do not work, have to use above one line
#ExecStop=/usr/bin/pkill -f "rustdesk --tray"
#ExecStop=/usr/bin/pkill -f "rustdesk --server"
PIDFile=/run/rustdesk.pid
KillMode=mixed
TimeoutStopSec=30
User=root
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。