RCON в Rust позволяет управлять сервером без входа в игру: кикать и банить, сохранять мир, менять переменные и смотреть список игроков. Для подключения нужны три параметра запуска (rcon.port, rcon.password, rcon.web), открытый TCP-порт и клиент. Главный риск в том, что пароль даёт полный доступ, а штатный веб-клиент Facepunch передаёт его в адресе соединения без шифрования. Ниже разобраны настройка, клиенты, рабочие команды и защита порта.

Что такое RCON в Rust и чем он отличается от консоли F1
RCON (remote console) принимает те же серверные команды, что и окно сервера, но через сеть. На Linux без него почти не обойтись: консоль запущенного сервера там не принимает ввод так, как окно в Windows. Об этом мы уже писали в гайде как создать сервер Rust через SteamCMD, а здесь продолжаем с момента, когда сервер уже запущен.
| Способ | Нужно быть в игре | Чем подтверждается доступ | Когда удобен |
|---|---|---|---|
| Окно сервера | Нет | Доступ к самой машине | Домашний сервер на Windows |
| Консоль F1 в игре | Да | SteamID в списке ownerid или moderatorid | Нужно видеть происходящее своими глазами |
| RCON | Нет | Общий пароль | Linux, хостинг, автоматизация, работа с телефона |
Отсюда главное отличие. В игре права привязаны к конкретному аккаунту Steam и делятся на два уровня: moderatorid (1) и ownerid (2). В настройках RCON мы ролей не нашли: пароль один на всех, поэтому его получатель не становится «модератором», а получает всю серверную консоль. Выдавать его помощнику, чтобы тот иногда кикал нарушителей, нельзя. Для этого есть moderatorid или панели с собственными учётными записями.
Как включить RCON: параметры запуска и порт
Официальное руководство Facepunch задаёт RCON прямо в строке запуска. Минимальный фрагмент выглядит так:
+rcon.port 28016 +rcon.password ДлинныйСлучайныйПароль +rcon.web 1
Если сервер уже настроен по нашему гайду, эти параметры в строке есть, и достаточно заменить пароль из примера. В документации встречается letmein, его ищут в первую очередь. После смены пароля сервер нужно перезапустить.
| Переменная | Значение в списке команд | На что влияет |
|---|---|---|
rcon.port |
28016 | TCP-порт, на который подключается клиент |
rcon.password |
В выгрузке нет, задаётся при запуске | Пароль подключения |
rcon.web |
Включён | 1 — WebSocket, 0 — старый протокол Source, помеченный как устаревший |
rcon.ip |
Пусто | Адрес, на котором сервер слушает RCON |
rcon.print |
Выключено | Печать команд RCON в консоль сервера |
Где источники расходятся
По умолчаниям данные не сходятся, поэтому полагаться на них незачем. Руководство Facepunch пишет, что rcon.port по умолчанию равен server.port, а другая страница той же вики, Corrosion Hour и выгрузка команд дают 28016. README веб-клиента обещает сделать WebSocket режимом по умолчанию когда-нибудь потом, а в выгрузке команд это уже так. Текст README старый, и выгрузке мы верим больше, но проще задать оба значения явно: тогда порт и режим будут известны независимо от версии документации.
С открытием порта легко ошибиться: игровой порт 28015 работает по UDP, а RCON по TCP. Правило для UDP на 28016 подключение не пропустит. В локальной сети пробрасывать порт на роутере не нужно.
Чем подключиться: клиенты RCON для Rust
Протокол простой, поэтому клиентов много. Различаются они прежде всего тем, где хранится пароль и откуда идёт соединение.
| Клиент | Формат | Где живёт пароль | Кому подойдёт |
|---|---|---|---|
| Facepunch WebRCON | Страница в браузере | В памяти вашего браузера, если оставить Save Connection | Разовая проверка с личного компьютера |
| rcon-cli (gorcon) | Программа для командной строки | В команде, файле настроек или скрипте | Автоматизация: сохранение и объявления по расписанию |
| RustAdmin | Настольная программа и онлайн-версия | У вас либо на стороне сервиса, в зависимости от версии | Администратор, которому нужны список игроков и права плагинов |
| BattleMetrics | Веб-панель | На стороне сервиса | Команда модераторов на публичном сервере |
| rcon.io | Веб-панель, на момент проверки бесплатная бета | На стороне сервиса, соединение с сервером открыто постоянно | Владелец с модераторами без своей инфраструктуры |
Для rcon-cli авторы приводят такой вызов:
./rcon -a 127.0.0.1:28016 -p пароль -t web status
Ключ -t web обязателен, если сервер работает в режиме WebSocket. В README программы есть и вариант с +rcon.web 0 на сервере, но он возвращает устаревший протокол. Нам он кажется худшим из двух. Пароль в такой команде попадает в историю оболочки, поэтому для постоянной работы лучше хранить его в файле настроек с закрытыми правами.
В старых материалах по Rust встречается команда rcon.login для входа из игровой консоли. В актуальной выгрузке команд её нет, поэтому рассчитывать на неё не советуем.
Как устроен WebRCON: адрес, пароль и JSON
Эту часть мы проверили по исходному коду клиента Facepunch, он открыт. Соединение создаётся одной строкой:
new WebSocket("ws://" + addr + "/" + pass)
Из неё следуют два вывода. Пароль передаётся в адресе соединения, а схема ws:// означает отсутствие TLS. Вики отдельно предупреждает, что онлайн-консоль Facepunch работает не по HTTPS. Описания встроенного шифрования RCON мы в материалах Facepunch не нашли, поэтому считайте, что пароль и все команды идут по сети открытым текстом. В общественной сети Wi-Fi такое подключение использовать нельзя.
Команды отправляются как JSON из трёх полей:
{"Identifier": 1002, "Message": "status", "Name": "WebRcon"}
Message содержит саму команду, а Identifier вернётся в ответе, и по нему клиент сопоставляет ответ с запросом. В клиенте Facepunch номера выше 1000 считаются адресными, остальное идёт в общий поток консоли, но это соглашение самого клиента. Команда playerlist возвращает в Message JSON со списком игроков. На этом клиент Facepunch строит свою страницу игроков, удобно и для собственных скриптов.
Ещё одна деталь: при включённом Save Connection адрес и пароль сохраняются в localStorage браузера обычным JSON. На сервера Facepunch они не отправляются, как и обещает README, но на чужом компьютере галочку надо снять.
Команды RCON, которые нужны чаще всего
Полный список прав и выдачи предметов собран в материале команды для админа в Rust, а в таблице ниже только то, что полезно именно удалённо. Синтаксис взят из вики Facepunch и выгрузки команд.
| Задача | Команда | Что учесть |
|---|---|---|
| Кто на сервере | status, users |
status показывает ещё пинг, время в игре и IP |
| Выгнать игрока | kick SteamID причина |
Зайти обратно он может сразу |
| Забанить офлайн | banid SteamID имя причина срок |
Игрок не обязан быть на сервере. Срок вида 1M7d5m: месяц, 7 дней, 5 минут |
| Снять бан | unban SteamID |
Список банов с причинами покажет banlistex |
| Заглушить чат | mute SteamID |
С правами администратора действует на весь сервер |
| Написать всем | say текст |
Из игрового клиента та же команда вводится как sv say текст |
| Выдать права | moderatorid, ownerid |
Игроку нужно перезайти. Снимаются через removemoderator и removeowner |
| Сохранить мир | server.save |
Полезно перед ручной остановкой |
| Сохранить настройки | server.writecfg |
Записывает конфигурационные файлы |
| Найти переменную | find rcon |
Покажет всё, что сервер знает по этому слову |
По сохранению прав источники снова расходятся: вики Facepunch пишет, что ownerid сохраняется автоматически, а Corrosion Hour рекомендует дополнительно выполнить server.writecfg. Лишний вызов ничего не ломает, так что перед перезапуском его можно сделать. Что происходит с событиями при плановой перезагрузке, разобрано отдельно в новости о рестарте сервера Rust, а через RCON удобно менять и переменные погоды.
Защита RCON от подбора пароля
Эти переменные редко упоминают в гайдах, а защита у сервера есть и без плагинов. Значения по умолчанию взяты из выгрузки команд, на своей сборке сверьте их через find rcon.
| Настройка | По умолчанию | Что делает |
|---|---|---|
rcon.maxpasswordfailures |
5 | Число неверных паролей до бана IP |
rcon.banduration |
300 с | Длительность такого бана |
rcon.permanentbanfailedips |
false | Банить навсегда, а не на время |
rcon.connectioncooldown |
1 с | Пауза между подключениями с одного адреса |
rcon.maxconnectionsperip |
5 | Подключений с одного IP, после изменения нужен рестарт |
rcon.maxconnections |
500 | Подключений всего, тоже с рестартом |
rcon.logfailedattempts |
true | Записывать неудачные попытки |
Наша оценка: при таких значениях один адрес успевает проверить около 1440 паролей в сутки (5 попыток за каждые 5 минут, 288 окон). Для случайного пароля это ничтожно, для admin123 и слов из словаря опасно, а ботнет с тысячами адресов обходит ограничение почти полностью. Поэтому пароль нужен длинный и случайный, а порт желательно закрыть для всех, кроме своих.

Три способа закрыть порт
| Способ | Как делается | Минус |
|---|---|---|
| Правило по IP | ufw allow from ВАШ_IP to any port 28016 proto tcp |
Не подходит при постоянно меняющемся домашнем адресе |
| Только локально и SSH-туннель | +rcon.ip 127.0.0.1, затем ssh -L 28016:127.0.0.1:28016 user@сервер; клиент подключается к 127.0.0.1:28016 |
Нужен SSH; внешние панели работать перестанут |
| Правило по IP панели | Разрешить только адреса сервиса, если он их публикует | Пароль всё равно хранится у стороннего сервиса |
Туннель решает сразу и проблему открытого текста: команды идут внутри SSH. На живом сервере мы эту связку не проверяли, она следует из описания rcon.ip и обычной работы SSH, поэтому после настройки проверьте снаружи, что порт действительно закрыт. На арендованном хостинге правила могут задаваться только через его панель, а доступа к ufw может не быть.
Как проверить, что происходит прямо сейчас
Три служебные команды покажут картину без логов: rcon.print_rcon_clients выводит подключённые клиенты, rcon.print_rcon_failed_logins адреса с неверными паролями, а rcon.print_rcon_bans постоянные баны. Каждая понимает ключ --json, что удобно для скриптов. Подозрительный адрес блокирует rcon.ban_ip, такой бан постоянный. Если администраторов несколько, включите rcon.print: команды RCON начнут попадать в консоль сервера, и станет понятно, что выполнялось.
Закрытый сервер: белый список и skipqueue
Отдельной команды белого списка в чистом Rust нет, и вики Facepunch говорит об этом прямо. Работают два варианта, и оба удобно вести через RCON.
- Без плагинов. Задайте
server.maxplayers 0и добавляйте участников командойglobal.skipqueueid SteamID имя заметка. Войдут только они и администраторы. Записи хранятся вusers.cfgрядом с правами, а убирает ихremoveskipqueue. - С плагином. На Oxide подходит плагин Whitelist, доступ выдаёт команда
o.grant user SteamID whitelist.allow. В Carbon есть собственный модуль Whitelist.
Страница вики о скрытых серверах давно не обновлялась, поэтому после настройки зайдите с чужого аккаунта и проверьте, что посторонних действительно не пускает. Закрытие сервера решает другую задачу, чем выбор площадки: как игроки ищут подходящий проект, видно из гайда как выбрать сервер в Rust. Если у вас ещё и своя карта, настройки для неё описаны в материале своя карта на сервере Rust.
Частые ошибки при настройке RCON
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Клиент сразу отключается | Порт закрыт или открыт как UDP | Правило для TCP на rcon.port, проброс на роутере |
| Facepunch WebRCON пишет «Connection was closed — Error код» | Сообщение не называет причину: это может быть и порт, и пароль | Подключение другим клиентом, например rcon-cli |
| Страница клиента открыта по HTTPS и не соединяется | Браузер может блокировать ws:// с защищённой страницы |
Другой клиент или консольная программа |
| Пароль верный, а ответа нет | Ваш IP забанен после пяти ошибок | Подождать 5 минут или выполнить rcon.unban_ip на сервере |
| Старая программа не подключается | Клиент работает по протоколу Source, а сервер по WebSocket | Обновить клиент, а не откатывать rcon.web |
Права после ownerid не появились |
Игрок не перезашёл | Выйти и зайти снова |
Отдельно о ловушке с rcon.permanentbanfailedips. На сервере с общим адресом или при опечатке в скрипте этот режим заблокирует вас самих без срока, и снимать бан придётся с самого сервера. Включать его стоит, только если у вас есть другой доступ к машине, например SSH.
Нередко пароль утекает и без взлома: скриншотом панели, через файл запуска в публичном репозитории или вместе со старым сотрудником. Когда команда меняется, пароль меняют тоже.
Коротко
- RCON управляет сервером Rust без входа в игру, для него нужны
rcon.port,rcon.passwordиrcon.web 1. - Порт работает по TCP, а игровой порт 28015 по UDP.
- Пароль один и даёт всю консоль, а помощникам подходит moderatorid.
- Клиент Facepunch подключается через
ws://и передаёт пароль в адресе, шифрования там нет. - После пяти неверных паролей IP блокируется на 300 секунд, но порт всё равно лучше закрыть или вести через SSH-туннель.
- Белого списка в чистой игре нет: его заменяют
server.maxplayers 0со skipqueue либо плагин. - Значения по умолчанию расходятся между источниками, поэтому порт и режим задавайте явно, а на своей сборке сверяйте через
find rcon.
