RustDesk远程桌面工具自建服务器教程
简介 RustDesk,工具如其名,基于高效的Rust语言构建的开源远程桌面工具。
优势:
(1)轻量:不论服务端还是客户端、不论哪个平台,软件小巧、功能完备。
(2)全平台支持:支持Android、Linux、Windows任意双向控制,iOS单向控制。
(3)安全可控:软件开源,服务端自建,通信加密。
(4)带宽高效:仅需2-3M即可流畅1080P,支持TCP打洞端对端P2P连接。
RustDesk官网:https://rustdesk.com/zh/
GitHub:https://github.com/rustdesk/rustdesk
运行原理
RustDesk自建服务器运行原理
自建服务器
免费的公共服务器非常卡,在国内也许网速会很慢或者无法访问。
RustDesk的优势在于可以使用自己的服务器,推荐使用国内主流云产品厂商,个人使用的腾讯云搭建服务器,价格不贵可以接受,相比于远程流畅度来说物超所值,且服务器唯自己所有,不用担心第三方远控软件造成的信息安全问题。
服务器要求
硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的 。
关于网络大小,如果控制端和被控端位于同一网段下时,不需要通过 relay server 中转,直接建立内网链接。
如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。
非直连情况下,播放全屏视频(1920x1080屏幕)实测近两分钟,带宽平均占用1.3Mbps左右。
Docker部署 在Docker部署和常规部署之间选择一个即可。
Linux/amd64
sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r <relay-server-ip[:port]>
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr
Linux/arm64v8
sudo docker image pull rustdesk/rustdesk-server:latest-arm64v8
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server:latest-arm64v8 hbbs -r <relay-server-ip[:port]>
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server:latest-arm64v8 hbbr
据我所知,–net=host 仅适用于 Linux,它让 hbbs/hbbr 可以看到对方真实的ip, 而不是固定的容器ip (172.17.0.1)。 如果–net=host运行正常,-p选项就不起作用了, 可以去掉。
请去掉 –net=host,如果您在非Linux系统上遇到无法连接的问题
1、常规部署 直接运行
This content is only supported in a ThunderSoft Docs
在服务器上运行 hbbs/hbbr (Centos 或 Ubuntu)。
./hbbs -r <hbbr运行所在主机的地址[:port]>
./hbbr
默认情况下,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)支持,对应端口可以不开。
- TCP(21115, 21116, 21117, 21118, 21119)
- UDP(21116) |端口号| 协议| 程序| 用途 |锚点| |---|---|---|---|---| |21115| tcp| HBBS| NAT类型测试| |21116| tcp/udp |HBBS| TCP| 打洞与连接服务/UDP ID注册与心跳服务| HBBS锚点| |21117| tcp| HBBR| 中继服务| HBBR锚点| |21118| tcp |HBBS| WebSocket服务| | |21119| tcp| HBBR| WebSocket转发| | 如果你想选择自己的端口,使用 “-h” 选项查看帮助。
2、守护进程
至此我们的自建服务器已经运行起来了,至此服务器完全可以使用RustDesk,但你会发现当你退出了服务器远程连接,服务器就自动停掉了,所以我们还需要将自建服务器的进程守护起来。
在pm2和systemd之间选择一个即可,建议使用systemd。
1、使用 pm2
pm2 start hbbs -- -r <relay-server-ip[:port]>
pm2 start hbbr
pm2
需要 nodejs v16+,如果你运行 pm2 失败(例如在 pm2 list
中看不到 hbbs/hbbr),请从 https://nodejs.org 下载并安装 LTS 版本的 nodejs。 如果你想让 hbbs/hbbr 在重启后自动运行,请查看 pm2 save
和 pm2 startup
。 更多关于 pm2。另一个不错的日志工具是 pm2-logrotate
。
hhbs的-r参数不是必须的,他只是方便你不用在客户端指定中继服务器,如果是默认21117端口,可以不填port。客户端指定的中继服务器优先级高于这个。
2、使用 systemd
官方建议使用PM2守护进程,如果你的主机没有其它使用Node.js工具的需求,只需要使用systemd来管理服务即可!
① HBBS
解压出来的hbbs文件先通过chmod +x hbbs
赋予可执行权限,先运行一次./hbbs
,生成用于客户端认证使用的公钥id_ed25519.pub
,随后用cat id_ed25519.pub
命令查看公钥并记下。然后通过喜欢的编辑器编辑/etc/systemd/system/hbbs.service
,将用于参考的以下配置根据需要进行修改并保存,这时也要将强制校验密钥以-k _
参数 写入启动命令中。
# systemd配置路径
# /etc/systemd/system/hbbs.service
[Unit]
Description=Rust Desk Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
# 设置运行路径
WorkingDirectory=/*程序路径*/rustdesk
# 可修改锚点端口,当前为21116(锚点)和21115(锚点-1)和21118(锚点+2)
# -r用于指定网卡IP(适用多网卡),-k参数用于强制校验客户端公钥,用于避免未授权的使用
ExecStart=/*程序路径*/rustdesk/hbbs -r 0.0.0.0 -p 21116 -k _
[Install]
WantedBy=multi-user.target
② HBBR
解压出来的hbbr文件先通过chmod +x hbbr
赋予可执行权限,然后通过喜欢的编辑器编辑/etc/systemd/system/hbbr.service
,将用于参考的以下配置根据需要进行修改并保存,同样将密钥校验以-k _
参数写入启动命令中。
# systemd配置路径
# /etc/systemd/system/hbbr.service
[Unit]
Description=Rust Desk Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
# 设置运行路径
WorkingDirectory=/*程序路径*/rustdesk
# 可修改锚点端口,当前为21117(锚点)和21119(锚点+2)
# -k参数用于强制校验 客户端公钥,用于避免未授权的使用
ExecStart=/*程序路径*/rustdesk/hbbr -p 21117 -k _
[Install]
WantedBy=multi-user.target
service
设置好后,即可通过service hbbs start
和service hbbr start
来启动这两项服务,启动后可以通过service hbbs status
和service hbbr status
查看进程的运行状态,显示绿色的Active即无误。
一切准备就绪后即可通过systemctl enable hbbs
和systemctl enable hbbr
允许它们开机自启。
端口放行
在腾讯云服务器上,进入服务器详情->防火墙->添加规则,然后编辑相应端口和规则即可,不必关心以下指令。
如果恰好你有能力搭建了一台物理主机,则需要你手动设置防火墙规则,iptables
、firewalld
、ufw
的命令分别如下,其中的端口请按照你的设置的进行放行(默认21115-21117),这里需要注意hbbs锚点端口必须同时放行tcp和udp。
# CentOS firewalld
firewall-cmd --zone=public --add-port=21115/tcp --permanent
firewall-cmd --zone=public --add-port=21116/tcp --permanent
firewall-cmd --zone=public --add-port=21116/udp --permanent
firewall-cmd --zone=public --add-port=21117/tcp --permanent
# Debian/Ubuntu ufw
ufw allow 21115/tcp
ufw allow 21116/tcp
ufw allow 21116/udp
ufw allow 21117/tcp
# iptables
iptables -I INPUT 1 -p tcp --dport 21115 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 21116 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 21116 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 21117 -j ACCEPT
iptables-save //保存(解决重启失效)
客户端连接
ID服务器填写你的服务器IP地址:21116
中继服务器填写你的服务器IP地址:21117
随后你只需要使用ID和密码即可使用自建服务器的RustDesk。
开机自启
在我们远程控制主机时,可能不得不完成重启的操作,远控软件不自启可不行,那么接下来我们一起来配置一下自启。
编辑文本文档 rustdesk.service
[Unit]
Description=RustDesk
Requires=network.target
After=systemd-user-sessions.service
[Service]
Type=simple
ExecStart=/usr/bin/rustdesk --service
PIDFile=/var/run/rustdesk.pid
KillMode=mixed
TimeoutStopSec=30
User=root
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
移动到 /usr/lib/systemd/system 文件夹下,执行:
sudo systemctl enable rustdesk
使用
systemctl status rustdesk
查看服务运行状态:
参考 【RustDesk】自建远程桌面服务替代TeamViewer/Todesk – Luminous' Home: https://luotianyi.vc/6542.html 安装 :: RustDesk文档: https://rustdesk.com/docs/zh-cn/self-host/install Working principle · Issue #594 · rustdesk/rustdesk: https://github.com/rustdesk/rustdesk/issues/594#issuecomment-1138342668 Systemd 入门教程:命令篇 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html Systemd 入门教程:实战篇 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html