简介
RustDesk 是一个开源的远程桌面应用程序,专为自托管设计,作为TeamViewer、AnyDesk等商业解决方案的替代品。该项目采用Rust语言开发,提供了安全、高效、跨平台的远程访问能力,让用户完全掌控自己的数据,无需依赖第三方服务。
🔗 GitHub地址:
https://github.***/rustdesk/rustdesk
⚡ 核心价值:
自托管远程桌面 · 跨平台支持 · 安全可控 · 开源免费
项目特色:
-
完全开源:基于MIT许可证,代码完全透明
-
自托管支持:可以部署自己的中继服务器
-
跨平台:支持Windows、Linux、macOS、Android、iOS
-
无需配置:开箱即用,自动NAT穿透
-
安全加密:端到端加密,保护远程会话安全
-
高性能:优化的视频编码和网络传输
主要功能
1. 核心架构
2. 功能矩阵
| 功能类别 |
核心能力 |
技术实现 |
|---|---|---|
| 远程访问 |
桌面控制,远程协助,多会话管理 |
Rust, Sciter/Flutter, 视频编码 |
| 文件传输 |
安全文件交换,拖拽支持,批量传输 |
TCP/UDP, 加密传输, 断点续传 |
| 音频视频 |
语音通话,视频会议,音频重定向 |
Opus, VP8/VP9, 音频捕获 |
| 安全特性 |
端到端加密,访问控制,会话审计 |
AES加密, 密钥交换, 访问日志 |
| 网络优化 |
NAT穿透,智能路由,带宽适应 |
ICE, STUN, TURN, QoS管理 |
| 管理功能 |
用户管理,设备管理,权限控制 |
Web管理界面, RESTful API |
3. 技术特性
-
高性能编码:基于libvpx和硬件加速编码
-
低延迟传输:优化的网络协议和拥塞控制
-
资源高效:内存占用低,CPU使用率优化
-
易于部署:提供Docker容器和二进制包
-
可扩展架构:支持插件和自定义功能开发
-
多语言支持:国际化界面,多语言文档
安装与配置
1. 环境要求
# 基础要求
操作系统: Windows 7+, Linux (Ubuntu 16.04+), macOS 10.12+
内存: 2GB+ RAM (推荐4GB)
存储: 500MB+ 可用空间
网络: 稳定互联网连接
# 服务器要求 (自托管)
CPU: 2核+ (推荐4核)
内存: 4GB+ RAM (推荐8GB)
存储: 10GB+ 可用空间
带宽: 100Mbps+ (根据并发用户数调整)
# 客户端要求
分辨率: 支持各种分辨率,包括4K
网络: 局域网或互联网连接
2. 安装方式
桌面客户端安装:
# Windows
# 下载安装包从GitHub Releases
# 或使用winget
winget install RustDesk.RustDesk
# Linux (Ubuntu/Debian)
wget https://github.***/rustdesk/rustdesk/releases/latest/download/rustdesk.deb
sudo dpkg -i rustdesk.deb
sudo apt-get install -f
# Linux (AppImage)
wget https://github.***/rustdesk/rustdesk/releases/latest/download/rustdesk-linux-x86_64.AppImage
chmod +x rustdesk-linux-x86_64.AppImage
./rustdesk-linux-x86_64.AppImage
# macOS
brew install --cask rustdesk
# 或手动下载
curl -LO https://github.***/rustdesk/rustdesk/releases/latest/download/rustdesk.dmg
hdiutil attach rustdesk.dmg
sudo cp -R /Volumes/RustDesk/RustDesk.app /Applications/
服务器端部署:
# 使用Docker部署中继服务器
docker run -d \
--name rustdesk-server \
-p 21115:21115 \
-p 21116:21116 \
-p 21116:21116/udp \
-p 21117:21117 \
-p 21118:21118 \
-p 21119:21119 \
-v /path/to/data:/root \
rustdesk/rustdesk-server:latest
# 或使用docker-***pose
version: '3'
services:
rustdesk-server:
image: rustdesk/rustdesk-server:latest
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
- "21117:21117"
- "21118:21118"
- "21119:21119"
volumes:
- ./data:/root
restart: unless-stopped
源码编译安装:
# 安装依赖
sudo apt install -y git curl wget nasm yasm libgtk-3-dev clang libxcb-dev cmake
# 安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# 克隆源码
git clone https://github.***/rustdesk/rustdesk.git
cd rustdesk
# 安装vcpkg依赖
git clone https://github.***/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install libvpx libyuv opus aom
# 编译
cargo build --release
# 运行
./target/release/rustdesk
3. 配置说明
客户端配置:
# 配置文件示例 (~/.config/rustdesk/rustdesk.toml)
[options]
id_server = "rs-ny.rustdesk.***"
relay_server = "rs-ny.rustdesk.***"
api_server = "https://api.rustdesk.***"
encryption_key = "your_encryption_key"
enable_file_transfer = true
enable_audio = true
enable_clipboard = true
quality = "balanced"
resolution = "auto"
fps = 30
bitrate = 5000
[security]
require_password = true
password = "your_secure_password"
two_factor_auth = false
allow_remote_restart = false
[***work]
direct_first = true
upnp = true
hole_punching = true
relay_timeout = 3000
服务器配置:
# 中继服务器配置 (hbbs.toml)
[***work]
listen_addr = "0.0.0.0:21116"
public_addr = "your.domain.***:21116"
udp_listen_addr = "0.0.0.0:21116"
[security]
key = "your_secure_key"
encryption = true
allow_anonymous = false
[database]
type = "sqlite"
path = "/data/rustdesk.db"
[log]
level = "info"
file = "/var/log/rustdesk/hbbs.log"
[api]
enabled = true
listen_addr = "0.0.0.0:21119"
4. 网络配置
防火墙规则:
# 开放必要端口
sudo ufw allow 21115/tcp # ID服务器
sudo ufw allow 21116/tcp # 中继服务器(TCP)
sudo ufw allow 21116/udp # 中继服务器(UDP)
sudo ufw allow 21117/tcp # 网络穿透
sudo ufw allow 21118/tcp # 文件传输
sudo ufw allow 21119/tcp # API服务
# 或使用firewalld
sudo firewall-cmd --permanent --add-port=21115-21119/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --reload
域名和SSL配置:
# Nginx反向代理配置
server {
listen 443 ssl;
server_name your.rustdesk.domain;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:21119;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
使用指南
1. 基本工作流
2. 基本使用
快速连接:
-
启动RustDesk客户端
-
查看本机ID和密码(或设置固定密码)
-
在远程客户端输入本机ID和密码
-
点击连接建立远程会话
自托管连接:
-
部署私有中继服务器
-
配置客户端使用私有服务器
-
设置访问控制和用户权限
-
通过内部网络或VPN连接
文件传输:
# 通过命令行传输文件
rustdesk --file-send /path/to/file --id REMOTE_ID --password PASSWORD
# 或使用GUI界面拖拽文件
# 在会话窗口中拖拽文件到远程桌面
多显示器支持:
-
在连接设置中选择目标显示器
-
或使用快捷键切换显示器
-
支持跨显示器拖拽操作
-
可调整分辨率和缩放比例
3. 高级功能
命令行操作:
# 启动无界面服务模式
rustdesk --service
# 指定服务器连接
rustdesk --id-server your.server.*** --relay-server your.server.***
# 批量部署配置
rustdesk --config /path/to/config.toml --silent
# 远程重启
rustdesk --restart-remote ID --password PASSWORD
# 会话录制
rustdesk --record --output /path/to/recording.mp4
API集成:
# Python API客户端示例
import requests
import json
class RustDeskAPI:
def __init__(self, base_url, api_key):
self.base_url = base_url
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
def get_devices(self):
response = requests.get(f'{self.base_url}/api/devices', headers=self.headers)
return response.json()
def start_session(self, device_id, password):
payload = {
'device_id': device_id,
'password': password,
'quality': 'high',
'resolution': '1920x1080'
}
response = requests.post(f'{self.base_url}/api/sessions', json=payload, headers=self.headers)
return response.json()
# 使用示例
api = RustDeskAPI('https://your-server.***:21119', 'your-api-key')
devices = api.get_devices()
session = api.start_session('device-id', 'password')
自动化脚本:
#!/bin/bash
# 自动化远程维护脚本
REMOTE_ID="123456789"
PASSWORD="secure_password"
SERVER="your.rustdesk.server"
# 检查连接状态
if rustdesk --check-connection --id $REMOTE_ID --server $SERVER; then
echo "设备在线,开始维护..."
# 执行远程命令
rustdesk --exec "apt update && apt upgrade -y" \
--id $REMOTE_ID \
--password $PASSWORD \
--server $SERVER
# 传输更新文件
rustdesk --file-send ./updates.tar.gz \
--id $REMOTE_ID \
--password $PASSWORD \
--server $SERVER
echo "维护完成"
else
echo "设备离线,无法执行维护"
exit 1
fi
4. 管理功能
用户管理:
# 使用Web管理界面
# 或通过API管理用户
# 创建用户
curl -X POST "https://server:21119/api/users" \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"username": "newuser",
"password": "securepassword",
"email": "user@example.***",
"role": "user"
}'
# 设备管理
curl -X GET "https://server:21119/api/devices" \
-H "Authorization: Bearer API_KEY"
会话监控:
# 实时会话监控
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
if data['type'] == 'session_start':
print(f"新会话开始: {data['device_id']}")
elif data['type'] == 'session_end':
print(f"会话结束: {data['device_id']}")
ws = websocket.WebSocketApp("wss://server:21119/ws/sessions",
header={"Authorization": "Bearer API_KEY"})
ws.on_message = on_message
ws.run_forever()
应用场景实例
案例1:企业远程办公支持
场景:科技公司需要为远程员工提供技术支持
解决方案:
实施效果:
-
支持效率 提升300%
-
安全事件 零发生
-
运维成本 降低60%
-
用户满意度 95%+
案例2:教育机构远程教学
场景:大学需要远程实验室访问解决方案
解决方案:
-
部署校园内网RustDesk服务器
-
配置实验室计算机自动连接
-
设置学生访问权限和时间限制
-
实现远程实验操作和指导
技术实现:
-
网络优化:校内高速网络,低延迟连接
-
资源管理:实验室计算机资源分配和监控
-
访问控制:基于课程和时间的访问权限
-
会话记录:教学会话录制和回放
-
批量部署:自动化安装和配置管理
实施效果:
-
实验室利用率 提高200%
-
教学成本 降低70%
-
学生访问便利性 显著提升
-
技术支持需求 减少80%
案例3:制造业设备远程维护
场景:工厂设备需要远程监控和维护
解决方案:
# 工业环境配置
industrial_deployment:
servers:
- name: "main-server"
location: "控制中心"
redundancy: true
bandwidth: "1Gbps"
- name: "backup-server"
location: "备用站点"
failover: true
bandwidth: "500Mbps"
clients:
- type: "工业PC"
count: 50
os: "Windows IoT"
requirements:
- "7x24运行"
- "自动重连"
- "硬件编码"
- type: "移动设备"
count: 20
os: "Android"
requirements:
- "现场巡检"
- "实时视频"
- "离线支持"
security:
encryption: "AES-256"
authentication: "证书+密码"
audit: "完整会话日志"
***pliance: "工业安全标准"
实施效果:
-
设备停机时间 减少90%
-
维护响应速度 <5分钟
-
差旅成本 消除
-
生产效率 提高25%
案例4:IT服务提供商
场景:MSP需要为客户提供远程支持服务
解决方案:
-
多租户服务器架构
-
客户隔离和资源分配
-
计费和使用量统计
-
客户自助服务门户
服务特性:
-
多租户支持:客户数据完全隔离
-
弹性计费:按使用量或订阅制计费
-
品牌定制: white-label客户端定制
-
API集成:与现有工单系统集成
-
报表分析:使用量统计和性能报告
实施效果:
-
服务交付效率 提高5倍
-
客户满意度 显著提升
-
运营成本 降低40%
-
业务可扩展性 极大增强
生态系统与集成
1. 社区与支持
获取帮助:
-
📚 官方文档:GitHub Wiki和项目文档
-
💬 社区讨论:GitHub Discussions和Discord
-
🐛 问题报告:GitHub Issues
-
🔄 更新通知:GitHub Releases
贡献指南:
-
Fork项目仓库
-
创建特性分支
-
编写代码和测试
-
提交Pull Request
-
参与代码审查
2. 相关工具集成
监控系统集成:
# Prometheus监控配置
scrape_configs:
- job_name: 'rustdesk'
static_configs:
- targets: ['rustdesk-server:21119']
metrics_path: '/metrics'
scrape_interval: 15s
# Grafana仪表板
dashboard:
panels:
- title: "活跃会话数"
query: 'rustdesk_sessions_active'
- title: "网络吞吐量"
query: 'rate(rustdesk_bytes_transferred[5m])'
- title: "连接成功率"
query: 'rustdesk_connections_su***ess / rustdesk_connections_total'
自动化部署:
# Ansible部署脚本
- name: Deploy RustDesk Server
hosts: rustdesk_servers
vars:
rustdesk_version: "1.2.0"
server_port: 21116
admin_password: "{{ vault_rustdesk_password }}"
tasks:
- name: Install dependencies
apt:
name:
- docker.io
- docker-***pose
state: present
- name: Create data directory
file:
path: /opt/rustdesk/data
state: directory
mode: '0755'
- name: Deploy with Docker ***pose
docker_***pose:
project_src: /opt/rustdesk
files:
- docker-***pose.yml
state: present
3. 扩展开发
插件开发:
// 自定义插件示例
use rustdesk_sdk::{Plugin, SessionEvent, Result};
struct CustomPlugin;
impl Plugin for CustomPlugin {
fn name(&self) -> &'static str {
"custom-plugin"
}
fn on_session_start(&self, event: SessionEvent) -> Result<()> {
println!("会话开始: {:?}", event.device_id);
Ok(())
}
fn on_session_end(&self, event: SessionEvent) -> Result<()> {
println!("会话结束: {:?}", event.device_id);
Ok(())
}
}
// 注册插件
rustdesk_sdk::register_plugin!(CustomPlugin);
API客户端开发:
# 高级API客户端
from typing import List, Dict, Optional
from dataclasses import dataclass
import aiohttp
@dataclass
class Device:
id: str
name: str
os: str
online: bool
last_seen: str
class RustDeskClient:
def __init__(self, base_url: str, api_key: str):
self.base_url = base_url
self.session = aiohttp.ClientSession(
headers={'Authorization': f'Bearer {api_key}'}
)
async def get_devices(self) -> List[Device]:
async with self.session.get(f'{self.base_url}/api/devices') as response:
data = await response.json()
return [Device(**item) for item in data]
async def start_session(self, device_id: str, password: str) -> Dict:
payload = {
'device_id': device_id,
'password': password,
'options': {
'quality': 'high',
'enable_audio': True,
'enable_file_transfer': True
}
}
async with self.session.post(f'{self.base_url}/api/sessions', json=payload) as response:
return await response.json()
async def close(self):
await self.session.close()
# 异步使用示例
async def main():
client = RustDeskClient('https://server:21119', 'api-key')
try:
devices = await client.get_devices()
for device in devices:
if device.online:
print(f"设备在线: {device.name}")
finally:
await client.close()
🌟 GitHub地址:
https://github.***/rustdesk/rustdesk
📚 完整文档:
查看项目Wiki获取详细指南
🚀 下载体验:
访问GitHub Releases下载客户端
RustDesk 代表了远程桌面技术的最新发展,正如开发团队所述:
"我们通过开源技术和自托管方案,让每个人都能拥有安全、可控的远程访问能力"
该平台已在多个领域证明其价值:
-
企业办公:远程支持,团队协作,IT管理
-
教育机构:远程教学,实验室访问,在线指导
-
工业制造:设备维护,远程监控,技术支持
-
服务提供商:多租户服务,客户支持,托管服务
-
个人用户:家庭办公,远程协助,文件共享
立即体验RustDesk,享受安全高效的远程访问!
免责声明
⚠️ 重要提示:
-
请遵守法律法规,仅用于合法用途
-
尊重隐私权,获得授权后再访问他人设备
-
保护访问凭证,防止未授权访问
-
生产环境请做好备份和灾难恢复计划
许可证:
-
项目采用MIT许可证
-
允许商业使用和修改
-
需保留版权声明
技术支持:
-
📧 邮箱:通过GitHub页面获取支持
-
💬 社区:加入GitHub Discussions获取帮助
-
🐛 问题:通过GitHub Issues报告问题
-
🔧 咨询:获取专业部署支持
RustDesk - 让远程访问更简单安全 🔒✨