MAATRIX GAMES / Блог / Team Fortress 2: сервер не отображается в браузере серверов

Team Fortress 2: сервер не отображается в браузере серверов

MAATRIX GAMES

Сервер поднят, в консоли никаких ошибок, srcds_run тихо крутится — а в браузере серверов Steam его нет. Ни по названию не находится, ни по IP через фильтр «История». Это одна из самых частых жалоб на TF2-серверах, и в 90% случаев причина не в поломке, а в одной из пяти конкретных вещей: параметрах запуска, firewall, sv_lan, задержке индексации или фильтрах самого браузера. Пройдёмся по порядку — от самого частого к самому редкому.

Как вообще сервер попадает в список

TF2-сервер регистрируется на мастер-сервере Steam автоматически при старте — никакого отдельного шага для этого делать не нужно, и, в отличие от некоторых современных игр на Source (например, CS2 с обязательным sv_setsteamaccount и GSLT-токеном), для базовой видимости TF2-серверу не требуется токен авторизации Steam Game Server. Достаточно, чтобы сервер стартовал в режиме интернет-сервера (sv_lan 0) и порт был доступен снаружи.

Дальше клиент Steam запрашивает у мастер-сервера список адресов, а потом опрашивает каждый сервер напрямую по протоколу A2S (тот же, что используют сторонние трекеры и консольные запросы) — уточняет hostname, карту, число игроков, пинг. Если на этом втором шаге сервер не отвечает клиенту напрямую (например, порт закрыт именно для входящих запросов игроков, хотя мастер-серверу отчитался), в списке может появиться «призрак» с нулевым пингом или сервер вообще пропадёт из выдачи после первой неудачной попытки опроса.

Отсюда и вытекают все типичные причины невидимости: либо сервер не смог достучаться до мастер-сервера при регистрации, либо клиенты не могут достучаться до сервера при опросе, либо всё технически работает, но браузер отфильтровал сервер по критериям поиска.

Параметры запуска: где чаще всего ошибаются

Разберём типичную строку запуска и на что в ней стоит смотреть:

./srcds_run -game tf -console -port 27015 +ip 0.0.0.0 +map cp_dustbowl +maxplayers 24 +exec server.cfg

+ip — частая ловушка на VPS с несколькими сетевыми интерфейсами (например, есть публичный IP и внутренний VPN/докер-интерфейс). Если явно не указать +ip 0.0.0.0 или конкретный публичный адрес, сервер иногда биндится не на тот интерфейс, слушает локальный или VPN-адрес — и снаружи недоступен, хотя в консоли всё выглядит штатно. Проверить, на каком адресе реально слушает сервер:

ss -tulnp | grep srcds

Если в выводе виден адрес вида 10.x.x.x или 172.x.x.x вместо публичного IP или 0.0.0.0 — это оно.

-port — если на одной машине уже крутится другой сервер на 27015 (в том числе другая игра на Source), второй процесс srcds_run либо не забиндится вовсе, либо тихо съедет на следующий свободный порт, о чём легко не заметить в потоке консольного вывода. Сверяй порт из команды запуска с тем, что реально слушается:

ps aux | grep srcds_run
ss -tulnp | grep 27015

hostname — задаётся в server.cfg (hostname "Название"), но если в названии есть непарные кавычки, обратные слэши или управляющие символы, конфиг может отработать некорректно, а иногда и не выполниться полностью после этой строки. Держи название в пределах обычных букв, цифр и пробелов, без экзотики.

sv_region — параметр, который часто забывают вообще. Он не влияет на факт появления сервера в общем списке, но влияет на то, в каком региональном фильтре его увидят по умолчанию — если у тебя стоит регион, не совпадающий с реальным географическим положением сервера (или он вообще не задан и Steam определил его неверно по IP), игроки, ищущие «серверы в моём регионе», просто не долистают до твоего.

Поднять сервер Team Fortress 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Firewall и порты: обязательный чек-лист

Дефолтный игровой порт TF2 — 27015 (UDP и TCP), для SourceTV дополнительно 27020/UDP. Если сервер стоит на VPS с белым IP — «проброс» сводится к открытию портов в firewall самой машины:

sudo ufw allow 27015/tcp
sudo ufw allow 27015/udp
sudo ufw allow 27020/udp
sudo ufw reload
sudo ufw status

Если сервер физически дома за роутером — открыть порт нужно ещё и в его админке (Port Forwarding / Виртуальные серверы), иначе локальный firewall хоть настежь открывай, снаружи пакеты просто не дойдут до машины. Провайдеры с CGNAT (нет реального белого IP на роутере) — отдельная больная тема: без статического публичного IP от провайдера проброс не сработает в принципе, сколько ни настраивай сам роутер. Общая логика портов и firewall для игровых серверов разобрана в отдельной статье: настройка портов и файрвола для игрового сервера.

Проверить, что порт реально слушается на сервере:

ss -tulnp | grep 27015

А что он доступен снаружи — с другого устройства, не из той же сети, где стоит сервер (иначе легко словить ложноположительный результат через hairpin NAT). Любой внешний TCP/UDP-чекер портов подойдёт, но учти: UDP-проверка менее надёжна, чем TCP — по протоколу нет гарантированного ответа «порт закрыт», иногда чекер просто пишет «нет ответа», хотя сама причина в другом. Если есть сомнения именно в проброшенности порта — там же разобран более подробный процесс диагностики: порт не проброшен: как проверить и исправить.

sv_lan и другие конфигурационные ловушки

Один параметр способен свести на нет всю настройку портов. sv_lan определяет режим объявления сервера в сети:

  • sv_lan 0 — интернет-сервер, регистрируется в общем списке (значение по умолчанию, но лучше прописать явно).
  • sv_lan 1 — только локальная сеть, снаружи сервер вообще не пытается зарегистрироваться, даже если все порты открыты.

Проверить текущее значение прямо в консоли сервера:

sv_lan

Если стоит 1 — меняем и, если параметр где-то захардкожен в строке запуска (+sv_lan 1), важно поправить именно там: параметр командной строки при старте перекрывает значение из server.cfg, применённое позже через +exec.

Ещё пара вещей, которые редко ломают видимость сами по себе, но часто маскируются под «сервер не виден», хотя на деле он виден, просто не тот, что ты ищешь:

sv_visiblemaxplayers -1
sv_password ""

Непустой sv_password не убирает сервер из списка (пароль виден иконкой замка), но если ты ищешь его глазами и не замечаешь замок — кажется, будто сервера нет вообще.

Задержка индексации: сколько реально ждать

После первого успешного старта регистрация в общем списке обычно занимает от нескольких десятков секунд до пары минут — это нормально, и раньше этого времени паниковать не стоит. Дольше индексация может тянуться в паре ситуаций:

  • Свежий рестарт после смены IP — если сервер переезжал или у VPS сменился адрес, старая запись в кеше клиента Steam может держаться некоторое время, а на новую индексацию тоже нужно время.
  • Локальный кеш списка серверов в самом клиенте Steam — браузер серверов кеширует результаты, и обновление списка (кнопка Refresh в интерфейсе) иногда нужно нажать вручную, а не полагаться на автообновление.
  • Нестабильное соединение сервера с интернетом на момент регистрации — если в первые секунды после старта была потеря пакетов до мастер-сервера, регистрация может не пройти с первой попытки; полный рестарт srcds_run обычно решает.

Если сервера всё ещё нет в списке дольше 5-10 минут после чистого старта — это уже не про индексацию, а про один из пунктов выше (порт, sv_lan, биндинг на +ip). Хороший способ отличить «ещё не проиндексировался» от «сломано» — проверить сервер напрямую по протоколу A2S, не дожидаясь появления в общем списке.

Проверка напрямую, в обход общего списка

Пока разбираешься, не обязательно ждать индексации в общем браузере — можно подключиться напрямую по IP, это работает независимо от регистрации на мастер-сервере:

connect IP:27015

Если подключение проходит — сервер технически жив и доступен, проблема именно в видимости в списке (индексация, региональный фильтр, sv_region), а не в самом сервере. Если подключение не проходит тоже — возвращайся к разделу про firewall и +ip.

Ещё один способ, не требующий запуска игры — запросить статус сервера напрямую по протоколу A2S_INFO с помощью небольшого Python-скрипта на базе библиотеки python-a2s или python-valve:

pip install python-a2s
python3 -c "
import a2s
addr = ('IP_СЕРВЕРА', 27015)
print(a2s.info(addr))
"

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

Фильтры браузера серверов: сервер есть, но ты его не видишь

Отдельная категория проблем — когда сервер технически всё сделал правильно, а игрок просто не видит его из-за настроек самого браузера серверов в Steam:

  • Не та вкладка. В браузере серверов TF2 несколько вкладок — «Интернет», «Избранное», «История», «Друзья». Новый сервер по умолчанию ищется во вкладке «Интернет»; «История» покажет его только после первого подключения.
  • Активные фильтры. Скрытие полных серверов, серверов с паролем, серверов с ботами, фильтр по карте или по региону — любой из них может молча исключить сервер из выдачи. Стоит явно сбросить фильтры (обычно кнопка «Сбросить»/Reset рядом с панелью фильтров) и попробовать поиск заново.
  • Поиск по названию. Поле поиска ищет подстроку в hostname, но чувствительно к формату — если в названии сервера есть цветовые коды или спецсимволы, поиск по «чистому» тексту может не сматчиться. Проще искать по IP через connect или добавлять сервер в избранное напрямую.
  • Устаревший локальный кеш. Список серверов в клиенте Steam иногда просто не обновился — ручное обновление (Refresh) в интерфейсе браузера решает это быстрее, чем ожидание.

Добавить сервер в избранное вручную, не дожидаясь его появления в общем поиске, можно прямо по IP:порт через контекстное меню в браузере серверов или командой connect IP:27015, а потом добавить в избранное уже из игры — это не зависит от индексации в общем списке вообще. Если параллельно разбираешься с похожей проблемой на другой игре на другом движке — логика диагностики почти всегда похожая: FiveM/GTA V сервер не отображается в браузере серверов — параметры запуска, firewall и задержка индексации там разбираются по тому же принципу.

Если TF2-сервер разворачивается заново с нуля и хочется сразу настроить всё правильно, а не чинить постфактум — есть отдельная пошаговая инструкция по установке: как поднять сервер Team Fortress 2.

Поднять сервер Team Fortress 2 за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Сервер видно в connect по IP, но не в общем браузере серверов — почему?

Значит сервер технически жив и порт открыт для прямых подключений, а проблема в регистрации на мастер-сервере или в фильтрах браузера — проверь sv_lan, подожди 5-10 минут на индексацию, сбрось фильтры и вкладку в интерфейсе Steam.

Обязателен ли токен Steam Game Server (GSLT) для видимости TF2-сервера в списке?

Нет, в отличие от некоторых современных игр на движке Source (например, CS2), базовая регистрация TF2-сервера в браузере серверов не требует привязки токена — достаточно sv_lan 0 и открытого порта.

Сколько реально ждать, пока сервер появится в списке после старта?

Обычно от нескольких десятков секунд до пары минут. Если прошло больше 5-10 минут — вероятность, что дело именно в задержке индексации, а не в конфигурации, уже небольшая, стоит проверять порты и sv_lan.

Может ли неправильный -port в строке запуска быть причиной невидимости, если сервер вообще стартует?

Да — если порт занят другим процессом, srcds_run иногда съезжает на следующий свободный порт без явной фатальной ошибки в консоли. Сверяй реально прослушиваемый порт через ss -tulnp, а не только то, что написано в скрипте запуска.

Помогает ли просто перезапустить сервер, если он «завис» в невидимом состоянии?

Часто да, особенно если проблема была в неудачной попытке регистрации на мастер-сервере при старте (например, из-за кратковременной сетевой нестабильности) — чистый рестарт srcds_run заново инициирует регистрацию.