Найти в Дзене
DeSoft.ru

RustDesk. Удаленный доступ через ретранслятор на собственном сервере

RustDesk - платформа с открытым исходным кодом для организации удаленного
доступа. Помимо кроссплатформенного клиентского приложения, имеет в
своем составе специальный сервер-ретранслятор для размещения на вашем
личном сервере, который будет являться связующим звеном между всеми
участниками подключений. Для связи распределенных хостов будем использовать публичный VPS от хостера NetAngels (реф. ссылка). Сервер состоит из двух сервисов - 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" # Publi
Оглавление

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 существует веб-панель, так бы перенаправили на нее, но в текущей конфигурации она отсутствует.
-2

Таким образом, получили сертификат, домен смотрит на хост и форсирует 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.

-3

По факту завершения работ с 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” соответственно.
-4
  • В разделе Безопасность можно задать параметры доступа по паролю,
    например, одноразовый пароль или постоянный пароль и использовать его
    для автоматического входа, иначе - доступен вариант принятия сеансов
    после подтверждения.
-5
  • Делаем тестовые подключения по ID машины, который указан на главном окне клиентского приложения.

✅ Если все настройки как на сервере так и на клиенте были сделаны
верно, то получим довольно быстрый и функциональный способ удаленного
доступа с шифрованным трафиком, и без участия посторонних узлов в этой
несложной схеме подключения.

Больше полезной информации в моем Telegram-канале.