Project Zomboid не подключается через Steam
Заходишь в Project Zomboid, открываешь вкладку Internet или Favorites в браузере серверов, вбиваешь IP — и либо сервер вообще не виден в списке, либо клиент зависает на "Connecting to server" и через минуту выкидывает с молчаливым таймаутом. При этом сервер в консоли живой, игроки, зашедшие напрямую по IP, всё видят нормально. Это почти всегда не баг сервера, а нестыковка между обычным игровым портом и отдельным Steam-слоем поверх него — сейчас разберём, где там что ломается и как починить по шагам.
Содержание
Почему Steam-подключение — это отдельный механизм
Project Zomboid при старте сервера поднимает два независимых канала. Первый — игровой UDP-порт (по умолчанию 16261), через который идёт весь трафик симуляции: позиции игроков, чанки карты, инвентарь. Второй — это Steam Game Server слой, который использует библиотеку Steamworks для регистрации сервера в мастер-листе Valve и для верификации соединений через VAC. Именно второй слой отвечает за то, чтобы сервер появился в браузере Steam-серверов и чтобы клиент мог подключиться кнопкой "Connect" из этого браузера.
Прямое подключение по IP (Direct Connect в меню Join) в некоторых случаях обходит часть Steam-логики и работает даже при кривой настройке SteamPort — поэтому у тебя может быть рабочий "заход по IP" и одновременно полностью нерабочий "заход через Steam". Это не глюк, а ожидаемое поведение: разные пути используют разные порты и разную аутентификацию.
Три параметра, которые отвечают за Steam-слой
В файле конфигурации сервера (ServerName.ini, обычно в ~/Zomboid/Server/ на Linux или %USERPROFILE%\Zomboid\Server\ на Windows) есть три ключевых параметра:
DefaultPort=16261
SteamVAC=true
SteamPort1=16262
SteamPort2=16261
DefaultPort— основной игровой UDP-порт, на нём висит вся геймплейная синхронизация.SteamVAC— включает верификацию через Valve Anti-Cheat. Если стоитfalse, сервер не будет фигурировать как VAC-secured, а часть клиентов с включённым "показывать только secure-серверы" его просто не увидит.SteamPort1иSteamPort2— два отдельных UDP-порта для Steam Game Server API. Классическая ошибка новичка — оставить их равнымиDefaultPortили друг другу. По факту это должны быть три РАЗНЫХ UDP-порта, иначе Steamworks не может корректно забиндиться и подключение через браузер серверов рассыпается с непонятной ошибкой или просто таймаутом.
Рабочая связка чаще всего выглядит так: DefaultPort=16261, SteamPort1=16262, SteamPort2=16263 (иногда встречается вариант с SteamPort2=16261, он тоже валиден — Valve допускает совпадение SteamPort2 с игровым портом, но SteamPort1 обязан быть отдельным). Проверяй по факту у себя: если после старта сервера в логе Steamworks вылезают предупреждения про "port already in use" или "failed to bind", значит где-то порты пересеклись.
Поднять сервер Project Zomboid за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверПошаговая диагностика
- Останови сервер и проверь конфиг. Открой
ServerName.iniи убедись, чтоDefaultPort,SteamPort1,SteamPort2— три разных значения (или минимумSteamPort1не совпадает ни с одним из двух других).
- Проверь, что порты реально слушаются. На Linux:
ss -ulpn | grep -E '16261|16262|16263'
Должны быть три строки с процессом ProjectZomboid64 (или start-server.sh), слушающим UDP на всех трёх портах. Если какого-то нет — сервер не смог забиндить порт, смотри лог на предмет ошибки.
- Проверь фаервол и проброс на роутере/у хостера. Нужно открыть UDP для всех трёх портов, а не только для игрового:
sudo ufw allow 16261:16262/udp
sudo ufw allow 16261/tcp
TCP на 16261 тоже нужен — часть сервисных запросов (RCON, некоторые статус-пинги) идёт через TCP поверх того же номера порта. Если сервер у облачного провайдера или на VDS с внешним фаерволом (Security Group, панель хостинга) — правило нужно продублировать и там, локальный ufw не поможет, если трафик режется раньше, на уровне сети. Подробный разбор портов и правил для разных игр есть в статье про настройку портов и файрвола.
- Проверь публичный IP и NAT. Если сервер стоит дома за роутером, а не на арендованном VPS, убедись, что проброс портов настроен на внешний IP, а не на локальный (192.168.x.x). Быстрая проверка снаружи:
nc -uzv <твой-внешний-IP> 16262
Команда не гарантирует 100% результат для UDP (протокол без подтверждения соединения), но если она сразу рвётся с "Connection refused" — порт точно не проброшен.
- Проверь SteamVAC и целостность аккаунта сервера. Если
SteamVAC=true, но сервер всё равно не в браузере, попробуй временно поставитьfalse, перезапустить и посмотреть — появился ли сервер. Если да, значит проблема именно в верификации VAC (обычно это тайминг: Valve иногда не успевает провалидировать сервер в первые 1-2 минуты после старта — подожди и обнови список).
Разница между прямым IP и браузером серверов
Стоит явно понимать, что игроков у тебя по факту два независимых пути захода, и они диагностируются по-разному:
| Способ | Что использует | От чего зависит |
|---|---|---|
| Direct Connect по IP:порт | Только DefaultPort, без Steam-слоя | Открыт UDP/TCP DefaultPort, сервер запущен |
| Steam-браузер серверов (Internet/Favorites) | Steamworks API через SteamPort1/2 | Корректные разные SteamPort, открыты все три UDP, публикация в мастер-листе Valve |
| Favorites по вручную добавленному IP | Смешанный: список хранит IP, но при "Connect" всё равно может идти через Steam-слой | Те же условия, что и для браузера |
Если тебе важнее всего, чтобы игроки заходили стабильно, а список в браузере — приятный бонус, можно временно посоветовать друзьям Direct Connect, пока разбираешься со SteamPort. Это не решение проблемы, а способ не терять игровую сессию, пока чинишь конфиг.
Публикация сервера в браузере Steam
Чтобы сервер увидела не только твоя компания, а произвольные игроки через поиск в браузере серверов, нужно:
Public=trueвServerName.ini— иначе сервер не публикуется в общем списке, только в Favorites у тех, кто знает IP вручную.- Указать
PublicNameиPublicDescription— без них сервер отображается пустой строкой, и в списке из сотен серверов его просто не найдут. - Дождаться регистрации в мастер-листе — обычно занимает от 30 секунд до пары минут после старта. Если сервер так и не появился за 5+ минут, это почти всегда SteamPort1/2 конфликт из раздела выше, а не проблема самого списка.
Дополнительно стоит проверить Password — если сервер публичный, но с паролем, он всё равно виден в списке (просто требует пароль при попытке зайти), это не баг.
Поднять сервер Project Zomboid за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Сервер виден в списке, но подключение обрывается на "Connecting to server"?
Обычно это открытый SteamPort, но закрытый DefaultPort — Steam-слой видит сервер и регистрирует его, а реальное игровое соединение не проходит. Проверь UDP на 16261 отдельно от SteamPort1/2.
Помогает ли отключение SteamVAC насовсем?
Как временный диагностический шаг — да, поможет понять, в VAC ли дело. Как постоянное решение — не рекомендуется: часть игроков сознательно фильтрует non-VAC серверы, и ты теряешь охват.
Нужно ли перезапускать сервер после смены портов в конфиге?
Да, обязательно полный рестарт процесса — Project Zomboid не подхватывает изменения ServerName.ini на лету, только при следующем старте.
Можно ли использовать один и тот же порт для нескольких серверов на одной машине?
Нет, каждый экземпляр сервера (и его DefaultPort/SteamPort1/SteamPort2) должен занимать уникальные порты — иначе второй процесс просто не сможет забиндиться и упадёт при старте либо тихо перехватит чужой трафик.
После смены модов через Steam Workshop сервер вдруг перестал быть виден в браузере — это связано?
Обычно нет, это разные механизмы, но если моды тянут дополнительную нагрузку и сервер долго стартует, Steamworks может не успеть зарегистрироваться в мастер-листе до таймаута клиента — просто подожди подольше после рестарта. Подробнее об установке модов — в статье про Steam Workshop для Project Zomboid.