1. 项目背景与需求分析
作为一名经常需要远程访问实验室服务器的研究生,我遇到了一个典型的内网穿透问题:实验室的Ubuntu服务器位于校园网内部,无法直接从外部网络访问。虽然市面上有TeamViewer、ToDesk等商业远程控制方案,但在实际使用中经常遇到卡顿、延迟高的问题,特别是在跨运营商网络环境下表现更差。
经过多方对比测试,我最终选择了RustDesk这款开源的远程桌面解决方案。它最大的优势在于支持自建中继服务器,完全掌控数据传输链路,避免依赖第三方服务器带来的性能瓶颈和隐私风险。以下是具体的需求场景:
- 核心痛点:校园网内部Ubuntu服务器无公网IP,校外无法直接访问
- 现有方案缺陷:商业远程工具存在卡顿、延迟高、隐私顾虑等问题
- 技术选型:RustDesk开源版 + 自建公网中继服务器
- 目标架构:
- 公网VPS:部署RustDesk服务端(中继+信令)
- 控制端:校外Windows电脑
- 被控端:校园网内Ubuntu服务器
2. 环境准备与服务器选型
2.1 公网服务器选择建议
选择适合的VPS是搭建稳定中继服务的基础。根据实测经验,推荐以下配置:
| 参数 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 1核 | 2核 | 处理多路视频编码转发 |
| 内存 | 1GB | 2GB | 每个会话约消耗100MB内存 |
| 带宽 | 5Mbps | 10Mbps | 1080P视频需3-5Mbps/路 |
| 磁盘 | 10GB | 20GB | 日志和数据库存储 |
| 地理位置 | - | 靠近用户 | 降低网络延迟 |
实测发现:阿里云香港/腾讯云新加坡等亚太区域节点,对国内跨运营商访问效果较好,平均延迟在80-150ms之间。
2.2 系统环境配置
以Ubuntu 20.04 LTS为例,部署前需要确保:
bash复制# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础依赖
sudo apt install -y curl wget git build-essential \
libssl-dev libx11-dev libxext-dev libxfixes-dev \
libxrender-dev libxcb1-dev libxcb-render0-dev \
libxcb-shape0-dev libxcb-randr0-dev
特别提醒:如果服务器内存小于1GB,需要添加swap空间避免OOM:
bash复制# 创建2GB swap文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
3. RustDesk服务端部署详解
3.1 二进制安装与配置
推荐使用官方编译的静态链接二进制文件,避免复杂的编译过程:
bash复制# 下载最新版本(请替换为实际版本号)
wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.9/rustdesk-server-linux-amd64.zip
unzip rustdesk-server-linux-amd64.zip
cd amd64
# 生成密钥对(重要!)
./hbbs -k
密钥文件说明:
id_ed25519.pub:公钥,客户端需要配置id_ed25519:私钥,务必妥善保管
3.2 系统服务配置
创建systemd服务确保进程常驻:
bash复制sudo tee /etc/systemd/system/rustdesk-hbbs.service <<EOF
[Unit]
Description=RustDesk ID Server
After=network.target
[Service]
Type=simple
ExecStart=$(pwd)/hbbs -r <公网IP>:21117
WorkingDirectory=$(pwd)
User=root
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/rustdesk-hbbr.service <<EOF
[Unit]
Description=RustDesk Relay Server
After=network.target
[Service]
Type=simple
ExecStart=$(pwd)/hbbr
WorkingDirectory=$(pwd)
User=root
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now rustdesk-hbbs rustdesk-hbbr
关键参数说明:
-r:指定中继服务器地址,格式为IP:端口- 默认端口:
- 21115(TCP):hbbs监听端口
- 21116(TCP/UDP):hbbr监听端口
- 21117(TCP):网页API端口
3.3 防火墙配置
确保防火墙放行必要端口:
bash复制sudo ufw allow 21115:21119/tcp
sudo ufw allow 21116/udp
sudo ufw enable
对于云服务器,还需在安全组规则中添加相应入站规则。
4. 客户端配置实战
4.1 Windows控制端配置
- 下载安装官方客户端:RustDesk官网
- 配置ID服务器:
- 打开设置 → 网络 → ID服务器
- 输入公网IP或域名
- 密钥填写
id_ed25519.pub文件内容
- 高级设置建议:
- 编码器优先选择H.265(节省带宽)
- 画质根据网络状况调整
- 启用TCP直连(减少延迟)
4.2 Ubuntu被控端配置
对于Ubuntu服务器,建议使用命令行安装:
bash复制wget https://github.com/rustdesk/rustdesk/releases/download/1.2.3/rustdesk-1.2.3-x86_64.deb
sudo apt install ./rustdesk-1.2.3-x86_64.deb
配置服务端地址:
bash复制rustdesk --server <公网IP> --key <公钥内容>
设置自启动(适用于无GUI环境):
bash复制sudo tee /etc/systemd/system/rustdesk.service <<EOF
[Unit]
Description=RustDesk Remote Desktop
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/rustdesk --server <公网IP> --key <公钥内容>
User=root
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now rustdesk
5. 网络优化与安全加固
5.1 网络传输优化
-
端口转发优化:
bash复制# 启用TCP BBR拥塞控制 echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
MTU调优:
bash复制# 检测最佳MTU值(需在客户端执行) ping -M do -s 1472 <服务器IP> # 根据结果调整(如返回值为1452,则最佳MTU=1452+28=1480) sudo ifconfig eth0 mtu 1480
5.2 安全防护措施
-
密钥定期轮换:
bash复制# 每月自动轮换密钥 crontab -e # 添加: 0 0 1 * * cd /opt/rustdesk && ./hbbs -k && systemctl restart rustdesk-hbbs -
访问白名单:
bash复制# 使用iptables限制访问IP sudo iptables -A INPUT -p tcp --dport 21115 -s <允许IP> -j ACCEPT sudo iptables -A INPUT -p tcp --dport 21115 -j DROP -
日志监控:
bash复制# 使用fail2ban防御暴力破解 sudo apt install fail2ban sudo tee /etc/fail2ban/jail.d/rustdesk.conf <<EOF [rustdesk] enabled = true port = 21115,21116 filter = rustdesk logpath = /var/log/rustdesk.log maxretry = 3 bantime = 86400 EOF
6. 故障排查与性能调优
6.1 常见问题解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 防火墙未放行端口 | 检查服务器和本机防火墙规则 |
| 画面卡顿 | 带宽不足/编码器选择不当 | 降低分辨率或切换编码器 |
| 鼠标不同步 | 被控端DPI设置问题 | 双方使用相同DPI缩放比例 |
| 文件传输失败 | 临时目录权限不足 | chmod 777 /tmp/rustdesk |
| 音频无法传输 | PulseAudio服务未启动 | systemctl --user start pulseaudio |
6.2 性能监控命令
实时监控服务器负载:
bash复制# 查看网络流量
iftop -i eth0 -P
# 查看进程资源占用
htop
# RustDesk专用监控
watch -n 1 "netstat -antup | grep -E 'hbbs|hbbr'"
6.3 延迟优化技巧
-
QoS标记(适用于有管理权限的网络):
bash复制# 对RustDesk流量进行优先处理 sudo tc qdisc add dev eth0 root handle 1: htb sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 10mbit ceil 10mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \ match ip dport 21116 0xffff flowid 1:10 -
ARP缓存优化:
bash复制# 防止ARP缓存过期导致延迟波动 echo "net.ipv4.neigh.default.gc_stale_time=3600" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
经过三个月的实际使用,这套自建方案在跨省教育网访问场景下,平均延迟从商业方案的300ms+降低到120ms以内,文件传输速度提升5-8倍。最重要的是完全掌控了数据链路,不再受限于第三方服务的稳定性。对于需要长期远程维护内网设备的场景,这种方案值得投入时间部署。