固定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 元,做域名映射。
使用 ddns-go 定时把本地 IP 映射到域名。
后续直接用域名作为固定 IP。
下载服务器端软件
下载地址:https://github.com/rustdesk/rustdesk-server/releases
选择 linux-amd64,右键复制链接,然后在服务器上找个位置用 wget 下载(链接换成自己复制的)。比如我这里下载到 root 用户家目录。
wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.14/rustdesk-server-linux-amd64.zip
然后用 unzip 解压:
unzip rustdesk-server-linux-amd64.zip
用 mv 命令把目录重命名为 rustdesk1.1.14:
mv amd64 rustdesk1.1.14
然后进入 rustdesk1.1.14 目录
cd rustdesk1.1.14
也可以先在本地下载再上传到服务器,服务器端有时会拉不动 GitHub 文件。
使用
RustDesk 提供了安装版的软件包(分别下载 hbbr 和 hbbs,使用 sudo dpkg -i 安装包名),支持用 systemd 管理服务。
这里我用的是免安装版,直接运行即可。后期升级换版只要替换文件,灵活一些。
RustDesk 服务端由两部分组成:
- hbbs:负责客户端 ID 注册、在线状态维护以及协调客户端之间建立 P2P 直连的信令服务器。
- hbbr:在 P2P 连接失败时提供数据中转服务的中继服务器。
确保当前工作路径在 RustDesk 软件包目录下。
创建一个名为 rustdeskR 的 tmux 会话:
tmux new -s rustdeskR
执行 hbbr
./hbbr
按 Ctrl + B,然后再按 D 退出当前 tmux 会话(后台运行)。
创建一个名为 rustdeskS 的 tmux 会话:
tmux new -s rustdeskS
执行 hbbs
./hbbs
然后用同样方式退出 tmux 会话。查看当前目录可以看到一个 .pub 文件,这是公钥文件,后面被控端/控制端连接这个服务器时,需要把它的内容作为验证“密码”。
用 cat 命令查看文件内容,并复制下来。
电脑/手机客户端
客户端下载地址:https://github.com/rustdesk/rustdesk/releases
Windows 电脑被控端建议下载 MSI 安装版,方便设置开机自启动。运行后点开 ID 右侧的三点进入设置。
网络设置:
点开网络,选择解锁网络设置(安装版有),然后点击编辑 ID/中继服务器。ID 服务器和中继服务器都填前面部署服务的服务器公网地址,key 填前一步查看到的公钥内容,最后点确定。
查看状态:
回到主页可以在底部看到连接状态,成功连接服务器会显示 就绪。
固定密码:
可以自行设置固定密码,方便随时连接。
存在问题
高分辨率屏幕建议提前设置自适应屏幕,否则容易卡死。
同时只能有一个设备连接。
每次服务器重启,或者 RustDesk server 卡死,都需要重新启动后台。
画质设置 AV1 效果最好。
没有内置流量统计功能。
后台脚本
#!/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 安装:
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统计的是从系统启动开始的流量数据,如果统计过程中有系统重启,统计数据可能会被重置。
统计查看
查看实时流量统计
vnstat -l
查看指定网络接口的实时流量统计
vnstat -l -i eth0
按小时查看
vnstat -h
按天查看
vnstat -d
按月查看
vnstat -m
输出项说明
rx Receive接收流量
tx Transmit发送流量
total 总流量,rx + tx
avg.rate 平均速率,可以用于评估带宽占用。是基于实际数据传输期间的平均速率,不包括没有流量的时间段。如果基于全天总流量除以天,会算出较低的平均值(相当于流量全天均匀分布),不能体现出峰值数据。
图表生成
vnstati 是 vnstat 的附属工具,专门用于生成基于流量统计数据的 PNG 图表。
vnstati 安装:
sudo apt update
sudo apt install vnstati
生成每日流量图表
sudo vnstati -d -i eth0 -o ./daily.png