Skip to content

Централизованные баны (Centralized Banning)

Централизованный бан — это функция, которая позволяет владельцам серверов использовать внешний синхронизированный список банов (и мутов), общий для нескольких серверов.

Как это работает

Вам понадобится веб-сервер (HTTP или HTTPS), на котором будет размещён централизованный API для банов.
Facepunch не предоставляет реализацию этого API, но он достаточно простой. Некоторые сторонние реализации перечислены в разделе FAQ ниже.

Чтобы включить централизованные баны на сервере, укажите endpoint в convar server.bansServerEndpoint.
Например:

txt
server.bansServerEndpoint "https://domain.tld/api/rustBans/"

После настройки сервер будет обращаться к этому API при подключении игрока, чтобы проверить, не забанен ли (или не замучен ли) игрок.

Настройка централизованных банов на сервере

Если server.bansServerEndpoint настроен, например, так:

txt
"https://domain.tld/api/rustBans/"

ваш веб-сервер будет получать запросы от Rust Dedicated Server следующего вида.

GET /api/rustBans/{steamID64}

Возвращает статус бана для 64-битного SteamID в формате JSON.

Примечание

URI для этого запроса формируется добавлением SteamID64 к значению server.bansServerEndpoint.

Это означает, что вы можете установить server.bansServerEndpoint в значение вида:

"https://domain.tld/api/rustBans?steamId="

— и тогда SteamID будет передан как параметр URL.

Сервер автоматически добавит / в конец строки endpoint, если она не заканчивается на / или =.

Пример ответа

json
{
  "steamId": "76561197960287930",
  "reason": "definitely not cheating",
  "expiryDate": 1608611830,
  "isMute": false
}

Поля ответа

ПолеОписание
steamId64-битный SteamID, для которого применяется бан/мут.
Используется для проверки того, что API возвращает корректные данные.
reasonПричина блокировки.
Это сообщение будет показано игроку при подключении к серверу.
expiryDateUnix-время (timestamp), указывающее момент окончания бана/мута. Значения <= 0 означают бессрочный бан/мут.
isMuteЕсли true, игрок замучен.
Длительность мута берётся из expiryDate.
Значения <= 0 означают постоянный мут.

Коды ответа (HTTP)

Rust Dedicated Server также учитывает код ответа вашего веб-сервера:

Код состоянияЗначение
2xxУспех. В теле ответа должен быть JSON в формате, описанном выше.
404Не найдено: запрошенный SteamID64 не забанен (и не замучен).
ДругоеРедиректы обрабатываются Unity, а коды ошибок приводят к сбою проверки (см. server.bansServerFailureMode в FAQ).

FAQ

Что происходит, когда API endpoint недоступен или работает некорректно?

Если централизованная система блокировки сталкивается с ошибкой, в консоли сервера появится сообщение.

server.bansServerFailureMode определяет, что происходит с игроками :

ЗначениеОписание
0Игроки допускаются на сервер при ошибке (ошибка логируется в консоль).
1Игрокам отказывают в подключении при ошибке (ошибка логируется в консоль и показывается игроку).
Запросы к моему API истекают по тайм-ауту. Что делать?

Тайм-аут по умолчанию для всех запросов централизованных банов — 5 секунд.

Вы можете изменить это значение с помощью convar server.bansServerTimeout (в секундах).

Учтите, что чем дольше обрабатываются запросы, тем дольше игрокам придётся ждать подключения. Обычно лучше ускорить API, чем увеличивать тайм-аут.

Нужно ли перезапускать сервер после изменения convar?

Перезапуск не требуется после изменения server.bansServerEndpoint, server.bansServerFailureMode или server.bansServerTimeout.

Однако игроки, уже находящиеся на сервере, не будут кикнуты при включении или изменении server.bansServerEndpoint.

Есть ли общедоступные реализации?

API спроектирован так, что его можно использовать даже при наличии только HTTP-сервера. Например, можно размещать JSON-файлы в папке, и Rust-сервер будет их считывать.

Это менее удобно, так как управлять файлами сложнее, но оно работает.

Ниже приведён список известных реализаций:

Опубликовано под лицензией MIT.
Данный проект не является официальной документацией Facepunch/Rust.
Это общественная база знаний, созданная для удобства администраторов и игроков.