Безопасность и Защита 10 мин чтения 2026-09-18

Свой сервер RustDesk на VDS в Docker Compose: приватная замена AnyDesk с шифрованием и минимальным пингом

Публичные серверы AnyDesk и бесплатные релеи RustDesk страдают от перегрузок, таймаутов сессий и высоких сетевых задержек. Подробное практическое руководство по установке собственного отказоустойчивого сервера RustDesk (сигнальный сервер hbbs и ретранслятор hbbr) в Docker Compose на Ubuntu 24.04: настройка портов, защита сервера публичным ключом Ed25519 от паразитного трафика, проброс через UFW и мгновенное подключение клиентов.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Удаленное администрирование рабочих станций и серверов за последние два года претерпело кардинальные изменения. Коммерческие гиганты вроде TeamViewer и AnyDesk либо заблокировали доступ с российских IP-адресов, либо ввели жесткие ограничения: сессии принудительно обрываются через 120 секунд, всплывают предупреждения о коммерческом использовании, а скорость передачи изображения падает до единиц кадров в секунду.

Попытка использовать официальные бесплатные публичные серверы открытого клиента RustDesk также сталкивается с суровой реальностью: публичные релеи перегружены сотнями тысяч пользователей по всему миру. Пинг подскакивает до 180–300 мс, перемещение курсора мыши запаздывает на полсекунды, а картинка рассыпается на артефакты сжатия. Единственное надежное инженерное решение — поднять собственный изолированный сервер RustDesk на недорогом отечественном VDS с задержкой 5–15 мс и полным контролем над безопасностью.

1. Почему публичные серверы больше не подходят: лимиты AnyDesk и перегрузка релеев

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

Параметр AnyDesk (Free) RustDesk (Public) Свой сервер RustDesk
Длительность сессии Ограничена (часто 2–5 минут) Без жестких лимитов Не ограничена (24/7)
Сетевая задержка (RTT) 120–250 мс (серверы в ЕС) 150–350 мс (высокая загрузка) 5–20 мс (сервер в РФ)
Частота кадров (FPS) 15–30 FPS с просадками 10–25 FPS при дропах пакетов До 60 FPS плавного потока
Шифрование и ключи Закрытый проприетарный контур Публичный общий ключ Приватный ключ Ed25519
Вендор-лок и санкции Высокий риск блокировок Риск перегрузки и бана IP Полная независимость

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

2. Архитектура RustDesk Server: назначение hbbs, hbbr и карта сетевых портов

Серверная экосистема RustDesk построена на разделении обязанностей между двумя легковесными бинарными демонами, написанными на Rust:

  • hbbs (Heartbeat / ID Rendezvous Server): Сигнальный сервер. Регистрирует клиентские устройства по уникальным числовым ID, хранит их текущие внешние IP-адреса, принимает heartbeat-пакеты о доступности и координирует процедуру пробива NAT (P2P Hole Punching) для прямого соединения клиентов.
  • hbbr (Relay Server): Сервер ретрансляции. Вступает в работу, если клиенты находятся за изолированными корпоративными фаерволами или жестким симметричным NAT, не позволяющим установить прямой P2P-туннель. В этом случае весь зашифрованный трафик транслируется через hbbr на скорости серверного канала.

Для безошибочной работы связки требуется открыть и пробросить строго определенный пул портов:

Служба Порт Протокол Назначение
hbbs 21115 TCP Тестирование типа NAT и доступности портов
hbbs 21116 TCP Маршрутизация вызовов и сервис установления связи
hbbs 21116 UDP Регистрация ID клиентов и отправка пульса (Heartbeat)
hbbr 21117 TCP Сервис ретрансляции трафика рабочего стола (Relay)
hbbs 21118 TCP Поддержка веб-клиента WebSocket (опционально)
hbbr 21119 TCP Поддержка веб-клиента релея (опционально)

Критически важный нюанс с портом 21116 UDP

Наиболее распространенная причина отказа сервера («Невозможно подключиться через промежуточный сервер») кроется в том, что администраторы открывают порт 21116 только для TCP. Порт 21116 обязан быть доступен по обоим протоколам — TCP и UDP. Если UDP-пакеты отсекаются сетевым фильтром хостинга или фаерволом ОС, клиенты не смогут зарегистрироваться в сигнальной службе.

3. Системные требования к VDS и подготовка чистой Ubuntu 24.04 LTS

Огромное достоинство RustDesk Server — исключительная легковесность. В состоянии покоя и hbbs, и hbbr потребляют всего по 12–25 МБ оперативной памяти и практически нулевой процент CPU. Поэтому под сервер достаточно арендовать самый базовый тариф:

  • Процессор: 1 виртуальное ядро (vCPU).
  • Оперативная память: 1 ГБ RAM (с запасом под саму ОС Ubuntu и системные демоны Docker).
  • Дисковое пространство: 15–20 ГБ NVMe (база зарегистрированных пиров весит считанные мегабайты).
  • Сетевой интерфейс: Белый статический IPv4-адрес и безлимитный канал от 100 Мбит/с.

Подключаемся к свежему серверу по SSH и выполняем базовую актуализацию пакетной базы Ubuntu 24.04:

# Обновление репозиториев и установленных системных пакетов
sudo apt update && sudo apt upgrade -y

# Установка необходимых утилит
sudo apt install -y curl wget git ufw dnsutils

Если Docker еще не установлен в вашей системе, разверните официальный Docker Engine с плагином Compose за пару команд:

# Загрузка и запуск официального скрипта установки Docker
curl -fsSL https://get.docker.com | sh

# Включение автозапуска службы Docker при перезагрузке ОС
sudo systemctl enable --now docker

4. Развертывание связки hbbs и hbbr в Docker Compose

Для изоляции сервисов и сохранения данных при обновлениях контейнеров организуем рабочую директорию /opt/rustdesk-server:

# Создание рабочей папки для файлов конфигурации и ключей
sudo mkdir -p /opt/rustdesk-server/data
cd /opt/rustdesk-server

Создаем файл декларации compose.yaml с помощью текстового редактора:

services:
  hbbs:
    image: rustdesk/rustdesk-server:latest
    container_name: rustdesk-hbbs
    restart: unless-stopped
    command: hbbs -r YOUR_SERVER_IP_OR_DOMAIN:21117 -k _
    volumes:
      - ./data:/root
    network_mode: host
    depends_on:
      - hbbr

  hbbr:
    image: rustdesk/rustdesk-server:latest
    container_name: rustdesk-hbbr
    restart: unless-stopped
    command: hbbr -k _
    volumes:
      - ./data:/root
    network_mode: host

Почему мы используем network_mode: host?

Режим network_mode: host исключает прослойку трансляции адресов (NAT) и накладные расходы проксирующего демона Docker. Это критично для приложений реального времени с интенсивным UDP-трафиком. Сетевые задержки снижаются до аппаратного минимума, а UDP-пакеты портов 21116 обрабатываются ядром Linux без потерь.

В строке command: hbbs -r YOUR_SERVER_IP_OR_DOMAIN:21117 -k _ обязательно замените плейсхолдер YOUR_SERVER_IP_OR_DOMAIN на реальный внешний статический IP-адрес вашего VDS (например, 185.22.15.80) или на зарегистрированный DNS-домен (например, relay.mydomain.ru).

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

Запускаем контейнеры в фоновом режиме:

# Запуск стека RustDesk в фоновом режиме
docker compose up -d

# Проверка статуса работы контейнеров
docker compose ps

5. Надежные VDS-провайдеры с низким пингом для сервера ретрансляции

Поскольку сервер ретрансляции непрерывно передает видеопоток удаленного стола, критически важно выбирать провайдеров с прямым подключением к крупным российским точкам обмена трафиком (MSK-IX, SPB-IX) и чистыми белыми IPv4-адресами без блокировок входящих UDP-пакетов.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud

Оптимальная площадка для сервера ретрансляции RustDesk: дата-центры в Москве и Санкт-Петербурге с задержкой 5–15 мс по всей европейской части РФ, выделенный IPv4-адрес без фильтрации портов и безлимитный сетевой канал до 1 Гбит/с.

Конфигурация
от 1 vCPU / 1 GB RAM / 15–25 GB NVMe
Корпоративный стандарт
🔷

Selectel

Инфраструктура корпоративного уровня Tier III с гарантированной доступностью 99.98% и защитой от сетевых атак на уровнях L3/L4. Идеально подходит для IT-отделов и круглосуточной технической поддержки корпоративных пользователей.

Конфигурация
от 1–2 vCPU / 2 GB RAM / 30 GB NVMe
Быстрый старт
🟠

Beget

Удобная панель управления сервером, моментальный деплой Ubuntu 24.04 LTS, автоматические ежедневные резервные копии и круглосуточная квалифицированная поддержка системных инженеров 24/7.

Конфигурация
от 1 vCPU / 1–2 GB RAM / 20 GB NVMe

6. Принудительное шифрование и защита ключом Ed25519 от несанкционированного доступа

При первом запуске с флагом -k _ демон hbbs автоматически генерирует в подпапке ./data пару криптографических ключей:

  • id_ed25519 — закрытый приватный ключ сервера (никогда не покидает VDS).
  • id_ed25519.pub — открытый публичный ключ сервера.

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

# Вывод открытого публичного ключа сервера
cat /opt/rustdesk-server/data/id_ed25519.pub

В терминале отобразится короткая строка длиной 44 символа (заканчивающаяся на знак равенства =), например:

vDkL80wA+wX42zP+7yN9zQm1h1lD/V7nZqJ1xR9kM8g=

Что произойдет, если не использовать ключ (-k _)?

Без ключа любой ботнет или посторонний пользователь, просканировавший порт 21116 вашего IP-адреса, сможет указать ваш VDS в качестве своего сервера ретрансляции. Ваши гигабитные каналы и ресурсы процессора будут бесплатно расходоваться на чужой видеотрафик. Использование -k _ отсекает любые неподписанные попытки подключения на сетевом уровне.

7. Настройка фаервола UFW и решение проблемы проброса портов в Docker

При использовании network_mode: host контейнеры слушают сетевые интерфейсы операционной системы напрямую. Это означает, что системный брандмауэр UFW (Uncomplicated Firewall) корректно фильтрует трафик без конфликтов с цепочками iptables Docker.

Открываем только строго необходимые порты и активируем межсетевой экран:

# Разрешаем стандартный SSH для сохранения доступа администратора
sudo ufw allow 22/tcp comment "SSH Remote Management"

# Разрешаем диапазон TCP портов для RustDesk hbbs и hbbr
sudo ufw allow 21115:21119/tcp comment "RustDesk TCP Services"

# Разрешаем критический UDP порт для heartbeat и регистрации клиентов
sudo ufw allow 21116/udp comment "RustDesk Heartbeat Registration"

# Включаем брандмауэр (если он еще не был активен)
sudo ufw enable

# Проверяем итоговый статус правил
sudo ufw status verbose

После активации правил обязательно убедитесь, что порты корректно отвечают на внешние запросы через онлайн-утилиту:

8. Настройка клиентов RustDesk: Windows, Linux, macOS и Android за 1 минуту

Чтобы клиентские приложения (на вашем компьютере и на компьютере, к которому вы планируете подключаться) работали через созданный приватный сервер, их необходимо переключить с публичных релеев на ваш VDS.

Способ 1: Ручная настройка через графический интерфейс

  1. Скачайте и запустите официальный клиент RustDesk с официального сайта или GitHub-репозитория.
  2. В главном окне программы нажмите на меню (три точки) рядом с вашим ID и выберите «Сеть» (ID/Сервер ретрансляции).
  3. Заполните поля конфигурации:
    • ID-сервер: введите IP-адрес или домен вашего VDS (например, relay.mydomain.ru или 185.22.15.80).
    • Сервер ретрансляции: укажите тот же адрес (или оставьте пустым, клиент подставит адрес ID-сервера).
    • API-сервер: оставьте поле пустым.
    • Ключ (Key): вставьте скопированную строку публичного ключа из файла id_ed25519.pub.
  4. Нажмите «ОК». В нижней строке статус-бара клиента надпись должна смениться на зеленый индикатор: «В сети» (Ready).

Способ 2: Быстрое развертывание через строку конфигурации (1 клик)

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

host=IP_ИЛИ_ДОМЕН_СЕРВЕРА,key=ПУБЛИЧНЫЙ_КЛЮЧ

Пример готовой строки:

host=185.22.15.80,key=vDkL80wA+wX42zP+7yN9zQm1h1lD/V7nZqJ1xR9kM8g=

Передайте эту строку пользователю или администратору. В окне настроек сети клиента достаточно нажать кнопку «Вставить конфигурацию сервера», и все поля заполнятся автоматически.

Лайфхак для массового деплоя на Windows

Клиент RustDesk для Windows умеет считывать параметры сервера прямо из собственного имени исполняемого файла! Если переименовать дистрибутив по шаблону rustdesk-host=185.22.15.80,key=vDkL80wA...=.exe, программа при первом запуске автоматически применит настройки вашего приватного сервера без единого клика со стороны удаленного пользователя.

9. Решение частых сбоев: ошибка «Невозможно подключиться через промежуточный сервер»

При настройке и эксплуатации сервера администраторы иногда сталкиваются с типовыми ошибками соединения. Разберем три наиболее частых инцидента и методы их мгновенного устранения:

1. Бесконечное состояние «Подключение...» или отказ связи с релеем

Причина: В строке запуска hbbs в параметре -r был указан локальный адрес (например localhost или 127.0.0.1), либо домен с неверно настроенной DNS A-записью. Клиент обращается к hbbs, а hbbs сообщает ему подключиться к релею по адресу 127.0.0.1, из-за чего удаленный клиент пытается найти ретранслятор на собственной машине.

Решение: Проверьте значение флага -r в compose.yaml. Там обязан быть указан публичный внешний IP или резолвящийся домен: hbbs -r 185.22.15.80:21117 -k _. После правки перезапустите стек: docker compose down && docker compose up -d.

2. Ошибка «Невозможно подключиться через промежуточный сервер»

Причина: Клиент передал ключ, не совпадающий с ключом в id_ed25519.pub, либо на удаленном компьютере включен корпоративный DPI-прокси, блокирующий нестандартные TCP-порты.

Решение: Сверьте хеш ключа. Если порт 21117 блокируется провайдером клиента, настройте перенаправление порта на стандартный 443 (HTTPS) с помощью правил iptables или внешнего Nginx Reverse Proxy.

3. Красный индикатор «Не в сети» в статус-баре клиента

Причина: Закрыт порт 21116 UDP в правилах фаервола ОС или в панели хостинга (Security Groups). Клиент не может зарегистрировать свой ID.

Решение: Выполните команду sudo ufw status на сервере и убедитесь в наличии строки 21116/udp ALLOW. Проверьте также сетевые фильтры в панели управления хостингом.

10. Резюме и итоговый чек-лист готовности сервера к работе

Развертывание собственного сервера RustDesk в Docker Compose занимает не более 10–15 минут, но решает задачу независимого удаленного доступа на годы вперед. Вы получаете максимальную скорость отклика (до 60 кадров в секунду при пинге 5–15 мс), неограниченное время сессий и гарантированную конфиденциальность корпоративного уровня.

Разверните собственный сервер RustDesk за 10 минут

Выберите надежный VDS в Москве или Санкт-Петербурге с быстрым NVMe-накопителем, выделенным статическим IP-адресом и низкими задержками для плавной и комфортной работы с удаленными рабочими столами без зависаний.

Выбрать VDS с пингом до 15 мс в Timeweb Cloud

Чек-лист готовности после развертывания:

  • Контейнеры rustdesk-hbbs и rustdesk-hbbr работают в статусе Up (проверено через docker compose ps).
  • В параметрах hbbs указан внешний IP или домен сервера с портом 21117 (-r IP:21117).
  • Активирован режим шифрования -k _ и сохранен открытый ключ из id_ed25519.pub.
  • В фаерволе UFW открыты порты 21115:21119/tcp и 21116/udp.
  • Клиенты на подключаемых ПК показывают статус «В сети» с зеленым индикатором готовности.

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

В чем принципиальная разница между hbbs и hbbr в RustDesk?
Служба hbbs (Heartbeat/ID Server) выполняет роль сигнального координатора: она регистрирует клиентов по их числовому ID, отслеживает онлайн-статус и помогает узлам установить прямое соединение (P2P Hole Punching). Служба hbbr (Relay Server) подключается только тогда, когда прямое P2P-соединение между устройствами невозможно (например, оба клиента находятся за строгим симметричным NAT или жесткими корпоративными фаерволами). В этом случае hbbr пересылает зашифрованный трафик экрана и управления через себя.
Зачем обязательно указывать параметр -k _ при запуске контейнеров?
Параметр -k _ активирует принудительную проверку публичного ключа шифрования (Ed25519). Если запустить hbbs и hbbr без этого флага, любой пользователь интернета, случайно узнав IP-адрес или домен вашего сервера, сможет прописать его в своем клиенте RustDesk и бесплатно расходовать канал и ресурсы вашего VDS. Флаг гарантирует, что к серверу смогут подключиться только клиенты, в настройки которых явно добавлен сгенерированный публичный ключ id_ed25519.pub.
Почему при проверке через сканер портов порт 21116 отображается как закрытый?
Порт 21116 использует сразу два сетевых протокола: TCP (для сигнального обмена данными) и UDP (для heartbeat и NAT-пробива). Стандартные онлайн-сканеры проверяют исключительно TCP-стек. Если вы забыли разрешить UDP-трафик для порта 21116 в правилах фаервола (UFW) или забыли пробросить 21116:21116/udp в Docker Compose, клиенты будут показывать бесконечное подключение или выдавать ошибку отсутствия связи с сервером ретрансляции.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи