RustDesk self hosted setup — full Docker + Caddy TLS walkthrough

RustDesk'i kendi sunucunuzda çalıştırmaya çalışıyorsunuz fakat NAT ve güvenlik duvarları, belirsiz sunucu bileşenleri ve RustDesk'in kendi şifrelemesinin üstüne TLS gerekip gerekmediği gibi engellerle karşılaşıyorsunuz. Bu kılavuz, teknik okuyucu için tek bir VPS üzerinde tamamen tekrar üretilebilir bir RustDesk self-host kurulumu anlatıyor.
You're trying to self-host RustDesk but keep hitting the same blockers: NAT and firewalls, confusing server components, and the nagging question of whether you need TLS on top of RustDesk's own encryption. This guide walks a technically minded reader through a complete, reproducible rustdesk self hosted setup on a single VPS — Docker Compose for hbbs/hbbr, and TLS fronting using Caddy so clients can connect on 443 from restrictive networks.
Ne kuruyoruz ve neden
Amaç: istemcilerin DNS adıyla işaret edeceği tek bir VPS üzerinde çalışan bir RustDesk rendezvous + relay kurmak. Kullanılan bileşenler:
- rustdesk server components (hbbs and hbbr) Docker içinde çalıştırılıyor — burada rustdesk-server v1.2.1 imajları ile test edildi.
- Caddy v2 (Let's Encrypt ile sertifika yönetimi) ile 443 üzerinde bir TLS giriş noktası sağlayarak, istemcilerin çıkış 21115 engellendiğinde bile relay'e ulaşmasını sağlar.
- Ölçek için isteğe bağlı UDP passthrough veya ek relay'ler (notlarda ele alınıyor).
Neden bunu yapmalısınız? RustDesk’in protokolü masaüstü oturumu için zaten uçtan uca şifreleme sağlar, ancak birçok ağ yalnızca 443/80 çıkışını izin verir. VPS üzerinde TLS sonlandırmak (Caddy'nin sertifikaları alıp otomatik yenilemesine izin vermek) standart dışı portları açmadan servisinizin ulaşılabilir olmasının pratik bir yoludur. Sadece LAN erişimi istiyor veya ters tünellerle NAT kontrolü yapmak istiyorsanız, bkz. remote-desktop-without-port-forwarding.
Gereksinimler ve seçimler
Bu kılavuzu yazarken kullandığım ortam:
- Genel bir VPS üzerinde Ubuntu 22.04 LTS (test kullanımı için 1 vCPU / 2 GB RAM yeterli; çok sayıda istemci için 4+ CPU'ya yükseltin ve CPU/RAM'i izleyin).
- Docker 24.x ve Docker Compose v2 (compose V2 CLI sözdizimi).
- rustdesk-server Docker imajı (bu kılavuzda tag v1.2.1) — yeni kararlı sürümler varsa ayarlayın.
- Caddy v2.6+ (Caddy'nin otomatik ACME'si sertifika yenilemelerini zahmetsiz yapar).
- rustdesk.example.com gibi VPS kamu IP'nizi işaret eden bir DNS A kaydı ve 80/443 açık (Caddy doğrulama için 80/443 gerektirir).
Ticarete yönelik barındırılan bir ürünün daha uygun olduğu durumlara dair notlar: kurumsal düzeyde SLA, gelişmiş oturum denetimi veya ticari destek gerekiyorsa TeamViewer/AnyDesk daha uygun olabilir — bkz. rustdesk-vs-anydesk ve fiyat karşılaştırmalarımız. Kendi sunucunuzu barındırmak, kontrol, daha düşük sürekli maliyetler veya üçüncü taraf sunuculardan kaçınmak istediğinizde en iyi seçenektir.
Adım 1 — Deploy rustdesk server with Docker Compose
VPS üzerinde bir proje dizini oluşturun ve aşağıdaki docker-compose.yml dosyasını buraya koyun. Bu örnek tipik RustDesk sunucu portlarını host'a açar. Ortam değişkenlerini ve imaj tag'lerini kendi ortamınıza göre değiştirin.
mkdir -p ~/rustdesk-server
cd ~/rustdesk-server
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
rustdesk-server:
image: rustdesk/rustdesk-server:1.2.1
container_name: rustdesk-server
restart: unless-stopped
ports:
- "21115:21115/tcp" # rendezvous / TCP relay
- "21115:21115/udp" # optional UDP relay (if your image supports it)
- "21116:21116/udp" # additional UDP (some builds use multiple UDP ports)
volumes:
- ./data:/root/.config/rustdesk-server
environment:
- RUSTDESK_RELAY_IPV4=0.0.0.0
- RUSTDESK_RELAY_PORT=21115
EOF
Başlatın:
docker compose up -d # watch logs docker compose logs -f rustdesk-server
Container'ın başladığını ve 21115 üzerinde dinlediğini doğrulayın. VPS'inizde çalıştırın:
ss -tuln | grep 21115
Kullandığınız imaj farklı portlar açıyorsa veya farklı bir yapılandırma tarzı varsa o imajın README'sine bakın. Bazı işletmeciler hbbs/hbbr'yi elle derler ve özel portlar kullanır; bu adımları buna göre uyarlayın.
Adım 2 — Use Caddy to put TLS on top of the relay (443)
RustDesk'i 443 üzerinden ulaşılabilir kılmak için iki yaygın desen vardır:
- TCP TLS sonlandırma ile Caddy 2.6+ (Caddy TLS'yi sonlandırır ve ham TCP'yi rustdesk relay'e iletir). Caddy v2.6'da geliştirilmiş TCP özellikleri eklendi; bu yaklaşımı kullanırsanız otomatik ACME sertifikaları ve yenilemeler elde edersiniz.
- Caddy'yi yalnızca sertifika yönetimi için kullanıp, bu sertifika dosyalarını tüketmek için bir TCP proxy (stunnel, HAProxy veya Nginx stream) kullanın. Bu, Caddy sürümünüz veya ortamınız ihtiyaç duyduğunuz TCP proxy özelliklerini desteklemiyorsa bir yedek seçenektir.
Aşağıda Caddy'yi 443 üzerinde TLS yapmak ve ham TCP bağlantısını localhost:21115'teki RustDesk relay'e iletmek için kullanan minimal, pragmatik bir Caddy konfigürasyonu var. Bu Caddy v2.6+ gerektirir (kontrol için caddy version komutunu kullanın).
# Caddyfile (save as ./Caddyfile in the same folder as docker-compose.yml)
rustdesk.example.com:443 {
# Caddy will obtain/renew certificates automatically
reverse_proxy 127.0.0.1:21115 {
# Use plain TCP transport; Caddy will accept TLS from clients and connect to the backend via TCP
transport http {
# We don't speak HTTP to the backend; keep minimal transport settings
}
}
}
Docker-compose snippet to run Caddy next to the rustdesk server (same project):
cat >> docker-compose.yml <<'EOF'
caddy:
image: caddy:2.6.4
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
EOF
docker compose up -d caddy
Önemli uyarı: Caddy'nin dahili reverse_proxy HTTP odaklıdır, bu nedenle HTTP olmayan ham TCP'yi proxy'lerken davranış Caddy sürümüne ve transport seçeneklerine bağlıdır. Pratikte birçok işletmeci, rasgele TCP backend'leri için TLS sonlandırmak amacıyla 2.6'da tanıtılan Caddy TCP proxy özelliklerini kullanır. Protokol sorunlarıyla karşılaşırsanız yukarıdaki (2) numaralı seçeneği kullanın: Caddy sertifikaları yönetsin ve sertifika dosyalarını küçük bir TCP TLS katmanına (stunnel veya HAProxy stream) verin; o da plain TCP'yi rustdesk'e iletsin.
Örnek: Caddy'yi sertifika yöneticisi olarak kullanma + TLS sonlandırma için stunnel (kısa özet).
# 1) Ensure Caddy is running and has issued certs for rustdesk.example.com # 2) Copy cert/key from Caddy storage into a place stunnel can read, or mount the same volume. # 3) Run stunnel with a config that points TLS 443 -> 127.0.0.1:21115 # stunnel.conf snippet [rustdesk] accept = 443 connect = 127.0.0.1:21115 cert = /etc/stunnel/fullchain.pem key = /etc/stunnel/privkey.pem # In Docker world, mount Caddy's certificate files into the stunnel container path above.
Her iki yaklaşım da istemciler için bir hostname (rustdesk.example.com) ve 443 portu sağlar. Başka bir makinadan bağlantıyı test edin: nc -vz rustdesk.example.com 443 — Caddy/stunnel doğru yapılandırıldıysa bir TLS el sıkışması kurulmalıdır.
Adım 3 — İstemcileri kendi sunucunuza yönlendirme
RustDesk istemcileri ayarlarda özel ID/relay sunucularına izin verir. Tam UI platforma ve sürüme göre değişir, ancak temel değerler şunlardır:
- ID Server / Rendezvous: rustdesk.example.com:443 (veya kendi domain ve portunuz)
- Relay Server: rustdesk.example.com:443
Windows'ta: RustDesk > Settings > ID/Server açın ve Id server ile Relay server değerlerini rustdesk.example.com:443 olarak ayarlayın. Linux ve macOS'ta aynı ayarlar Preferences içinde vardır. Headless kurulumlar için istemci bazen komut satırı bayrakları veya bir yapılandırma dosyası ile verilebilir — detaylar için istemci deposuna bakın.
İstemcilerin güncel olduğundan emin olun (yazım sırasında 1.2.x veya daha yeni). Yeni istemciler protokol düzeltmeleri ve daha iyi NAT geçişi içerir. Çok daha eski bir istemci kullanmaya çalışırsanız davranış değişebilir.
Sorun giderme ve sertleştirme
Yaygın sorunlar ve nasıl hata ayıklanacağı:
- Güvenlik duvarı: VPS güvenlik duvarının (ufw/iptables/sağlayıcı firewall) 80/443 geleni izin verdiğini doğrulayın. RustDesk sunucu container'ı yerelde 21115 üzerinde dinliyorsa TCP soketinin var olduğundan emin olun (ss/netstat).
- Sertifika çıkarma: Let's Encrypt doğrulayamıyorsa Caddy hata kaydı bırakır. DNS A kaydınızın VPS'i işaret ettiğini ve ilk çıkarma sırasında 80 portunun erişilebilir olduğunu doğrulayın.
- Protokol uyumsuzluğu: TLS el sıkışması başarılı ama istemciden bağlantı hataları görüyorsanız, Caddy ile yanlışlıkla sadece HTTP proxy'liyor olabilirsiniz. Bu durumlarda stunnel yaklaşımını kullanın.
- UDP relay: Ekran kareleri için RustDesk performansı UDP ile iyileşir; UDP gerekiyorsa fakat ağ yolu UDP'yi engelliyorsa TCP relay'e düşersiniz. Ağınızı kontrol ediyorsanız ve ne yaptığınızı biliyorsanız UDP portlarını yalnızca o zaman açın/iletin.
Güvenlik sertleştirme ipuçları:
- rustdesk server'ı adli ayrı, yetkisiz olmayan bir kullanıcı altında çalıştırın ve Docker imajlarını güncel tutun.
- Tekrarlanan başarısız bağlantıları sınırlamak için fail2ban veya benzeri bir şey etkinleştirin ve logları izleyin (
docker compose logs -f rustdesk-server). - rustdesk server veri dizininizi düzenli olarak yedekleyin (örnekte ./data).
- Birden çok relay işletiyorsanız relay'i özel bir ağ veya VPC arkasında çalıştırmayı düşünün.
Ölçeklendirme notları: Küçük ekipler için tek bir relay yeterlidir. Daha büyük dağıtımlar için farklı makinelerde birden fazla hbbr çalıştırın ve DNS yük dengeleme veya uygun bir L4 yük dengeleyici kullanın. Denetim gibi merkezi kurumsal özelliklere ihtiyaç duyuyorsanız, ticari çözümler avantaj sağlayabilir. Takasları görmek için self-hosted-remote-desktop ve rustdesk-vs-anydesk yazılarımıza bakın.
Bakım, maliyetler ve son öneriler
Operasyonel maliyetler çoğunlukla VPS ücreti ve sizin zamanınızdır. Tipik küçük bir VPS (1–2 CPU, 2–4 GB) $5–10/ay aralığında bulunabilir (DigitalOcean, Vultr, Hetzner). Caddy ve RustDesk server açık kaynaktır; ana tekrar eden maliyet barındırmadır. GUI tabanlı faturalama veya kurumsal destek gerekiyorsa ticari satıcılar oturum veya kullanıcı başına ücretlendirme yapar — bağlamsal olarak anydesk-pricing-explained ve godeskflow-vs-teamviewer-pricing karşılaştırmalarımıza bakın.
Öneriler:
- Önce tek bir VPS ve yukarıdaki Docker Compose düzeni ile başlayın. Kullanıcılarınızın bulunacağı ağlardan (ev ISP'leri, kurumsal güvenlik duvarları) bağlantıları test edin.
- İstemciler sık sık çok kısıtlayıcı güvenlik duvarlarının arkasındaysa relay'inizi 443'e koyun ve TLS sonlandırmanın güvenilir çalıştığını doğrulayın; Caddy-only TCP proxying sorun çıkarıyorsa Caddy+stunnel kullanın.
- Sunucu veri dizininin yedeklerini otomatikleştirin ve imaj güncellemelerini takip edin. RustDesk server sürümleri ilerler; üretim kesintisine bağımlıysanız yükseltmeleri bir test ortamında doğrulayın.
Kısa bir yürüyüş kılavuzu veya alternatifler istiyorsanız, ilgili makalelerimize bakın: remote-access-setup-guide ve remote-desktop-security.
Okumayı bitirdiniz mi? Tamamen açık kaynaklı ve self-host ile iyi entegre olan bir uzak masaüstü denemek isterseniz GoDesk'i indirin veya fiyatlarını karşılaştırın — bkz. GoDesk download ve GoDesk pricing. Bu RustDesk kurulumunu dağıtmaya hazırsanız, yukarıdaki docker-compose.yml ve Caddyfile'ları oluşturup docker compose up -d çalıştırarak başlayın. Hızlı başlamak için istemcileri almak ve bağlanmak üzere /download sayfasına gidin.