RE:NODE

Сеть11 мин чтения

Сервера нет в списке Steam?

Почему работающий игровой сервер не виден в списке Steam или в игре: регистрация на мастер-сервере, query-порты, токены, фильтры и флаги видимости в каждой игре.

0 прочтений

Игровой сервер Steam появляется в списке только тогда, когда работают три отдельные вещи: сервер зарегистрировался на мастер-сервере Steam, клиент игрока может достучаться до query-порта сервера и получить ответ, и собственные фильтры игрока пропускают результат. Сервер, на который можно зайти по IP, но который нельзя найти в списке, провалил одно из этих трёх условий, и лечатся они по-разному. Но прежде всего проверьте одно: использует ли игра список Steam вообще, потому что немало популярных игр публикует серверы через Epic, PlayFab, Cfx.re или собственный сервис, и исправления на стороне Steam им ничем не помогут.

Эта статья разбирает путь в список по порядку. Если нужны только номера портов, таблица есть в статье порты игровых серверов; если игроки не могут подключиться вообще, даже по IP, начните лучше со статьи почему игроки не могут подключиться к вашему серверу.

Как строится список серверов Steam#

Список - это не живое отображение серверов. Он собирается в два шага, и делают это две разные стороны.

  1. Регистрация. Когда запускается сервер, использующий API игровых серверов Steam, он входит в Steam - анонимно или с токеном входа игрового сервера - и начинает отправлять heartbeat. Мастер-сервер Steam записывает публичный адрес сервера и его query-порт под app id игры вместе с несколькими флагами: пароль, античит, регион, теги.
  2. Запрос. Когда игрок открывает список, клиент запрашивает у мастер-сервера адреса, подходящие под игру и фильтры игрока. Затем клиент сам отправляет query-пакет на каждый адрес из списка и ждёт ответов. Название, карта, число игроков и пинг, которые вы видите, приходят из этого прямого запроса, а не от Steam.
вход и heartbeatсписок для app idадресаA2S-запрос на адресимя, карта, игрокиИгровой серверquery-порт открытМастер-сервер Steamтолько адресаКлиент игрокасписок открыт
Откуда берётся строка в списке серверов

Это разделение объясняет почти любую жалобу на список. Сервера, который так и не зарегистрировался, в списке нет совсем. Сервер, который зарегистрировался, но не отвечает на запросы, либо отсутствует, либо показан без пинга и без названия - зависит от игры. А сервер, который и зарегистрирован, и отвечает, всё равно не виден игроку, если его исключает фильтр по пингу или «не заполнен». Сам запрос - это протокол A2S, описанный в статье query-порты и A2S.

Регистрация: сервер так и не сообщил о себе Steam#

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

Выключен собственный переключатель «public» в игре

В большинстве игр есть настройка, которая решает, регистрироваться ли вообще. Часто по умолчанию она выключена или выставлена шаблоном в «только для друзей».

ИграНастройкаВ списке, когда
Игры на Source (CS2, TF2, Garry's Mod)sv_lan в server.cfgsv_lan 0
ValheimАргумент запуска -public-public 1
PalworldАргумент запуска -publiclobbyуказан
Project ZomboidPublic в servertest.iniPublic=true
7 Days to DieServerVisibility в serverconfig.xml2 (публичный); 1 - только для друзей, 0 - не в списке
Factoriovisibility в server-settings.json"public": true плюс имя пользователя и токен factorio.com

Сервер на Source с sv_lan 1 - это LAN-сервер: он не общается с мастер-сервером и отказывает игрокам вне своей подсети. Для LAN-вечеринки это правильная настройка, для всего остального - неправильная, и в скопированных конфигах она попадается чаще, чем следовало бы.

Нет токена входа или он плохой

Нескольким играм Steam для публичной регистрации нужен токен входа игрового сервера (GSLT). Counter-Strike 2 без него не появится в публичном списке, а токен, который забанен, удалён или создан для другого app id, ведёт себя как отсутствующий. Сервер при этом обычно всё равно запускается, поэтому на поиск этой причины и уходит столько времени. На сервере на движке Source вывод при запуске сообщает, что произошло:

code
Connection to Steam servers successful.   Public IP is 203.0.113.10.Assigned persistent gameserver Steam ID [G:1:1234567].VAC secure mode is activated.

«Persistent» значит, что токен принят. «Anonymous» значит, что сервер вошёл без него, и в зависимости от игры он будет в списке с ограничениями или не появится вовсе. Строка о том, что вход не удался, означает, что токен отклонён. В статье токены игровых серверов Steam описано, как его создать, какой app id использовать и за что токен банят.

Сервер не может достучаться до Steam

Сервер должен устанавливать исходящие соединения со Steam. На арендованном сервере проблема почти никогда не в этом; на домашнем сервере за агрессивным исходящим файрволом или на VDS, где кто-то прописал политику «запрещать всё исходящее по умолчанию», - вполне может быть. Если в логе запуска так и не появилось сообщение о подключении к Steam, смотрите исходящие правила раньше входящих. А иногда дело в самом Steam: во время сбоя или технических работ Steam регистрация не проходит ни у кого. Это быстро проверяется по тому, видны ли в списке другие серверы той же игры.

Запрос: Steam о сервере знает, а клиент не может спросить#

Зарегистрированный сервер с недоступным query-портом даёт самый запутанный симптом: он может ненадолго появиться, появиться без пинга или не появиться вовсе - зависит от того, как список в игре обращается с сервером, который не отвечает. Большинство внутриигровых списков отбрасывает серверы, не ответившие за короткий таймаут, поэтому со стороны игрока это выглядит в точности как «не зарегистрирован».

Все причины - вариации одного и того же: на query-пакет не приходит ответ.

  • Query-порт не выделен или не проброшен. Играм, у которых query-порт отличается от игрового, - Valheim (2457), Palworld (27015), Unturned (27015 рядом с игровым портом 27016), Arma 3, DayZ, большинству игр на Unreal - нужен открытый второй порт. Люди открывают тот порт, который вводят в поле подключения, и забывают про тот, которым пользуется список.
  • Он открыт не для того протокола. Запросы Steam идут по UDP.
  • Игра отвечает не на том порту, который зарегистрировала. Если вы поменяли query-порт в одном месте, но не в настройках самой игры, мастер-сервер хранит порт, который никто не слушает.
  • Сервер ограничивает частоту запросов. Серверы на Source ограничивают, сколько запросов они обслуживают с одного адреса и в сумме (sv_max_queries_sec, sv_max_queries_sec_global). Значения по умолчанию разумны; конфиг, в котором их понизили во время атаки и так и не вернули, сделает сервер для части списков похожим на неотвечающий.

Окончательно вопрос решает проверка: запросите сервер сами из другой сети, это одна строка с инструментами из статьи query-порты и A2S. Если пришёл ответ с правильным названием и числом игроков, с сервером и сетью всё в порядке, а проблема на стороне клиента.

Фильтры игрока и ограничения списка#

Сервер зарегистрирован и отвечает на запросы, а игрок всё равно говорит, что его нет. Теперь проблема в самом списке.

Фильтры по пингу. Многие внутриигровые списки по умолчанию скрывают серверы выше порога задержки, и у собственного списка в клиенте Steam (View, затем Game Servers) тоже есть фильтр задержки. Игрок в Северной Америке, который ищет сервер в Германии с фильтром «меньше 100 мс», никогда его не увидит. Прежде всего спросите, какие фильтры выставлены.

«Не заполнен», «есть игроки» и «без пароля». Новый сервер с нулём игроков скрыт фильтром «есть игроки». Сервер с паролем на вход скрыт фильтром «без пароля». В некоторых играх оба фильтра включены по умолчанию.

Регион. Серверы на движке Source сообщают регион через sv_region, и мастер-сервер умеет по нему фильтровать. sv_region 3 - это Европа, а 255 - весь мир; сервер, сообщающий неверный регион, может выпасть из списков с фильтром по региону. Не каждая игра это учитывает, и новые проекты в основном игнорируют, но правильно выставить его ничего не стоит.

Список длинный, а поиск слабый. Мастер-сервер Steam возвращает ограниченное число результатов на запрос, а внутриигровые списки часто сортируют по пингу и перестают отрисовывать после нескольких сотен строк. Небольшой сервер с общим названием вроде «EU Survival» теряется в таком списке, даже если формально в нём есть. Ищите по необычному слову из названия своего сервера. В играх на Source sv_tags добавляет теги для поиска - держите их короткими и честными.

Всё просто медленно. Некоторым спискам нужны минуты, чтобы подхватить новый сервер. Самый известный случай - список сообщества Valheim; десять минут там не редкость. Сервер, который каждые несколько минут перезапускается из-за цикла падений, может так и не продержаться зарегистрированным достаточно долго, чтобы его увидели.

Игры, которые не используют список Steam#

Большая доля вопросов «нет в списке Steam» касается игр, которые им никогда не пользуются. Для них проверки на стороне Steam - потраченное зря время.

ИграСервис спискаЧем управляется
Minecraft (Java)Нет - клиент пингует сохранённые адресаРегистрировать нечего; поделитесь адресом
FiveMСписок серверов Cfx.resv_licenseKey; пустой sv_master1 скрывает сервер
BeamMPБэкенд BeamMPAuthKey и Private в ServerConfig.toml
Don't Starve TogetherЛобби KleiТокен кластера в cluster_token.txt
Valheim с кроссплеемPlayFab-crossplay; игроки также заходят по коду
ARK: Survival AscendedEpic Online ServicesПоказывается в игре среди неофициальных серверов
SatisfactoryПубличного списка нетИгроки добавляют сервер по адресу в Server Manager
TerrariaПубличного списка нетПоделитесь адресом

Схема у них та же, что у Steam, - зарегистрироваться, затем отвечать на запросы, - но учётные данные и адреса сервисов другие. Серверы FiveM с недействительным лицензионным ключом в список не попадут; серверы BeamMP без ключа авторизации работают приватно; сервер DST без действующего токена кластера не появится в лобби. Каждый из этих ключей можете предоставить только вы, потому что он привязан к вашей учётной записи в этом сервисе. На RE:NODE игры, которым нужны такие данные, - CS2 и Unturned (токен Steam), FiveM (ключ Cfx.re), Don't Starve Together (токен Klei), BeamMP (ключ авторизации) - собираются сразу, а установка ждёт на вкладке Setup, пока вы не вставите ключ, вместо того чтобы запускать сервер, который никогда не попадёт в список.

Диагностика по порядку#

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

  1. Зайдите по прямому адресу. Если не получается, проблема не в списке. Переходите к диагностике подключения.
  2. Найдите в логе запуска строку о регистрации. Для игр на Source - строки о подключении к Steam и Steam ID, приведённые выше. Для других игр ищите подключение к сервису: heartbeat Cfx.re, аутентификация BeamMP, сессия PlayFab или код подключения, принятый токен Klei.
  3. Проверьте переключатель публичности. sv_lan, -public, Public=, ServerVisibility - как бы он ни назывался в игре.
  4. Запросите query-порт снаружи. Одна команда, она описана в статье query-порты и A2S. Нет ответа - значит, проблема с портом или протоколом.
  5. Проверьте фильтры клиента. Задержка, «не заполнен», «есть игроки», пароль, регион.
  6. Поищите по необычному слову из названия и подождите. Десять минут, а не десять секунд.

Добавляя сервер в избранное в клиенте Steam, указывайте query-порт, если он отличается от игрового. Список Steam общается по A2S с тем портом, который вы ему дали, а игровой порт узнаёт из ответа.

Когда вы не хотите быть в списке#

Список - это то, как вас находят незнакомцы, включая нежелательных: сканеры, ищущие открытый RCON, люди, ищущие серверы без патчей, и изредка тот, кому хочется что-нибудь зафлудить. Приватному серверу для друзей список ничего не даёт.

Выключите переключатель публичности там, где он есть (-public 0 для Valheim, ServerVisibility ниже 2 для 7 Days to Die), поставьте пароль на вход и раздайте адрес или ссылку Steam connect тем, кому он нужен. sv_lan 1 для этого на интернет-сервере не подходит: он отказывает всем игрокам вне локальной сети, а не только незнакомцам. Сервер, которого нет в списке, всё равно доступен любому, кто знает адрес или просканировал его, так что это снижение шума, а не граница безопасности - в статье что мы делаем с атаками объяснено, почему query-порт в любом случае самое заметное, что вы выставляете наружу.

На RE:NODE query-порт входит в выделенные по тарифу порты, показан рядом с игровым портом на странице сервера и добавляется на вкладке Network, когда игре нужен ещё один. Серверы Valheim стартуют с обоими выделенными UDP-портами; для других игр перед выбором посмотрите количество портов на странице тарифа.

FAQ#

Почему друзья заходят по IP, но никто не может найти сервер?

Подключение по IP использует игровой порт; список использует регистрацию плюс query-порт. Если прямое подключение работает, с сервером и его игровым портом всё в порядке, а причина в одном из следующего: выключен переключатель публичности, нет токена входа или он отклонён, закрыт query-порт, или сервер скрывают фильтры игрока.

Сколько времени нужно новому серверу, чтобы появиться в списке?

Для большинства игр Steam - минута-две после того, как сервер закончил запуск. Некоторые списки гораздо медленнее - для списка сообщества Valheim обычны десять минут, - а сервер, который постоянно перезапускается, может выпасть раньше, чем его подхватят.

Убирает ли пароль сервер из списка?

Нет. Серверы с паролем показываются в списке со значком замка, но многие списки по умолчанию скрывают их фильтром «без пароля». Игрокам нужно снять эту галочку или подключиться напрямую либо через избранное.

Можно ли поднять сервер выше в списке?

Честным способом - нет. Большинство списков сортирует по пингу, поэтому сервер оказывается выше у тех игроков, которые к нему близко. Узнаваемое название, точные теги и настоящее число игроков помогают найти сервер больше, чем что-либо ещё.

Почему мой сервер показывает 0 игроков, когда на нём есть люди?

Число игроков берётся из ответа на запрос. Если query-порт отвечает, но игра медленно сообщает об игроках или мод меняет способ их подсчёта, список может отставать. Если там всегда ноль, проверьте, что запрос попадает именно на этот сервер, а не на другой с тем же адресом.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000