Пост

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

rustdesk-screenshot-1

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

rustdesk-screenshot-2

По факту завершения работ с 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” соответственно.

rustdesk-screenshot-3

  • В разделе Безопасность можно задать параметры доступа по паролю, например, одноразовый пароль или постоянный пароль и использовать его для автоматического входа, иначе - доступен вариант принятия сеансов после подтверждения.

rustdesk-screenshot-4

  • Делаем тестовые подключения по ID машины, который указан на главном окне клиентского приложения.

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

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