RustDesk. Удаленный доступ через ретранслятор на собственном сервере
RustDesk - платформа с открытым исходным кодом для организации удаленного доступа. Помимо кроссплатформенного клиентского приложения, имеет в своем составе специальный сервер-ретранслятор для размещения на вашем личном сервере, который будет являться связующим звеном между всеми участниками подключений.
Установка и настройка серверного компонента системы
Для связи распределенных хостов будем использовать публичный VPS от хостера NetAngels (реф. ссылка).
-
Конфигурации 2 CPU. 2Gb RAM, 20Gb HDD более чем достаточно. Образ с предустановленным Docker.
-
Создав VPS, сразу назначаем поддомен на ip адрес машины (добавляем запись в DNS у поставщика).
Сервер состоит из двух сервисов - signaling и relay. Рядом поставлю Nginx Proxy Manager (NPM) для получения сертификата, настройки обратного прокси и TCP/UDP потоков, которые потребуются RustDesk.
Собираем итоговый docker-compose.yml на основе предложенного в документации, добавив NPM и объединив все сервисы в одну подсеть.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
version: "3"
networks:
rustdesk-net:
external: false
services:
nginx-proxy-manager:
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- "80:80" # Public HTTP Port
- "443:443" # Public HTTPS Port
- "8081:81" # Admin Web Port
# Ports needed for Rustdesk:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
- "21117:21117"
- "21118:21118"
- "21119:21119"
environment:
# DB_SQLITE_FILE: "/data/database.sqlite"
DISABLE_IPV6: "true"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- rustdesk-net
hbbs:
container_name: hbbs
image: rustdesk/rustdesk-server:latest
command: hbbs -r rustdesk.mydomain.com:21117
volumes:
- ./data:/root
networks:
- rustdesk-net
depends_on:
- hbbr
restart: unless-stopped
hbbr:
container_name: hbbr
image: rustdesk/rustdesk-server:latest
command: hbbr
volumes:
- ./data:/root
networks:
- rustdesk-net
restart: unless-stopped
Настройка Nginx Proxy Manager
- Для начала стартуем NPM, чтобы сделать предварительные настройки
1
docker compose up -d nginx-proxy-manager
-
Идем по адресу хоста на порт 8081 и создаем аккаунт администратора.
-
Добавляем
404 Host, чтобы автоматически подтянуть сертификат и направить http/https порты в никуда. В pro версии RustDesk существует веб-панель, так бы перенаправили на нее, но в текущей конфигурации она отсутствует.
Таким образом, получили сертификат, домен смотрит на хост и форсирует https протокол.
- Переходим на вкладку streams. Здесь нужно прописать потоки на TCP/UDP порты. На вкладке SSL при создании stream ничего не указываем, потоки должны остаться в HTTP Only режиме.
1
2
3
4
5
21115 -> hbbs.rustdesk_rustdesk-net:21115 (TCP)
21116 -> hbbs.rustdesk_rustdesk-net:21116 (TCP/UDP)
21117 -> hbbr.rustdesk_rustdesk-net:21117 (TCP)
21118 -> hbbs.rustdesk_rustdesk-net:21118 (TCP)
21119 -> hbbr.rustdesk_rustdesk-net:21119 (TCP)
где rustdesk_rustdesk-net название новой созданной сети в Docker, которую можно посмотреть через команду docker network ls.
По факту завершения работ с NPM, можно закрыть порт на панель администратора (8081:80), либо замкнуть его только на внутренний доступ (127.0.0.1:8081:80), либо направить на него ваш собственный поддомен (npm.mydomain.com).
Запуск RustDesk сервисов
1
docker compose up -d hbbs
Для организации зашифрованного соединения между клиентами нам понадобится публичный ключ, генерируемый hbbs. Он будет находиться в примонтированном каталоге data по следующему пути: ./data/id_ed25519.pub.
-
Запоминаем ключ - его нужно указывать в клиентских приложениях для подключения далее.
- Также пропишем ключ в команду старта каждого RustDesk сервиса в compose файле.
1 2 3 4 5 6 7 8 9
hbbs: ... command: hbbs -r rustdesk.mydomain.com:21117 -k <KEY> ... hbbr: ... command: hbbr -k <KEY> ...
- Пересобираем сервисы
1
docker compose up -d hbbs --build
✅ Серверная часть подготовлена.
Настройка и запуск клиентских приложений
-
Забираем актуальные клиентские приложения из релизов проекта.
-
Взял для теста две удаленные машины - на Windows и Linux.
- Под Windows ставим через обычный инсталлятор.
- Под Linux скачиваем пакет и устанавливаем
1
2
3
wget https://github.com/rustdesk/rustdesk/releases/download/1.4.4/rustdesk-1.4.4-x86_64.deb
sudo apt install -fy ./rustdesk-1.4.4-x86_64.deb
Подробнее про все доступные платформы для клиентов в документации.
-
Запускаем клиента и идем в
Настройки -
В разделе
Сетьпрописываем доменное имя сервера-ретранслятора (rustdesk.mydomain.com) в поле “Сервер ID” и публичный ключ в поле “Key” соответственно.
- В разделе Безопасность можно задать параметры доступа по паролю, например, одноразовый пароль или постоянный пароль и использовать его для автоматического входа, иначе - доступен вариант принятия сеансов после подтверждения.
- Делаем тестовые подключения по ID машины, который указан на главном окне клиентского приложения.
✅ Если все настройки как на сервере так и на клиенте были сделаны верно, то получим довольно быстрый и функциональный способ удаленного доступа с шифрованным трафиком, и без участия посторонних узлов в этой несложной схеме подключения.




