Удалённый доступ к своим же машинам — та область, где чужой сервер посередине раздражает сильнее всего: чужая инфраструктура знает, какие у вас компьютеры, когда вы к ним подключаетесь и с каких адресов. RustDesk эту проблему решает тем, что серверную часть можно полностью забрать себе, и стоит она ровно один дешёвый VPS.
Загвоздка в том, что установка выглядит обманчиво простой. Скопировал compose-файл, открыл диапазон портов, вставил ключ в клиент — работает. А потом выясняется, что весь трафик почему-то идёт через ретранслятор, что вебсокет-порты торчат наружу и что при перезагрузке контейнера все клиенты отвалились.
Разберём инсталляцию по деталям: чем занимаются два демона, за что отвечает каждый из шести портов, откуда берётся ключ и что именно написано в официальной документации про заголовки X-Real-IP. Заодно посмотрим на превью-сборку 1.4.9, где 14 августа появился unattended-доступ на Wayland.
ℹ️ Справка
Кому пригодится: тем, у кого дома NAS, мини-ПК или домашняя лаборатория, и нужно надёжно попадать на них с ноутбука; тем, кто помогает родственникам с компьютером; тем, кто не хочет, чтобы идентификаторы и трафик проходили через публичные серверы вендора.
Часть 1. Два демона: кто ищет, а кто передаёт
RustDesk-сервер — это не одна программа, а два независимых бинарника (плюс утилита rustdesk-utils):
hbbs — сервер идентификаторов и рандеву. Клиенты регистрируют на нём свой числовой ID, шлют heartbeat, здесь же происходит определение типа NAT и сведение двух клиентов друг с другом.
hbbr — ретранслятор. Включается только тогда, когда прямое соединение между клиентами поднять не удалось.
Ключевой момент, который стоит понять до установки: в нормальном сценарии ваш сервер видит только служебный обмен, а сам поток рабочего стола идёт напрямую между машинами. Сервер становится узким местом по трафику только в режиме ретрансляции.
Именно поэтому на VPS с 1 vCPU и символическим каналом RustDesk обычно живёт спокойно — ровно до момента, пока обе стороны не окажутся за симметричным NAT или CGNAT. Тогда весь видеопоток пойдёт через ретранслятор, и внезапно окажется, что 100 Мбит/с на VPS были не бесконечными.
📌 Заметка
Если вы уже читали разбор про серый IP и CGNAT — на форуме — то узнаете половину механики: пробивка NAT здесь ровно та же, что в WireGuard-подобных решениях, только роль координатора играет hbbs.
Часть 2. Шесть портов, и один из них про UDP
Самая частая ошибка при развёртывании — открыть диапазон TCP и забыть про UDP. После этого клиенты видят друг друга, соединение устанавливается, но всегда через ретранслятор: пробивка NAT работает по UDP.
Порт
Демон
Назначение
21114/tcp
hbbs
веб-консоль (только Pro-версия)
21115/tcp
hbbs
тест типа NAT
21116/tcp
hbbs
регистрация ID и heartbeat
21116/udp
hbbs
пробивка NAT и установка соединения
21117/tcp
hbbr
ретрансляция
21118/tcp
hbbs
WebSocket для веб-клиента
21119/tcp
hbbr
WebSocket-ретрансляция для веб-клиента
⚠️ Осторожно
21116 нужен и в TCP, и в UDP — это два разных канала на одном номере. Если в правилах файрвола описан только TCP-диапазон 21114:21119, пробивка NAT молча не заработает, и вы будете платить трафиком за каждую сессию.
Часть 3. Развёртывание в Docker
Официальный образ — rustdesk/rustdesk-server. Минимальный docker-compose.yml из документации:
Почему network_mode: host. Пробивке NAT нужно, чтобы сервер видел реальные адреса и порты клиентов. Классический bridge с -p 21116:21116/udp подменяет источник, и определение типа NAT начинает врать. Плата за это — контейнеры занимают порты на самом хосте, так что развести две инсталляции на одной машине без дополнительных приседаний не выйдет.
Каталог ./data. В него ложатся база SQLite и, главное, пара ключей. Если смонтировать сюда tmpfs или забыть про volume, при каждом перезапуске сервер будет генерировать новый ключ, а все клиенты — отваливаться с ошибкой соединения.
Часть 4. Ключ: пропуск, а не просто галочка «шифрование»
При первом запуске hbbs создаёт пару ключей и кладёт их в рабочий каталог:
ls -1 ./data
# id_ed25519 — приватный, остаётся на сервере
# id_ed25519.pub — публичный, его вводят в клиенте
# db_v2.sqlite3 — база
cat ./data/id_ed25519.pub
Содержимое id_ed25519.pub — та самая строка, которую в клиенте вставляют в поле Key.
🔒 Безопасность
Публичный ключ выполняет здесь двойную роль: он и обеспечивает шифрование, и фактически работает пропуском. Клиент без правильного ключа не сможет пользоваться вашим ретранслятором. Если вы выложите адрес сервера и ключ в общий чат, вы раздадите посторонним свой канал — и трафик пойдёт за ваш счёт.
Приватный id_ed25519 не должен уезжать никуда за пределы сервера и не должен попадать в git вместе с compose-файлом.
Часть 5. Настройка клиента
В клиенте (Настройки → Сеть, требует повышения прав) заполняются четыре поля:
ID Server — обязательное. Хост или IP вашего hbbs, при желании с портом: srv.example.com или srv.example.com:21116.
Key — обязательное. Содержимое id_ed25519.pub.
Relay Server — обычно можно не заполнять: клиент узнаёт адрес ретранслятора от hbbs.
API Server — для OSS-сборки не нужен; он требуется для входа в аккаунт и веб-консоли, то есть для Pro.
Для десятка машин руками — терпимо. Дальше есть варианты: экспорт настроек из уже настроенного клиента и импорт через буфер обмена, либо запуск с готовой строкой конфигурации:
rustdesk.exe --config <config-string>
Генератор кастомного клиента, который зашивает адрес сервера и брендинг прямо в инсталлятор, — это уже платная функция.
Часть 6. Когда трафик идёт мимо сервера, а когда через него
По умолчанию клиенты пытаются договориться напрямую и переключаются на hbbr только при неудаче. Иногда прямое соединение нежелательно — например, когда не хочется светить домашний IP перед тем, кому вы даёте доступ. Для этого есть переменная окружения:
environment:
- ALWAYS_USE_RELAY=Y
С ней весь трафик пойдёт через ретранслятор всегда, даже если прямой канал возможен. Это стоит осознанного решения: латентность вырастет, а исходящий трафик VPS будет расходоваться на каждый сеанс. На дешёвом хостинге с лимитом трафика полноценная удалёнка в режиме «всегда relay» способна съесть месячную квоту заметно быстрее, чем кажется.
Часть 7. Файрвол и одна строчка в доках, которую все проматывают
А вот дальше в документации идёт предупреждение, которое стоит прочитать целиком: при включённом WebSocket (порты 21118/21119) hbbs и hbbr доверяют заголовкам X-Real-IP и X-Forwarded-For во входящих WebSocket-соединениях.
⛔ Так делать нельзя
Не выставляйте 21118/21119 напрямую в интернет. Любой, кто до них дотянется, может подделать эти заголовки и выдать себя за произвольный IP-адрес — со всеми последствиями для логов, бана и учёта.
✅ Как правильно
Как правильно:
если веб-клиент не нужен — держите 21118 и 21119 закрытыми, они не требуются для обычных десктопных клиентов;
если нужен — публикуйте их только через реверс-прокси, который сам проставляет X-Real-IP, а на файрволе разрешайте доступ к этим портам только с адреса прокси.
Часть 8. Что там с Wayland и превью-сборкой 1.4.9
Теперь про повод. По сообщению официального блога RustDesk от 14 августа 2026 года, в превью-сборке 1.4.9 появился unattended-доступ на Wayland: подключение без ручного подтверждения на той стороне, работа с несколькими мониторами и доступ к экрану входа после перезагрузки.
Ограничения на сегодня, тоже по официальному анонсу:
сборка отдельная, превью, в стандартные релизы это ещё не приехало;
поддерживаются только системы на базе Debian/Ubuntu архитектуры x86_64;
Fedora и Arch заявлены в планах.
⚠️ Осторожно
Стабильным релизом на момент публикации остаётся 1.4.7 от 2 июня 2026 года. Превью-сборка — это то, что ставят на тестовую машину, а не на сервер, к которому вы приезжаете за доступом из отпуска. Заявления вендора о том, «как теперь всё хорошо на Wayland», независимо пока не проверялись.
Почему это вообще новость: в Wayland нет привычного по X11 глобального доступа к экрану и вводу, всё идёт через порталы и требует сессии с интерактивным подтверждением. Именно поэтому «подключиться к машине, за которой никого нет» долгое время у большинства решений либо не работало, либо работало через возврат на X11.
Часть 9. Где заканчивается бесплатная версия
Честная граница, чтобы не было разочарований после установки:
веб-консоль на 21114, учётные записи, адресная книга с общим доступом, генератор кастомных клиентов, SSO и журнал сессий — это Pro;
в OSS вы получаете рабочий rendezvous и ретранслятор, шифрование по ключу и всё, что делает клиент, — но управление парком машин остаётся на вас;
обновления клиентов на всех машинах в OSS придётся катать самостоятельно.
Для одной семьи, домашней лаборатории или небольшой мастерской OSS-варианта хватает с запасом. Для парка в сотню машин отсутствие центральной консоли начинает ощущаться довольно быстро.
Чем закрываете удалённый доступ к домашним машинам: RustDesk со своим сервером, WireGuard плюс обычный RDP/VNC, или чем-то вроде Apache Guacamole? И если гоняли RustDesk через ретранслятор — сколько трафика съедал час работы?
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Удалённый доступ к своим же машинам — та область, где чужой сервер посередине раздражает сильнее всего: чужая инфраструктура знает, какие у вас компьютеры, когда вы к ним подключаетесь и с каких адресов. RustDesk эту проблему решает тем, что серверную часть можно полностью забрать себе, и стоит она ровно один дешёвый VPS.
Загвоздка в том, что установка выглядит обманчиво простой. Скопировал compose-файл, открыл диапазон портов, вставил ключ в клиент — работает. А потом выясняется, что весь трафик почему-то идёт через ретранслятор, что вебсокет-порты торчат наружу и что при перезагрузке контейнера все клиенты отвалились.
Разберём инсталляцию по деталям: чем занимаются два демона, за что отвечает каждый из шести портов, откуда берётся ключ и что именно написано в официальной документации про заголовки X-Real-IP. Заодно посмотрим на превью-сборку 1.4.9, где 14 августа появился unattended-доступ на Wayland.
ℹ️ Справка
Кому пригодится: тем, у кого дома NAS, мини-ПК или домашняя лаборатория, и нужно надёжно попадать на них с ноутбука; тем, кто помогает родственникам с компьютером; тем, кто не хочет, чтобы идентификаторы и трафик проходили через публичные серверы вендора.
Часть 1. Два демона: кто ищет, а кто передаёт
RustDesk-сервер — это не одна программа, а два независимых бинарника (плюс утилита
rustdesk-utils):Ключевой момент, который стоит понять до установки: в нормальном сценарии ваш сервер видит только служебный обмен, а сам поток рабочего стола идёт напрямую между машинами. Сервер становится узким местом по трафику только в режиме ретрансляции.
Именно поэтому на VPS с 1 vCPU и символическим каналом RustDesk обычно живёт спокойно — ровно до момента, пока обе стороны не окажутся за симметричным NAT или CGNAT. Тогда весь видеопоток пойдёт через ретранслятор, и внезапно окажется, что 100 Мбит/с на VPS были не бесконечными.
📌 Заметка
Если вы уже читали разбор про серый IP и CGNAT — на форуме — то узнаете половину механики: пробивка NAT здесь ровно та же, что в WireGuard-подобных решениях, только роль координатора играет hbbs.
Часть 2. Шесть портов, и один из них про UDP
Самая частая ошибка при развёртывании — открыть диапазон TCP и забыть про UDP. После этого клиенты видят друг друга, соединение устанавливается, но всегда через ретранслятор: пробивка NAT работает по UDP.
⚠️ Осторожно
21116нужен и в TCP, и в UDP — это два разных канала на одном номере. Если в правилах файрвола описан только TCP-диапазон21114:21119, пробивка NAT молча не заработает, и вы будете платить трафиком за каждую сессию.Часть 3. Развёртывание в Docker
Официальный образ —
rustdesk/rustdesk-server. Минимальныйdocker-compose.ymlиз документации:Тот же результат без compose:
Здесь есть две неочевидные детали.
Почему
network_mode: host. Пробивке NAT нужно, чтобы сервер видел реальные адреса и порты клиентов. Классический bridge с-p 21116:21116/udpподменяет источник, и определение типа NAT начинает врать. Плата за это — контейнеры занимают порты на самом хосте, так что развести две инсталляции на одной машине без дополнительных приседаний не выйдет.Каталог
./data. В него ложатся база SQLite и, главное, пара ключей. Если смонтировать сюда tmpfs или забыть про volume, при каждом перезапуске сервер будет генерировать новый ключ, а все клиенты — отваливаться с ошибкой соединения.Часть 4. Ключ: пропуск, а не просто галочка «шифрование»
При первом запуске hbbs создаёт пару ключей и кладёт их в рабочий каталог:
Содержимое
id_ed25519.pub— та самая строка, которую в клиенте вставляют в поле Key.🔒 Безопасность
Публичный ключ выполняет здесь двойную роль: он и обеспечивает шифрование, и фактически работает пропуском. Клиент без правильного ключа не сможет пользоваться вашим ретранслятором. Если вы выложите адрес сервера и ключ в общий чат, вы раздадите посторонним свой канал — и трафик пойдёт за ваш счёт.
Приватный
id_ed25519не должен уезжать никуда за пределы сервера и не должен попадать в git вместе с compose-файлом.Часть 5. Настройка клиента
В клиенте (Настройки → Сеть, требует повышения прав) заполняются четыре поля:
srv.example.comилиsrv.example.com:21116.id_ed25519.pub.Для десятка машин руками — терпимо. Дальше есть варианты: экспорт настроек из уже настроенного клиента и импорт через буфер обмена, либо запуск с готовой строкой конфигурации:
Генератор кастомного клиента, который зашивает адрес сервера и брендинг прямо в инсталлятор, — это уже платная функция.
Часть 6. Когда трафик идёт мимо сервера, а когда через него
По умолчанию клиенты пытаются договориться напрямую и переключаются на hbbr только при неудаче. Иногда прямое соединение нежелательно — например, когда не хочется светить домашний IP перед тем, кому вы даёте доступ. Для этого есть переменная окружения:
С ней весь трафик пойдёт через ретранслятор всегда, даже если прямой канал возможен. Это стоит осознанного решения: латентность вырастет, а исходящий трафик VPS будет расходоваться на каждый сеанс. На дешёвом хостинге с лимитом трафика полноценная удалёнка в режиме «всегда relay» способна съесть месячную квоту заметно быстрее, чем кажется.
Часть 7. Файрвол и одна строчка в доках, которую все проматывают
Базовые правила из официальной инструкции:
А вот дальше в документации идёт предупреждение, которое стоит прочитать целиком: при включённом WebSocket (порты 21118/21119) hbbs и hbbr доверяют заголовкам
X-Real-IPиX-Forwarded-Forво входящих WebSocket-соединениях.⛔ Так делать нельзя
Не выставляйте 21118/21119 напрямую в интернет. Любой, кто до них дотянется, может подделать эти заголовки и выдать себя за произвольный IP-адрес — со всеми последствиями для логов, бана и учёта.
✅ Как правильно
Как правильно:
X-Real-IP, а на файрволе разрешайте доступ к этим портам только с адреса прокси.Часть 8. Что там с Wayland и превью-сборкой 1.4.9
Теперь про повод. По сообщению официального блога RustDesk от 14 августа 2026 года, в превью-сборке 1.4.9 появился unattended-доступ на Wayland: подключение без ручного подтверждения на той стороне, работа с несколькими мониторами и доступ к экрану входа после перезагрузки.
Ограничения на сегодня, тоже по официальному анонсу:
⚠️ Осторожно
Стабильным релизом на момент публикации остаётся 1.4.7 от 2 июня 2026 года. Превью-сборка — это то, что ставят на тестовую машину, а не на сервер, к которому вы приезжаете за доступом из отпуска. Заявления вендора о том, «как теперь всё хорошо на Wayland», независимо пока не проверялись.
Почему это вообще новость: в Wayland нет привычного по X11 глобального доступа к экрану и вводу, всё идёт через порталы и требует сессии с интерактивным подтверждением. Именно поэтому «подключиться к машине, за которой никого нет» долгое время у большинства решений либо не работало, либо работало через возврат на X11.
Часть 9. Где заканчивается бесплатная версия
Честная граница, чтобы не было разочарований после установки:
Для одной семьи, домашней лаборатории или небольшой мастерской OSS-варианта хватает с запасом. Для парка в сотню машин отсутствие центральной консоли начинает ощущаться довольно быстро.
Источники
💬 Вопрос к сообществу
Чем закрываете удалённый доступ к домашним машинам: RustDesk со своим сервером, WireGuard плюс обычный RDP/VNC, или чем-то вроде Apache Guacamole? И если гоняли RustDesk через ретранслятор — сколько трафика съедал час работы?
TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение