راهنمایی برای مدیران سیستم، برنامهنویسان و کاربران حرفهای: معرفی RustDesk، نصب سریع کلاینت، راهاندازی سرور self-host با Docker، نکات امنیتی (TLS/فایروال)، مجوز نرمافزار، و نکات عملیاتی.
RustDesk یک نرمافزار متنباز دسترسی از راه دور (Remote Desktop) با قابلیت خودمیزبانی (Self-Hosting) است که جایگزینی کامل برای TeamViewer/AnyDesk با کنترل کامل بر دادهها به شمار میرود. معماری آن شامل موارد زیر است:
در حالت عادی، کلاینتها از طریق NAT hole punching بهصورت P2P وصل میشوند؛ hlh اگر نشد، ترافیک از رله عبور میکند. رمزنگاری End-to-End با کلید عمومی/خصوصی نیز، حریم خصوصی را تضمین میکند.
sudo apt install -y ./rustdesk-<version>.deb
Fedora/RHEL:
sudo dnf install -y ./rustdesk-<version>.rpm
# یا:
# sudo yum localinstall ./rustdesk-<version>.rpm
Arch:
sudo pacman -U ./rustdesk-<version>.pkg.tar.zst
Flatpak (Flathub):
flatpak install flathub com.rustdesk.RustDesk
نکته: برای اجرای AppImage ممکن است به
libfuse2نیاز داشته باشید. در سیستمهای Wayland، تجربهی پایدارتر معمولاً با استفاده از Xorg به دست میآید.
نصب سریع Docker (نمونهٔ کد):
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# سپس از سیستم خارج/وارد شوید
21115/tcp – سیگنال/تست NAT (hbbs)21116/tcp و 21116/udp – سرور ID (hbbs)21117/tcp – سرور رله (hbbr)21118/tcp و 21119/tcpاگر فقط در LAN هستید و وبکلاینت نمیخواهید، معمولاً پورتهای 21115–21117 کافی است. در صورتی که اتصال اینترنت شما ضعیف است، میتوانید از مقالهٔ دیگر من با نام راهنمای اجرای RustDesk برای شبکههای ضعیف برای مدیریت این مشکل استفاده کنید.
docker-compose.ymlیک پوشهی کاری (برای دایرکتوری پروژه) بسازید و فایل زیر را در آن قرار دهید:
version: "3"
services:
hbbr:
image: rustdesk/rustdesk-server:latest
container_name: hbbr
command: hbbr
network_mode: "host"
volumes:
- ./data:/root
restart: unless-stopped
hbbs:
image: rustdesk/rustdesk-server:latest
container_name: hbbs
command: hbbs
network_mode: "host"
volumes:
- ./data:/root
depends_on:
- hbbr
restart: unless-stopped
برای اجرای سرویسها:
docker compose up -d
docker ps
docker logs -f hbbs
اگر نمیتوانید از
network_mode: hostاستفاده کنید، پورتها راpublishکنید:ports: - "21115:21115/tcp" - "21116:21116/tcp" - "21116:21116/udp" - "21117:21117/tcp" - "21118:21118/tcp" - "21119:21119/tcp"
در اولین اجرا، جفتکلید Ed25519 در مسیر ولوم (Docker Volume) (./data) ساخته میشود. اگر لازم بود دستی بسازید/مشاهده کنید میتوانید از این کد استفاده کنید:
docker exec hbbs /usr/bin/rustdesk-utils genkey
# کلید عمومی در: ./data/id_ed25519.pub
# کلید خصوصی در: ./data/id_ed25519
روی هر کلاینت RustDesk:
your-domain:21116 برای hbbs).id_ed25519.pub سرور کپی و وارد کنید.در نظر داشته باشید که بدون وارد کردن کلید عمومی، هشدار عدم رمزگذاری E2E نمایش داده میشود.
برای وبکلاینت/وبسوکتها (21118/21119) پیشنهاد میشود Nginx را بهعنوان Reverse Proxy جلوی سرور قرار دهید و گواهی معتبری (مانند Let’s Encrypt) دریافت کنید.
نمونهی بسیار ساده (مسیر عمومی برای hbbs روی 21118):
server {
listen 80;
server_name your-domain.com;
location /.well-known/acme-challenge/ { root /var/www/html; }
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# وبسوکت به hbbs (21118)
location / {
proxy_pass http://127.0.0.1:21118;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
برای hbbr (21119) میتوانید مسیر/سرور بلاک جداگانه تعریف کنید. برای دریافت گواهی با certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
Caddy گواهی Let’s Encrypt را خودکار مدیریت میکند:
your-domain.com {
reverse_proxy 127.0.0.1:21118
}
# برای hbbr نیز بلاک دیگری اضافه کنید (مثلاً زیردامنهی relay.your-domain.com)
حتماً هدرهای Upgrade/Connection برای WebSocket در وبسرورِ انتخابی تنظیم شوند.
UFW (Ubuntu):
sudo ufw allow 21115/tcp
sudo ufw allow 21116/tcp
sudo ufw allow 21116/udp
sudo ufw allow 21117/tcp
# در صورت نیاز به وبکلاینت:
sudo ufw allow 21118/tcp
sudo ufw allow 21119/tcp
# برای TLS/Certbot:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
Firewalld (RHEL/Fedora):
sudo firewall-cmd --permanent --add-port=21115/tcp
sudo firewall-cmd --permanent --add-port=21116/tcp
sudo firewall-cmd --permanent --add-port=21116/udp
sudo firewall-cmd --permanent --add-port=21117/tcp
sudo firewall-cmd --permanent --add-port=21118/tcp
sudo firewall-cmd --permanent --add-port=21119/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
اصل طلایی: فقط پورتهای لازم را باز بگذارید. در سناریوهای سازمانی حتی میتوانید دسترسی را به رنجهای آیپی مشخص محدود کنید.
id_ed25519) را حتما در فضایی امن نگه دارید (فضایی با دسترسی حداقلی و پشتیبانگیری مطمئن).id_ed25519.pub) را در همهی کلاینتها وارد کنید تا حملهٔ MITM غیرممکن شود.RustDesk یک نرمافزار متنباز است که تحت مجوز GNU AGPLv3 منتشر میشود. استفاده از برنامه و انتشار نسخهٔ دستنخوردهٔ آن رایگان است. اگر کد را تغییر بدهید و نسخهٔ تغییریافته را بهصورت سرویس شبکهای در اختیار دیگران بگذارید، طبق الزامات AGPLv3 باید همان کدِ تغییریافته را نیز در دسترس عموم قرار دهید. در کنار نسخهٔ متنباز (OSS)، نسخهٔ تجاری Pro برای نیازهای سازمانی عرضه میشود که قابلیتهایی مانند وبکنسول مدیریتی، کنترل دسترسی (ACL)، ورود یکپارچه (SSO/OIDC)، اتصال به LDAP/Active Directory، گزارشگیری و پشتیبانی از چند رله متفاوت را فراهم میکند. با این همه، برای بیشتر سناریوهای معمولِ دسترسی از راه دور، همان نسخهٔ متنباز کفایت میکند.
./data (که به /root کانتینر مپ شده) و حاوی کلیدها و تنظیمات است را به صورت دورهای بکاپ بگیرید.نمونه اسکریپت سادهای برای پشتیبانگیری روزانه:
#!/usr/bin/env bash
set -euo pipefail
TS=$(date +%F-%H%M%S)
SRC=/opt/rustdesk/data
DST=/backup/rustdesk
mkdir -p "$DST"
tar -C "$SRC/.." -czf "$DST/rustdesk-$TS.tgz" "$(basename "$SRC")"
find "$DST" -type f -name 'rustdesk-*.tgz' -mtime +14 -delete
docker compose pull
docker compose up -d --force-recreate
قبل از ارتقاء نسخههای اصلی، یک بکاپ تازه بگیرید.
در صورت مواجهه با مشکلات زیر، راهکارهای عیبیابی مطرحشده را دنبال کنید:
21117/tcp از اینترنت.