Terraria: не подключается через TShock
Поднял сервер на TShock, позвал друзей — а вместо привычного экрана загрузки мира у кого-то зависание с таймаутом, у кого-то сухое «Blocked IP», у кого-то намёк на то, что версии не совпадают. Причины обрыва подключения именно на TShock-сборке отличаются от обычного ванильного дедика: тут в игру вступают версии API, бан-лист самого TShock и его античит. Разберём по порядку, от самой частой причины до редких случаев.
Содержание
- Чем TShock отличается от обычного terraria-server — и почему это важно для диагностики
- Причина №1: версия TShock не совпадает с версией клиента Terraria
- Причина №2: сервер слушает не тот порт, или порт уже занят
- Причина №3: «Blocked IP» — бан или срабатывание античита
- Как локализовать причину через консоль и логи
- Firewall и проброс порта для TShock
Чем TShock отличается от обычного terraria-server — и почему это важно для диагностики
TShock — это не официальный дедик, а сторонний серверный софт с открытым кодом (проект Pryaxis/TShock), который оборачивает движок Terraria и добавляет то, чего нет в ванильном TerrariaServer.bin: систему прав и групп, плагины на C#, античит-модуль Bouncer, консольные и REST-команды для админки. Игрок при этом заходит обычным клиентом Terraria из Steam — никакой отдельной модификации клиента не требуется, в отличие от того же tModLoader, где без специального лаунчера на сервер вообще не попасть (если ставил моды раньше, разница описана в статье про установку модов через tModLoader).
Ключевая деталь для диагностики: TShock — отдельный проект со своим циклом релизов, привязанный к конкретной версии Terraria. Когда выходит патч игры в Steam, TShock не обновляется мгновенно — команде нужно время, чтобы пересобрать сервер под новый протокол. Отсюда львиная доля обращений «вчера всё работало, сегодня никто не заходит»: клиент обновился автоматически, а сборка TShock на сервере — ещё нет.
Современные версии TShock работают на кроссплатформенном .NET-рантайме и запускаются примерно так:
cd /opt/tshock
dotnet TShock.Server.dll
Если ты только поднимаешь сервер с нуля и ещё не решил, ванильный дедик или TShock тебе нужен — базовый процесс установки и первого запуска (архив с terraria.org, создание мира, serverconfig.txt) описан в статье как поднять сервер Terraria. TShock ставится поверх той же логики, но качается отдельно с GitHub, а не с официального сайта игры.
Причина №1: версия TShock не совпадает с версией клиента Terraria
Это самая частая причина «не подключается» на TShock именно потому, что она внешне выглядит загадочно: сервер вроде бы запущен, порт открыт, а клиент либо сразу вылетает с сообщением о несовместимой версии, либо зависает на этапе подключения. Terraria меняет сетевой протокол почти при каждом крупном патче, и если версия клиента (обновляется в Steam автоматически) обгоняет версию TShock на сервере — рукопожатие просто не проходит.
Как проверить:
- Смотри лог в консоли сразу при старте сервера — TShock печатает свою версию и версию Terraria API, под которую собран билд.
- Сверь эту версию с версией своего клиента (Terraria → в главном меню внизу экрана указан номер версии игры).
- Если версии не совпадают — иди на страницу релизов проекта на GitHub (Pryaxis/TShock) и ищи билд под конкретную версию Terraria, которая у тебя установлена. Конкретные номера сборок меняются с каждым патчем игры, поэтому смотри актуальный список на момент установки, а не старые гайды с зафиксированными цифрами.
Если TShock ещё не успели обновить под свежий патч Terraria (бывает в первые дни-недели после крупного обновления игры), у тебя два варианта: подождать релиза совместимой сборки, либо временно закрепить клиент на предыдущей версии через SteamCMD (у Terraria в Steam есть механизм отката билдов через бета-ветки, точные названия веток смотри в свойствах игры в библиотеке Steam). Второй путь неудобен, если играешь не один — придётся откатывать версию всем, кто заходит на сервер.
Поднять сервер Terraria за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверПричина №2: сервер слушает не тот порт, или порт уже занят
TShock, как и ванильный дедик, по умолчанию слушает TCP-порт 7777. Но есть нюанс, который путает именно на TShock: порт может быть задан в нескольких местах одновременно — флагом -port при запуске, в serverconfig.txt (если используешь общий с ванилью формат конфига) и в собственном tshock/config.json сервера, где тоже есть параметр порта. Если правил в разных местах разное значение, побеждает конфиг, который TShock читает последним при старте — и итоговый порт может оказаться не тем, что ты ожидаешь.
Проверить, на каком порту реально висит процесс:
ss -tlnp | grep dotnet
Если строки с нужным портом нет — либо сервер ещё не поднялся, либо слушает другой порт (проверь tshock/config.json, ключ отвечает за порт сервера). Если пытаешься поднять на одной машине одновременно TShock и обычный тестовый дедик — они не могут слушать один и тот же порт: второй процесс либо не запустится с ошибкой занятого адреса, либо (реже) молча откажется биндиться, и в логе будет видно исключение при старте сети.
Для игроков важно, чтобы в клиенте при «Join via IP» был указан именно тот порт, на котором реально слушает TShock — если он нестандартный, адрес пишется через двоеточие: IP:ПОРТ. Подробный разбор настройки портов и файрвола под игровые серверы в целом — в статье про порты и файрвол на игровом сервере.
Причина №3: «Blocked IP» — бан или срабатывание античита
Сообщение про заблокированный IP на TShock почти всегда означает одно из двух: игрока действительно забанили (по никнейму или напрямую по адресу), либо встроенный античит-модуль Bouncer принял его подключение за подозрительную активность и отрезал доступ ещё до входа в мир.
Бан-лист TShock хранится в tshock/bans.json (либо в базе, если сервер настроен на SQLite/MySQL вместо файлового хранилища). Точный синтаксис команд бана слегка отличается между версиями TShock — ориентируйся на встроенную справку /help ban в консоли своей сборки, но в большинстве актуальных версий рабочий набор такой:
/ban list
/ban addip 123.45.67.89 причина
/ban del ИмяИгрока
Если игрока забанили по IP, а не по нику (например, автоматически после серии нарушений или ложного срабатывания античита), обычного разбана по имени может быть недостаточно — проверяй именно список IP-банов и, если нужно, чисти запись напрямую в bans.json (с остановленным сервером, чтобы изменения не перезаписались).
Отдельный частый сценарий именно с «Blocked IP» — ложное срабатывание Bouncer сразу после обновления Terraria или TShock, когда протокол пакетов чуть изменился, а античит ещё не адаптирован под новую версию и принимает легитимный трафик за читерский. Если баны у игрока не было, а «Blocked IP» появилось резко и массово у нескольких человек сразу после апдейта — это повод проверить changelog свежего релиза TShock на предмет известных проблем с Bouncer, а не искать причину в настройках конкретного игрока.
Как локализовать причину через консоль и логи
Прежде чем чинить наугад, разложи симптом на составляющие — логи TShock лежат в tshock/logs/ и обычно достаточно информативны:
tail -n 100 tshock/logs/log_*.txt
Ищи в логе:
- строки про исключения при старте сети (
SocketException,AddressInUse) — значит, дело в порте, смотри причину №2; - записи о попытке подключения с версией протокола, отличной от ожидаемой, — это причина №1;
- строки с
BanилиBouncerрядом со временем подключения проблемного игрока — причина №3.
Отдельно стоит исключить банальность: убедись, что игрок заходит именно обычным клиентом Terraria из Steam, а не через tModLoader или другой модифицированный лаунчер — TShock их не поддерживает, подключение с них не пройдёт вообще независимо от версий и банов.
Если лог обрывается сразу после запуска без явной ошибки — вероятная причина не в подключении, а в самом старте сервера (битый плагин, конфликт версий плагина с текущей сборкой TShock). Попробуй временно вынести все файлы из папки ServerPlugins кроме обязательных и запустить сервер заново — если после этого проблема с подключением исчезает, дело было в одном из плагинов, возвращай их по одному, чтобы найти виновника.
Firewall и проброс порта для TShock
Если версии совпадают, банов нет, а подключение всё равно висит с таймаутом — стоит вернуться к базовой сетевой проверке, как для любого игрового сервера. TShock слушает TCP, порт по умолчанию 7777 (или тот, что задан в конфиге, см. причину №2).
На Ubuntu/Debian с ufw:
sudo ufw allow 7777/tcp
sudo ufw status
Проверка снаружи, реально ли порт достижим (с другой машины, не из локальной сети сервера):
nc -zv IP_СЕРВЕРА 7777
Connection refused — файрвол пропускает трафик, но на порту либо ничего не слушает (сервер не поднялся или слушает другой порт), либо активен бан по IP на уровне TShock. Timed out — пакет режется раньше, чем доходит до сервера: проверяй файрвол ОС и отдельно облачный firewall хостинга, если провайдер даёт такую панель — правило нужно продублировать в обоих местах.
Поднять сервер Terraria за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Вчера всё работало, сегодня никто не подключается — что изменилось?
Скорее всего Steam тихо обновил клиент Terraria до новой версии, а сборка TShock на сервере ещё не пересобрана под неё. Проверь версии в логе сервера и на странице релизов проекта — это причина №1 в статье.
Можно ли зайти на TShock-сервер через tModLoader?
Нет, это разные экосистемы с разным протоколом — tModLoader-клиент физически не подключится к TShock и наоборот. Для модов через tModLoader нужен отдельный сервер, процесс описан в статье про установку модов на Terraria-сервер.
«Blocked IP» вижу только у одного конкретного игрока — как быстро понять, бан это или ложное срабатывание?
Проверь список IP-банов командой /ban list в консоли. Если записи нет, а сообщение всё равно появляется — смотри логи на предмет срабатывания Bouncer и changelog последнего обновления TShock на известные баги античита.
На ванильном дедике те же друзья заходят нормально, а на TShock — нет. Почему?
Обычно дело в отставании версии TShock от последнего патча Terraria — ванильный TerrariaServer.bin обновляется вместе с игрой мгновенно (тот же архив с сайта), а TShock требует отдельной пересборки командой проекта, которая занимает время.
Порт открыт, nc -zv отвечает успешно, а клиент Terraria всё равно не заходит — в чём дело?
Если порт технически доступен, проблема почти наверняка не сетевая — переходи к проверке версий (причина №1) и бан-листа (причина №3), сеть тут уже ни при чём.