RustDesk远程桌面工具自建服务器教程

RustDesk远程桌面工具自建服务器教程

Leon
2022-11-03 / 6 评论 / 2,206 阅读 / 正在检测是否收录...

RustDesk远程桌面工具自建服务器教程

同心抗疫,共度时艰。

  1. 简介

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

  1. 运行原理

1699645526510-1.png

RustDesk自建服务器运行原理

  1. 自建服务器

免费的公共服务器非常卡,在国内也许网速会很慢或者无法访问。

RustDesk的优势在于可以使用自己的服务器,推荐使用国内主流云产品厂商,个人使用的腾讯云搭建服务器,价格不贵可以接受,相比于远程流畅度来说物超所值,且服务器唯自己所有,不用担心第三方远控软件造成的信息安全问题。

这里总结了腾讯云的最新优惠产品(含有推广链接,可自行去推广):腾讯云云产品特惠专区

如果有兴趣和能力也可以自己搭建物理服务器,或者使用内网穿透在自己电脑上搭建服务器,这里不再赘述。

  1. 服务器要求

硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的。

关于网络大小,如果控制端和被控端位于同一网段下时,不需要通过 relay server 中转,直接建立内网链接。

如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。

非直连情况下,播放全屏视频(1920x1080屏幕)实测近两分钟,带宽平均占用1.3Mbps左右。

1699645530950-4.png

  1. 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. 常规部署

  2. 直接运行

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)
端口号协议程序用途锚点
21115tcpHBBSNAT类型测试
21116tcp/udpHBBSTCP 打洞与连接服务/UDP ID注册与心跳服务HBBS锚点
21117tcpHBBR中继服务HBBR锚点
21118tcpHBBSWebSocket服务
21119tcpHBBRWebSocket转发

如果你想选择自己的端口,使用 “-h” 选项查看帮助。

  1. 守护进程

至此我们的自建服务器已经运行起来了,至此服务器完全可以使用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 savepm2 startup。 更多关于 pm2。另一个不错的日志工具是 pm2-logrotate

hhbs的-r参数不是必须的,他只是方便你不用在客户端指定中继服务器,如果是默认21117端口,可以不填port。客户端指定的中继服务器优先级高于这个。

  1. 使用 systemd

官方建议使用PM2守护进程,如果你的主机没有其它使用Node.js工具的需求,只需要使用systemd来管理服务即可!

  1. 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
  1. 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 startservice hbbr start来启动这两项服务,启动后可以通过service hbbs statusservice hbbr status查看进程的运行状态,显示绿色的Active即无误。

1699645537105-7.png

1699645539336-10.png

一切准备就绪后即可通过systemctl enable hbbssystemctl enable hbbr允许它们开机自启。

  1. 端口放行

在腾讯云服务器上,进入服务器详情->防火墙->添加规则,然后编辑相应端口和规则即可,不必关心以下指令。

如果恰好你有能力搭建了一台物理主机,则需要你手动设置防火墙规则,iptablesfirewalldufw的命令分别如下,其中的端口请按照你的设置的进行放行(默认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 //保存(解决重启失效)
  1. 客户端连接

1699645543145-13.png

ID服务器填写你的服务器IP地址:21116

中继服务器填写你的服务器IP地址:21117

1699645545291-16.png

随后你只需要使用ID和密码即可使用自建服务器的RustDesk。

  1. 开机自启

在我们远程控制主机时,可能不得不完成重启的操作,远控软件不自启可不行,那么接下来我们一起来配置一下自启。

编辑文本文档 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

查看服务运行状态:

1699645547864-19.png

  1. 参考

  2. 【RustDesk】自建远程桌面服务替代TeamViewer/Todesk – Luminous' Home: https://luotianyi.vc/6542.html
  3. 安装 :: RustDesk文档: https://rustdesk.com/docs/zh-cn/self-host/install/
  4. Working principle · Issue #594 · rustdesk/rustdesk: https://github.com/rustdesk/rustdesk/issues/594#issuecomment-1138342668
  5. Systemd 入门教程:命令篇 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
  6. Systemd 入门教程:实战篇 - 阮一峰的网络日志: https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
0

评论 (6)

取消
  1. 头像
    frgnbpdvje
    Windows 10 · Google Chrome

    文章的确不错啊https://www.cscnn.com/

    回复
  2. 头像
    ulxmmbmqqb
    Windows 10 · Google Chrome

    看的我热血沸腾啊www.jiwenlaw.com

    回复
  3. 头像
    ihcwjjjwjw
    Windows 10 · Google Chrome

    看的我热血沸腾啊https://www.ea55.com/

    回复
  4. 头像
    gfgipwqdql
    Windows 10 · Google Chrome

    想想你的文章写的特别好

    回复
  5. 头像
    hvybcccdwz
    Windows 10 · Google Chrome

    叼茂SEO.bfbikes.com

    回复
  6. 头像
    youerli
    Windows 10 · Google Chrome

    控制端和被控端的 rustdesk 都需要设置中继网络吧。你没写呢

    回复