Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RustDesk Support Setup

RustDesk Go Windows Docker License: MIT

English · Русский

Небольшая утилита для Windows, которая автоматически настраивает существующий клиент RustDesk OSS для работы с собственным self-hosted сервером.

Не требует RustDesk Pro, API или прав администратора.

Проект закрывает весь минимальный сценарий:

VPS
 |
 +--> hbbs  ID / rendezvous
 |
 +--> hbbr  relay
 |
 +--> id_ed25519.pub
          |
          v
     support.exe
          |
          v
   RustDesk клиента

Возможности

  • настройка существующего RustDesk одним запуском support.exe
  • собственный RustDesk OSS Server без RustDesk Pro
  • hbbs и hbbr через Docker Compose
  • постоянное хранение серверной пары ключей
  • автоматическая настройка:
    • custom-rendezvous-server
    • relay-server
    • key
  • сохранение остальных настроек RustDesk и истории подключений
  • автоматический перезапуск установленного RustDesk
  • relay по тому же домену, что и ID Server
  • готовая схема обновления и backup сервера

Что изменяет support.exe

Программа изменяет только три параметра в:

%APPDATA%\RustDesk\config\RustDesk2.toml
custom-rendezvous-server
relay-server
key

Остальная конфигурация файла сохраняется.

RustDesk должен быть установлен по стандартному пользовательскому пути:

%LOCALAPPDATA%\rustdesk\rustdesk.exe

Требования

Сервер

Linux:        Debian / Ubuntu
Public IPv4:  требуется
Domain name:  требуется
Docker:       Docker Engine + Docker Compose

Пример домена в инструкции:

example.relay.net

DNS A-запись должна указывать на публичный IPv4 сервера.

Проверка:

getent ahostsv4 example.relay.net

Порты

Минимальные порты RustDesk OSS Server:

Port Protocol Purpose
21115 TCP NAT type test
21116 TCP ID / rendezvous / hole punching
21116 UDP ID registration / heartbeat
21117 TCP Relay

21118/tcp и 21119/tcp используются Web Client и для обычного RustDesk-клиента не требуются.

Машина для сборки

OS: Windows
Go: установлен
Git: установлен

На компьютере конечного пользователя Go и Git не нужны.

Установка RustDesk OSS Server

Создайте DNS A-запись:

example.relay.net -> PUBLIC_VPS_IP

Замените example.relay.net на свой домен и выполните на VPS от root:

set -euo pipefail

DOMAIN="example.relay.net"

# ------------------------------------------------------------
# Проверка
# ------------------------------------------------------------

if [ "$(id -u)" -ne 0 ]; then
    echo "ERROR: run as root"
    exit 1
fi

echo "DNS:"
getent ahostsv4 "$DOMAIN" || {
    echo "ERROR: $DOMAIN does not resolve"
    exit 1
}

# ------------------------------------------------------------
# Docker
# ------------------------------------------------------------

apt update
apt install -y ca-certificates curl

if ! command -v docker >/dev/null 2>&1; then
    curl -fsSL https://get.docker.com | sh
fi

docker --version
docker compose version

# ------------------------------------------------------------
# RustDesk
# ------------------------------------------------------------

mkdir -p /opt/rustdesk/data
cd /opt/rustdesk

cat >/opt/rustdesk/compose.yml <<'EOF'
services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: "host"
    restart: unless-stopped

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

docker compose pull
docker compose up -d

# ------------------------------------------------------------
# Firewall
# ------------------------------------------------------------

if command -v ufw >/dev/null 2>&1 && ufw status | grep -q '^Status: active'; then
    ufw allow 21115/tcp
    ufw allow 21116/tcp
    ufw allow 21116/udp
    ufw allow 21117/tcp
else
    echo
    echo "NOTE: UFW is inactive or not installed."
    echo "Open manually:"
    echo "  21115/tcp"
    echo "  21116/tcp"
    echo "  21116/udp"
    echo "  21117/tcp"
fi

# ------------------------------------------------------------
# Ожидание генерации ключа hbbs
# ------------------------------------------------------------

for _ in $(seq 1 30); do
    [ -s /opt/rustdesk/data/id_ed25519.pub ] && break
    sleep 1
done

if [ ! -s /opt/rustdesk/data/id_ed25519.pub ]; then
    echo "ERROR: hbbs public key was not created"
    docker logs hbbs --tail 100
    exit 1
fi

# ------------------------------------------------------------
# Проверка
# ------------------------------------------------------------

echo
docker compose ps

echo
echo "Listening ports:"
ss -lntup | grep -E ':2111[5-9]\b' || true

echo
echo "============================================================"
echo "RustDesk Server is ready"
echo "============================================================"
echo
echo "ID Server:"
echo "  $DOMAIN"
echo
echo "Relay Server:"
echo "  $DOMAIN"
echo
echo "Public Key:"
cat /opt/rustdesk/data/id_ed25519.pub
echo
echo "============================================================"

При первом запуске hbbs автоматически создаёт серверную пару ключей:

/opt/rustdesk/data/id_ed25519
/opt/rustdesk/data/id_ed25519.pub

Публичный ключ:

cat /opt/rustdesk/data/id_ed25519.pub

Приватный ключ:

/opt/rustdesk/data/id_ed25519

Приватный ключ нельзя передавать клиентам или публиковать.

Проверка сервера

Контейнеры:

cd /opt/rustdesk
docker compose ps

Логи hbbs:

docker logs hbbs --tail 100

Логи relay:

docker logs hbbr --tail 100

Порты:

ss -lntup | grep -E ':2111[5-9]\b'

Ожидаемый минимум:

21115/tcp
21116/tcp
21116/udp
21117/tcp

Сборка support.exe

Клонируйте репозиторий на Windows-машину с установленным Go:

git clone https://github.com/dimadr/rustdesk-bootstrap.git
cd rustdesk-bootstrap

Получите публичный ключ на сервере:

cat /opt/rustdesk/data/id_ed25519.pub

Соберите support.exe:

go build -buildvcs=false -ldflags "-H windowsgui -s -w -X main.serverValue=example.relay.net -X main.relayValue=example.relay.net -X main.keyValue=PUBLIC_KEY" -o support.exe .

Замените:

example.relay.net -> ваш домен
PUBLIC_KEY        -> содержимое id_ed25519.pub

Если main.relayValue не задан, программа автоматически использует main.serverValue и как Relay Server.

Готовые бинарные файлы в репозитории не публикуются.

Использование

На удалённом компьютере уже должен быть установлен RustDesk.

Запустите:

support.exe

Программа:

находит RustDesk
      |
      v
находит RustDesk2.toml
      |
      v
меняет только server / relay / key
      |
      v
останавливает запущенный RustDesk
      |
      v
запускает RustDesk снова

После этого клиент использует ваш self-hosted RustDesk Server.

Архитектура

                         Internet
                            |
             +--------------+--------------+
             |                             |
             v                             v
        hbbs :21116                   hbbr :21117
      ID / rendezvous                    relay
             |                             |
             +--------------+--------------+
                            |
                            v
                  RustDesk clients

hbbs используется для регистрации клиентов, rendezvous и попытки прямого соединения.

Если прямое соединение невозможно, трафик проходит через hbbr.

Серверные файлы

/opt/rustdesk/
├── compose.yml
└── data/
    ├── id_ed25519
    └── id_ed25519.pub

Каталог data подключается в оба контейнера:

./data -> /root

Поэтому удаление или пересоздание контейнеров не меняет серверный ключ, пока сохранён /opt/rustdesk/data.

Backup

Создать backup:

tar czf /root/rustdesk-data-backup.tar.gz -C /opt/rustdesk data

Проверить:

tar tzf /root/rustdesk-data-backup.tar.gz

Критически важный файл:

data/id_ed25519

Backup рекомендуется хранить вне VPS.

Обновление

Перед обновлением создайте backup:

tar czf /root/rustdesk-data-backup.tar.gz -C /opt/rustdesk data

Обновление:

cd /opt/rustdesk

docker compose pull
docker compose up -d

docker compose ps

Проверка:

docker logs hbbs --tail 50
docker logs hbbr --tail 50

Пара ключей сохраняется в /opt/rustdesk/data и при обычном обновлении не меняется.

Security

Публиковать можно:

домен ID Server
домен Relay Server
id_ed25519.pub
support.exe

Не публиковать:

/opt/rustdesk/data/id_ed25519
backup-архивы с приватным ключом
доступ к VPS
SSH private keys

Для обычного RustDesk OSS Client не открывайте без необходимости:

21118/tcp
21119/tcp

Эти порты предназначены для Web Client.

Troubleshooting

support.exe не находит RustDesk

Ожидаемый путь:

%LOCALAPPDATA%\rustdesk\rustdesk.exe

Проверьте:

Test-Path "$env:LOCALAPPDATA\rustdesk\rustdesk.exe"

support.exe не находит конфигурацию

Ожидаемый файл:

%APPDATA%\RustDesk\config\RustDesk2.toml

Проверьте:

Test-Path "$env:APPDATA\RustDesk\config\RustDesk2.toml"

Если RustDesk только что установлен, запустите его хотя бы один раз, чтобы конфигурация была создана.

Не появился id_ed25519.pub

Проверьте hbbs:

docker ps
docker logs hbbs --tail 100
ls -la /opt/rustdesk/data/

Клиент видит сервер, но соединение идёт плохо

Проверьте relay:

docker logs -f hbbr

И firewall:

ss -lntup | grep -E ':2111[5-9]\b'

Должны быть доступны:

21115/tcp
21116/tcp
21116/udp
21117/tcp

Проверка DNS

getent ahostsv4 example.relay.net

Адрес должен соответствовать публичному IPv4 VPS.

Удаление сервера

Сначала создайте backup:

tar czf /root/rustdesk-data-backup.tar.gz -C /opt/rustdesk data

Остановите контейнеры:

cd /opt/rustdesk
docker compose down

Полное удаление данных:

rm -rf /opt/rustdesk

Последняя команда уничтожает серверную пару ключей. После этого ранее настроенные клиенты потребуют новый публичный ключ.

Ссылки

Лицензия

MIT License — see LICENSE

Disclaimer

Проект предоставляется как есть, без гарантий работы, совместимости или сохранности данных.

Администратор самостоятельно отвечает за сервер, DNS, firewall, обновления, резервные копии, безопасность инфраструктуры и соответствие применимому законодательству.

Перед использованием на важной системе проверьте доступность сервера, создайте backup приватного ключа и протестируйте подключение с внешней сети.

About

Configure RustDesk OSS clients for self-hosted servers without Pro or API.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages