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

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

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

Установка и настройка серверного компонента системы

Для связи распределенных хостов возьму публичный VPS с серверами в РФ.

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

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

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

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

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

Начать дискуссию