RustDesk搭建服务器

RustDesk搭建服务器

固定IP

1.阿里云租服务器

2 核(vCPU)

2 GiB 内存

峰值带宽 2Mbps

服务器开放端口

服务器防火墙设置放行端口:
21115、21117、21118、21119 开放 TCP
21116 开放 TCP 和 UDP

服务 端口 协议 用途
hbbs 21115 TCP NAT 类型测试
hbbs 21116 TCP/UDP ID 注册、心跳、TCP 打洞与连接
hbbr 21117 TCP 中继服务
hbbs 21118 TCP WebSocket 服务(支持网页客户端)
hbbr 21119 TCP WebSocket 转发(支持网页客户端)

2.购买域名

通过DnsPod,购买一年域名14元,进行域名映射

使用jeessy2/ddns-go: Simple and easy to use DDNS. Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy, Namecheap, NameSilo…进行定时本地ip映射域名。

使用域名作为固定ip

下载服务器端软件

下载地址:https://github.com/rustdesk/rustdesk-server/releases

选择linux-amd64,在上面右键复制链接,然后在服务器上找一个位置使用 wget 下载(链接换成自己复制的),比如我就下载到 root 用户家目录

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

然后使用 unzip 目录解压

1
unzip rustdesk-server-linux-amd64.zip

mv 命令重命名为 rustdesk1.1.14

1
mv amd64 rustdesk1.1.14

然后进入 rustdesk1.1.14 目录

1
cd rustdesk1.1.14

也可以本地网络下载后上传到服务器端,服务器端可能无法下载github文件。

使用

1.RustDesk提供了安装版的软件打包(分别下载 hbbr 和 hbbs,安装使用 sudo dpkg -i 安装包名),支持使用 systemd 服务管理

2.此处我使用的是免安装版,可以直接运行的,后期升级换版更新文件即可,使用灵活度更高。
RustDesk 服务端是两部分组成:

  • hbbs:负责客户端 ID 注册、在线状态维护以及协调客户端之间建立 P2P 直连的信令服务器。
  • hbbr:在 P2P 连接失败时提供数据中转服务的中继服务器。

确保当前工作路径在 RustDesk 软件包目录下

创建一个复用终端名为 rustdeskR

1
tmux new -s rustdeskR

执行 hbbr

1
./hbbr

Ctrl+B,然后再按D退出当前复用终端(后台运行)

创建一个复用终端名为 rustdeskS

1
tmux new -s rustdeskS

执行 hbbs

1
./hbbs

然后同样操作退出复用终端,查看当前目录可以看到有个 .pub 文件,这是公钥文件,后面被控端/控制端连接这个服务器需要这个文件内容作为验证“密码”

使用cat命令查看文件内容,把内容复制下来

电脑/手机客户端

客户端下载地址:https://github.com/rustdesk/rustdesk/releases

Windows 电脑被控端建议下载 MSI 安装版,以保证可以实现开机自启动,运行后点开 ID 右侧的三点打开设置

网络设置:

点开网络,点解锁网络设置(安装版有),然后可以点击编辑ID/中继服务器,ID 服务器和中继服务器都填前面部署服务的服务器公网地址,key 就填前一步查看到的公钥内容,点确定

查看状态:

回到主页可以看到底板显示连接状态,成功连接服务器显示就绪

固定密码:

可以自行设置固定密码,以便随时连接

存在问题

对于高分辨率屏幕,需要提前设置自适应屏幕,不然卡死

同时只能有一个设备连接。

每次服务器重启或者当RuskDesk serve卡死,需要重新启动后台

画质设置AV1效果最好

没有流量统计功能

后台脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash

# 定义 RustDesk 软件包所在的目录名
RUSTDESK_DIR="rustdesk1.1.14"

echo "--------------------------------------------------"
echo "RustDesk 服务启动脚本"
echo "--------------------------------------------------"

# 检查当前目录是否是 RustDesk 软件包目录
if [ "$(basename "$(pwd)")" != "$RUSTDESK_DIR" ]; then
echo "警告:当前目录不是 '$RUSTDESK_DIR'。"
echo "请确保你在 '$RUSTDESK_DIR' 目录下运行此脚本,或者手动进入该目录。"
read -p "是否尝试进入 '$RUSTDESK_DIR' 目录?(y/n): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
if [ -d "$RUSTDESK_DIR" ]; then
echo "尝试进入 '$RUSTDESK_DIR'..."
cd "$RUSTDESK_DIR" || { echo "进入目录失败,请检查目录是否存在或权限。"; exit 1; }
echo "已进入 '$RUSTDESK_DIR' 目录。"
else
echo "错误:目录 '$RUSTDESK_DIR' 不存在于当前路径下。"
echo "请手动切换到正确的 RustDesk 软件包目录后再运行此脚本。"
exit 1
fi
else
echo "用户选择不进入目录,脚本退出。"
exit 1
fi
fi

echo "当前工作目录:$(pwd)"
echo ""

# --- 启动 hbbr 服务 ---
echo "正在启动 hbbr 服务..."
echo "将创建一个名为 'rustdeskR' 的 tmux 会话。"
echo "服务启动后,请按 'Ctrl+B',然后按 'D' 将会话放到后台运行。"
sleep 2 # 稍作等待,让用户看到提示

# 检查 rustdeskR 会话是否存在,如果存在则连接,否则创建
tmux has-session -t rustdeskR 2>/dev/null
if [ $? -eq 0 ]; then
echo "tmux 会话 'rustdeskR' 已存在,正在尝试连接..."
tmux attach-session -t rustdeskR
else
echo "创建新的 tmux 会话 'rustdeskR' 并运行 ./hbbr..."
tmux new -s rustdeskR "./hbbr"
fi

echo ""
echo "hbbr 服务已启动或已连接会话。请按 Ctrl+B, D 分离会话。"
echo "--------------------------------------------------"

# --- 启动 hbbs 服务 ---
echo "正在启动 hbbs 服务..."
echo "将创建一个名为 'rustdeskS' 的 tmux 会话。"
echo "服务启动后,请按 'Ctrl+B',然后按 'D' 将会话放到后台运行。"
sleep 2 # 稍作等待,让用户看到提示

# 检查 rustdeskS 会话是否存在,如果存在则连接,否则创建
tmux has-session -t rustdeskS 2>/dev/null
if [ $? -eq 0 ]; then
echo "tmux 会话 'rustdeskS' 已存在,正在尝试连接..."
tmux attach-session -t rustdeskS
else
echo "创建新的 tmux 会话 'rustdeskS' 并运行 ./hbbs..."
tmux new -s rustdeskS "./hbbs"
fi

echo ""
echo "hbbs 服务已启动或已连接会话。请按 Ctrl+B, D 分离会话。"
echo "--------------------------------------------------"
echo "所有服务启动完成。你可以使用 'tmux attach -t rustdeskR' 或 'tmux attach -t rustdeskS' 重新连接会话。"
echo "使用 'tmux ls' 可以查看所有 tmux 会话。"

画质编码

编码格式 编码效率 (相对H.264) 传输画质 (相同码率下) 兼容性/普及度 授权费用 主要应用场景
H.264 基准 (1x) 良好 极高 几乎所有视频应用,直播,会议
VP8 略低于H.264 一般 较低 (WebM) 免费 WebM (逐渐被VP9取代)
VP9 1.3x - 2x 优秀 高 (WebM) 免费 YouTube, Netflix高清/4K流媒体
H.265 1.5x - 2x 极佳 中高 有 (复杂) 4K/8K UHD内容,部分OTT流媒体
AV1 2x - 3x 最佳 正在提升 免费 下一代Web视频,低带宽高画质场景

从传输画质的角度看,AV1 > H.265 > VP9 > H.264 > VP8。越靠前的编码格式,在相同带宽下能提供越好的视觉体验,或在相同视觉体验下所需带宽越低。

流量统计

vnstat
vnstat是个Linux下基于shell终端的网络流量监控工具,可帮助用户在不同时间段内监视,记录和查看网络统计信息。它提供了各种网络接口的汇总,允许用户以详细表或命令行统计视图的形式查看小时,每日,每月统计。

vnstat安装

1
2
3
4
5
6
7
8
9
sudo apt update
sudo apt install vnstat
sudo systemctl start vnstat
sudo systemctl enable vnstat
systemctl status vnstat
常见问题
安装后要等一段时间累积数据,使用vnstat探查才会有数据,否则会提示eth0: Not enough data available yet
vnstat统计的是从系统启动开始的流量数据,如果统计过程中有系统重启,统计数据可能会被重置。
统计查看

查看实时流量统计

1
vnstat -l

查看指定网络接口的实时流量统计

1
vnstat -l -i eth0

按小时查看

1
vnstat -h

按天查看

1
vnstat -d

按月查看

1
vnstat -m

输出项说明

1
2
3
4
rx Receive接收流量
tx Transmit发送流量
total 总流量,rx + tx
avg.rate 平均速率,可以用于评估带宽占用。是基于实际数据传输期间的平均速率,不包括没有流量的时间段。如果基于全天总流量除以天,会算出较低的平均值(相当于流量全天均匀分布),不能体现出峰值数据。

图表生成

vnstati是vnstat的一个附属工具,专门用于生成基于流量统计数据的PNG图表

vnstati安装

1
2
sudo apt update
sudo apt install vnstati

生成每日流量图表

1
sudo vnstati -d -i eth0 -o ./daily.png