Если сервер работает, игроки строят базы, а мобильное приложение Rust+ не может связаться с сервером или зависает на этапе регистрации, проблема почти всегда кроется в сетевой изоляции порта компаньона. Rust+ использует отдельный транспорт и протокол, независимые от основного игрового порта.
Инструкция предназначена для администраторов выделенных серверов Rust на Linux. На 27 октября 2026 года Rust использует выделенный TCP-порт компаньона по умолчанию — 28082, в то время как игровой трафик идёт по UDP-портам 28015 и 28016.
Как устроен обмен данными Rust+#
Сервис Rust+ работает в два этапа: отправка уведомления и прямое WebSocket-соединение.
- Регистрация в игре: Игрок открывает меню Esc → Rust+ и нажимает «Привязать сервер» (Pair with Server). Сервер Rust формирует криптографический токен и через защищённый бэкенд Facepunch отправляет push-уведомление (FCM для Android или APNs для iOS) на мобильное устройство игрока.
- Прямое подключение приложения: Мобильный телефон получает уведомление с адресом сервера, открывает приложение Rust+ и устанавливает прямое входящее TCP-соединение на порт
app.portсервера.
Если игроки видят сообщение «Уведомление отправлено», но телефон не подключается или бесконечно крутит индикатор загрузки, push-уведомление ушло, но входящий TCP-трафик к вашему серверу заблокирован файрволом или NAT.
Настройка параметров запуска сервера#
В строке запуска или конфигурационном файле проверьте четыре ключевых параметра Rust+:
| Параметр | Назначение | Пример |
|---|---|---|
+app.port | TCP-порт компаньона | 28082 |
+app.listenip | IP-интерфейс для прослушивания | 0.0.0.0 |
+app.publicip | Внешний IP-адрес для клиентов | 198.51.100.10 |
+app.notifications | Включение отправки уведомлений | true |
Если параметр +app.publicip не указан, Rust попытается определить его самостоятельно. Однако за NAT, маршрутизатором или в контейнере Docker сервер часто ошибочно передаёт клиентам внутренний IP-адрес (например, 172.17.0.2 или 192.168.1.50). В результате телефон вне домашней сети не сможет достучаться до сервера.
Пример корректного блока аргументов в скрипте запуска:
./RustDedicated -batchmode \
+server.port 28015 \
+server.queryport 28016 \
+app.port 28082 \
+app.listenip 0.0.0.0 \
+app.publicip "198.51.100.10" \
+app.notifications true
Замените 198.51.100.10 на фактический публичный IP-адрес вашего VPS. Если IP динамический, используйте скрипт автоматического обновления перед запуском.
Проверка открытых портов и файрвола#
Игровые порты Rust работают по протоколу UDP, поэтому многие администраторы по ошибке открывают порт 28082 тоже как UDP. Для компаньона требуется TCP.
На хосте Linux проверьте статус слушателя с помощью утилиты ss:
sudo ss -tulpn | grep -E '28015|28016|28082'
В выводе вы должны увидеть 28015 и 28016 с меткой udp, а 28082 — с меткой tcp и адресом 0.0.0.0:28082 или :::28082.
Если порт слушается, откройте его в UFW:
sudo ufw allow 28082/tcp comment 'Rust Plus Companion'
sudo ufw status | grep 28082
При запуске сервера в Docker убедитесь, что порт явно проброшен как TCP:
docker run -d \
-p 28015:28015/udp \
-p 28016:28016/udp \
-p 28082:28082/tcp \
--name rust-server rust-image
Тестирование доступности порта снаружи#
После настройки правил проверьте доступность TCP-порта с внешнего компьютера с помощью curl или nc:
nc -zv -w 5 198.51.100.10 28082
Если утилита сообщает Connection to 198.51.100.10 28082 port [tcp/*] succeeded!, сетевой уровень готов к приёму подключений мобильного приложения.
Если вы управляете собственными игровыми узлами через Nexardo, проверяйте согласованность портов и внешних адресов в шаблонах развёртывания: панель не заменяет корректную маршрутизацию TCP-трафика на уровне провайдера.




