RE:NODE

Сервер Valheim не виден в списке сообществ: что делать

Автор Команда RE:NODE
13 мин чтения


Сервер Valheim, который работает, но не появляется в списке сообществ, почти никогда не сломан. В порядке вероятности: список просто ещё не обновился (после запуска подождите десять-пятнадцать минут), сервер запущен с -public 0, query-порт - игровой порт плюс один, по умолчанию 2457 - недоступен по UDP, либо вы ищете сервер в списке из тысяч записей с фильтром, под который попадает половина из них. Прежде чем что-то менять, попробуйте зайти по IP. Если получилось, с сервером всё в порядке, не хватает только записи в списке. Это важно для тех, кто хочет, чтобы вас нашли незнакомые игроки, и совсем не важно для компании друзей, которые и так знают адрес.

Этот материал именно про листинг: как сервер Valheim попадает в список сообществ, что его туда не пускает и как доказать, на каком шаге всё ломается. Если к серверу не удаётся подключиться вообще никак, у вас проблема с подключением, а не с листингом, и лучше начать со статьи ошибки подключения Valheim.

Проверьте сервер, прежде чем проверять список#

Список сообществ и сам сервер - две разные вещи. Сервер принимает игроков на игровом порту. Список - это каталог, который ведёт кто-то другой: мастер-сервер Steam или PlayFab для кроссплей-серверов. Ваш сервер регистрируется в нём, а игры игроков потом запрашивают этот каталог. Сервер может быть абсолютно здоров и при этом отсутствовать в каталоге, а иногда в каталоге висит сервер, который уже остановлен.

Поэтому сначала разделите эти два вопроса:

  1. Откройте Valheim в Steam-версии, выберите Join Game, затем Add Server.
  2. Введите адрес и игровой порт, например 203.0.113.10:2456.
  3. Подключитесь и введите пароль.

Если появилось окно ввода пароля, сервер запущен, игровой порт открыт, а версия совпадает. Значит, проблема только в листинге. Если до запроса пароля вы не дошли, дальше можно не читать: сначала почините подключение - никакие эксперименты с -public не сделают недоступный сервер видимым.

На кроссплей-сервере аналогичная проверка - шестизначный код присоединения. Он выводится в лог при каждом запуске строкой такого вида:

code
Session "Longship Crew" with join code 483920 and IP 203.0.113.10:2456 is active with 0 player(s)

Эта строка полезна и сама по себе: она означает, что сервер закончил запуск и зарегистрировал сессию. Если её нет, сервер ещё загружается или упал, а упавший при запуске сервер не будет в списке нигде. Этот случай разобран в статье сервер Valheim падает при запуске.

Как сервер Valheim попадает в список#

На сервере только для Steam (без -crossplay) всё работает по классической схеме Steam:

  • Сервер запускается и анонимно входит в Steam как игровой сервер.
  • Если задан -public 1, он сообщает мастер-серверу Steam, что существует, и передаёт название, карту, число игроков, версию и порты.
  • Игры игроков запрашивают у мастер-сервера список серверов Valheim, получают адреса, а затем опрашивают каждый сервер напрямую на его query-порту, чтобы заполнить подробности.

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

При -crossplay листинг идёт через сервис Microsoft PlayFab. Сервер регистрирует сессию в PlayFab, а список сообществ во всех версиях игры - Steam, Microsoft Store, Xbox - читает данные оттуда. Query-порт здесь важен меньше, а задержка до появления нового сервера отличается от Steam. Как устроена релейная часть кроссплея, описано в статье кроссплей Valheim и игроки на Xbox. Для листинга достаточно знать одно: кроссплей-сервер и сервер только для Steam попадают в список через две разные системы, поэтому совет для одного не всегда подходит другому.

-public 1-crossplayзапрос списказапрос списказапрос на 2457Игра игрокавкладка CommunityСервер ValheimUDP 2456-2457Мастер-сервер Steamсерверы только SteamPlayFabкроссплей-серверы
Откуда список сообществ берёт записи

Флаг -public и настройки, скрывающие сервер#

Первым делом проверьте строку запуска или вкладку Startup в панели хостинга. Именно эти аргументы определяют, попадёт ли сервер в список:

АргументВлияние на список
-public 1Регистрирует сервер, чтобы он мог появиться в списке сообществ
-public 0В списке не появится никогда. Зайти можно только по IP или коду присоединения
-crossplayЛистинг переходит с мастер-сервера Steam на PlayFab
-port 2456Меняет игровой порт; query-порт всегда на единицу больше
-name "..."Текст, по которому вас ищут. Не должен содержать пароль

Типичная строка запуска на Linux для сервера, который виден в списке:

bash
$ ./valheim_server.x86_64 -nographics -batchmode \    -name "Longship Crew" -port 2456 -world "Midgard" \    -password "herring-barrel-42" -public 1

На чём спотыкаются чаще всего:

  • Значение, а не только флаг. У -public есть числовой аргумент. Если в скрипте, отредактированном вручную, после -public ничего нет или остался 0, скопированный из чужого примера приватного сервера, сервер в список не попадёт.
  • Отредактировали не тот скрипт. На Linux стандартные файлы - start_server.sh и, при модах, start_server_bepinex.sh. На Windows это start_headless_server.bat. Правка того, который вы не запускаете, ничего не меняет. Если установлен BepInEx, рабочим является скрипт BepInEx.
  • Переменная панели перекрывает вашу правку. На хостинге строка запуска собирается из вкладки Startup. Правка скрипта в файловом менеджере её не меняет.
  • Приватность задумана намеренно. Многие группы сознательно ставят -public 0, чтобы не светиться в списке, полном незнакомцев, подбирающих пароли. Это разумное решение, главное - не забыть, что вы его приняли.

Полный набор аргументов со значениями по умолчанию и правило о пароле, из-за которого сервер вообще не запускается, есть в справочнике аргументов запуска Valheim.

Задержка мастер-сервера#

Сервер в листинге Steam появляется не в момент запуска. В лучшем случае это несколько минут, обычно - десять-пятнадцать. Каждый перезапуск запускает отсчёт заново, поэтому сервер, который падает по кругу или перезапускается каждый час по расписанию, может заметную часть времени оставаться невидимым.

Причины в целом на стороне Steam, а не Valheim: мастер-сервер агрегирует регистрации, клиенты игроков кэшируют список, а встроенный браузер серверов запрашивает его при открытии вкладки, а не непрерывно. Механика для разных игр разобрана в статье видимость в браузере серверов и мастер-сервер Steam.

Что это значит на практике для Valheim:

  • Не меняйте настройки каждые две минуты. Каждое изменение - это перезапуск, а каждый перезапуск сбрасывает ожидание. Внесите одно изменение, подождите пятнадцать минут и только потом делайте выводы.
  • Обновите список. Вкладка сообщества не обновляется сама, пока открыта. Закройте Join Game и откройте снова или нажмите кнопку обновления.
  • Проверьте со второго компьютера. Ваш клиент может держать старую копию списка. Свежий взгляд друга - более надёжная проверка.
  • По вечерам медленнее. Листинг Steam сильнее всего нагружен, когда играют все. Сервер, запущенный в пятницу в 20:00, может появиться позже, чем тот же сервер во вторник в 10:00.

Узнать, известен ли Steam ваш сервер, можно и без игры - через публичный веб-API Steam. Ключ не нужен:

bash
$ curl "https://api.steampowered.com/ISteamApps/GetServersAtAddress/v1/?addr=203.0.113.10"

В ответе перечислены все серверы, которые Steam зарегистрировал по этому IP, с их портами и app ID. Если ваш сервер в ответе, регистрация прошла, и остаётся проблема с query-портом или с фильтром в игре. Если ответ пуст и через пятнадцать минут, сервер не регистрируется: проверьте -public 1, убедитесь, что у процесса есть исходящий доступ в интернет, и посмотрите начало лога на ошибки входа в Steam. Эта проверка имеет смысл только для серверов только для Steam; кроссплей-сервер попадает в список через PlayFab и здесь может не отобразиться.

Query-порт и файрволы#

Если Steam о сервере знает, а игра его не показывает, главный подозреваемый - query-порт. Игровой и query-порт идут парой:

-portИгровой портQuery-порт
2456 (по умолчанию)UDP 2456UDP 2457
2466UDP 2466UDP 2467
2476UDP 2476UDP 2477

Открыты должны быть оба, и оба - UDP. Типичные ошибки:

  • Правило для TCP. На страницах проброса портов в роутерах по умолчанию часто стоит TCP. Valheim его не использует.
  • Только игровой порт. Вход по IP работает, поэтому проброс выглядит правильным, но подробности сервера в списке так и не появляются.
  • Сменили игровой порт, а query-порт нет. Для второго сервера на -port 2466 нужно пробросить 2466 и 2467, а не 2457.
  • Файрвол на самой машине. На вашем Linux-сервере правила ufw или nftables должны разрешать оба порта. На Windows при первом запуске нужно принять запрос файрвола для того типа сети, в котором вы действительно находитесь.

Сервер можно опросить снаружи так же, как это делает игровой клиент. С помощью Python и пакета python-a2s:

python
# pip install python-a2simport a2sinfo = a2s.info(("203.0.113.10", 2457), timeout=5)print(info.server_name, info.player_count, info.max_players)

Ответ означает, что query-порт работает оттуда, где вы запускали проверку. Тайм-аут снаружи вашей сети при том, что изнутри запрос проходит, говорит о неверном пробросе или файрволе. Запускайте проверку с машины, которая не находится в сети сервера - достаточно точки доступа на телефоне, - потому что запрос из той же локальной сети ничего не доказывает про проброс. Подробнее о диапазоне портов, в том числе о нескольких серверах на одном адресе, рассказано в статье порты Valheim 2456-2458.

Хостинг дома за CGNAT

Если сервер работает на домашнем подключении, проверьте, есть ли у вас вообще публичный адрес IPv4. Сравните WAN-адрес в роутере с тем, что показывает сайт «какой у меня IP». Если они различаются или адрес роутера начинается с 100.64 - 100.127, вы за CGNAT (NAT уровня провайдера). Проброс портов там не работает, запрос до вас не доходит, и в списке Steam сервер не появится, что бы вы ни меняли. Один из обходных путей - кроссплей с кодами присоединения, ведь трафик ретранслирует PlayFab; другой - арендованный сервер. Как это определить и какие есть варианты, описано в статье NAT и CGNAT для хостинга игровых серверов.

Как правильно искать в списке сообществ#

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

  • Ищите по необычному слову. «Viking», «Valhalla» и «Midgard» совпадают с сотнями серверов. «Herringbone» совпадёт только с вашим.
  • Смотрите вкладку Community, а не Friends и не Favourites. Это отдельные списки.
  • Проверьте свои фильтры. Если в списке видна только часть записей, найдите в браузере настройки фильтров и сбросьте их, прежде чем решать, что сервера нет.
  • Не используйте странные символы в названии. Эмодзи и необычные знаки - лотерея в чужой строке поиска. Ту часть названия, по которой ищут, оставьте из обычных букв и цифр.
  • Название - это не мир. -name - то, что показывает список; -world - файл сохранения. Люди ищут по названию мира и ничего не находят.

Список показывает и то, нужен ли серверу пароль. Почти у каждого выделенного сервера Valheim он есть, так что для сужения поиска это не помогает; зато по одному списку нельзя понять, какой из закрытых серверов - ваш.

Несовпадение версий

Сервер, отставший от клиентов на один патч, может оставаться в списке, но никто на актуальной версии зайти не сможет, и на практике его игнорируют или считают сломанным. После каждого патча Valheim сервер нужно обновить, иначе подключиться не получится. Если сервер пропал в тот же день, когда вышло обновление игры, сначала проверьте версию: как обновлять и как выбрать время для группы, объясняет статья обновления Valheim и несовпадение версий.

Вход в обход списка#

Для закрытой компании список в лучшем случае удобство. Четыре способа зайти, не зависящие от него:

  1. Add Server по адресу. Join Game, Add Server, 203.0.113.10:2456. Адрес сохраняется в избранном игры, так что вводить его нужно один раз.
  2. Код присоединения на кроссплей-серверах. Работает на всех платформах, в том числе на Xbox, где ввести IP нельзя. Меняется при каждом перезапуске, поэтому передавайте свежий или подскажите, где его искать.
  3. Доменное имя. A-запись вроде valheim.example.com, указывающая на IP сервера, позволяет сохранить адрес при переезде. Саму запись описывает статья как привязать домен к игровому серверу; порт игроки по-прежнему вводят сами.
  4. Собственный браузер серверов Steam. В клиенте Steam откройте View, затем Game Servers, затем Favourites и добавьте адрес. Steam опрашивает сервер на его query-порту, так что это ещё и быстрый способ проверить, отвечает ли query-порт.

Общая механика прямого подключения в играх Steam описана в статье ссылки Steam connect и прямое подключение.

На хостинг-панели#

На RE:NODE сервер Valheim создаётся с уже выделенными обоими UDP-портами и включённым кроссплеем, поэтому листинг идёт через PlayFab, а код присоединения выводится в живой консоли после каждого запуска. -public и название сервера - поля на вкладке Startup: поменяйте их там, перезапустите и подождите пятнадцать минут, прежде чем делать выводы. Вкладка Network показывает, какие порты занимает сервер, так что можно убедиться, что query-порт равен игровому плюс один, а не гадать. Если вам нужен сервер только для Steam, который попадает в список через мастер-сервер Steam, отключите кроссплей на вкладке Startup - компромиссы описаны в статье о кроссплее по ссылке выше.

Чего хостинг сделать не может, так это ускорить список. Задержка принадлежит Steam или PlayFab и везде одинакова.

Чек-лист диагностики#

Проходите пункты по порядку. Каждый отсекает целый класс причин.

  1. Зайдите по IP или коду присоединения. Получилось - проблема только в листинге. Не получилось - проблема подключения, см. статью об ошибках подключения.
  2. Прочитайте лог. Есть ли строка сессии с кодом присоединения или вход игрового сервера в Steam? Если запуск сервера не завершился, в список он попасть не может.
  3. Проверьте `-public 1` в той команде, которая действительно выполняется.
  4. Подождите пятнадцать минут без перезапусков, затем снова откройте Join Game.
  5. Спросите Steam. GetServersAtAddress с вашим IP, для сервера только для Steam.
  6. Опросите сервер на query-порту снаружи вашей сети.
  7. Поищите уникальное слово из названия на вкладке Community со второго компьютера.
  8. Сравните версии, если проблема началась в день патча.

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

FAQ#

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

Обычно несколько минут, чаще десять-пятнадцать, иногда дольше в загруженные часы. Каждый перезапуск начинает ожидание заново. Если через двадцать минут без перезапусков сервера всё ещё нет, что-то не так, и чек-лист выше поможет это найти.

Можно ли играть на сервере Valheim, которого нет в списке?

Да. Сервер с -public 0 или тот, который список ещё не подхватил, полностью пригоден для игры. Игроки Steam заходят по адресу через Add Server, а на кроссплей-сервере все могут использовать код присоединения.

Нужно ли открывать query-порт, если мы заходим только по IP?

Строго говоря, нет: вход по IP использует игровой порт. Но список, браузер серверов Steam и большинство инструментов мониторинга используют query-порт, поэтому оставьте его открытым, если нет причин поступить иначе.

Почему я вижу свой сервер в списке, а друг - нет?

Ваш клиент может показывать кэшированный список, либо поиск или фильтры у друга другие. Пусть он снова откроет Join Game, поищет уникальное слово из названия, а если сервер так и не появится, зайдёт по адресу и сохранит его.

Нужно ли закрытой группе делать сервер публичным?

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