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 и объединив все сервисы в одну подсеть.
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, чтобы сделать предварительные настройки
docker compose up -d nginx-proxy-manager
- Идем по адресу хоста на порт 8081 и создаем аккаунт администратора.
- Добавляем 404 Host, чтобы автоматически подтянуть сертификат и направить http/https порты в никуда. В pro версии RustDesk существует веб-панель, так бы перенаправили на нее, но в текущей конфигурации она отсутствует.
Таким образом, получили сертификат, домен смотрит на хост и форсирует https протокол.
- Переходим на вкладку streams. Здесь нужно прописать потоки на TCP/UDP порты. На вкладке SSL при создании stream ничего не указываем, потоки должны остаться в HTTP Only режиме.
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 сервисов
docker compose up -d hbbs
Для организации зашифрованного соединения между клиентами нам понадобится публичный ключ, генерируемый hbbs. Он будет находиться в примонтированном каталоге data по следующему пути: ./data/id_ed25519.pub
- Запоминаем ключ - его нужно указывать в клиентских приложениях для подключения далее.
- Также пропишем ключ в команду старта каждого RustDesk сервиса в compose файле.
hbbs:
...
command: hbbs -r rustdesk.mydomain.com:21117 -k <KEY>
...
hbbr:
...
command: hbbr -k <KEY>
...
- Пересобираем сервисы
docker compose up -d hbbs --build
✅ Серверная часть подготовлена.
Настройка и запуск клиентских приложений
- Взял для теста две удаленные машины - на Windows и Linux.Под Windows ставим через обычный инсталлятор.
Под Linux скачиваем пакет и устанавливаем
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 машины, который указан на главном окне клиентского приложения.
✅ Если все настройки как на сервере так и на клиенте были сделаны
верно, то получим довольно быстрый и функциональный способ удаленного
доступа с шифрованным трафиком, и без участия посторонних узлов в этой
несложной схеме подключения.
Больше полезной информации в моем Telegram-канале.