Порты игровых серверов
Внешние порты (host-порты) серверам выдаёт панель. Вручную их не распределяют: в описании игры вы указываете, какие порты слушает сервер внутри контейнера, а при создании сервера панель выбирает свободные внешние порты на ноде и запоминает их за этим сервером. После удаления сервера порты освобождаются.
Все занятые порты видны в панели на странице Порты.
Несколько портов у одной игры
Многим серверам нужно больше одного порта: игровой порт, query, RCON, веб-интерфейс, голосовой чат. Добавьте каждый порт отдельной строкой в разделе Игры → игра → Порты («+ Добавить порт»):
- Порт в контейнере — порт, который слушает сервер внутри контейнера, как в его конфиге.
- Протокол — TCP или UDP. Если порт нужен по обоим протоколам, добавьте две строки с одинаковым номером. Например, у CS 2 это
27015/udpи27015/tcp. - Смещение — держит связанные порты рядом (см. ниже).
Пример для игры с игровым портом, query и RCON:
Порт в контейнере Протокол Смещение 28015 UDP 0 28016 TCP 1 28017 TCP 2
Смещение
- Все смещения 0 (или пусто) — каждый порт выдаётся отдельно: берётся наименьший свободный в диапазоне. Номера могут оказаться не рядом, например 20000 и 20007.
- Хотя бы одно смещение не 0 — порты выдаются группой: панель ищет базовый номер, при котором свободны все порты «база + смещение», и вся группа помещается в один диапазон. Для примера выше сервер получит, например, 20010/udp, 20011/tcp и 20012/tcp.
Ставьте смещения, если игрокам или админам привычна схема «RCON = игровой порт + 1» или если игра сама вычисляет дополнительные порты от основного.
Откуда берутся номера
Порт выбирается из диапазона. Действует первый подходящий вариант:
- Диапазоны тарифа — Тарифы → тариф → Порты и IP. Если их несколько, они перебираются по порядку. Группа портов со смещениями никогда не делится между двумя диапазонами.
- Исключение для ноды или локации — Порты → Диапазоны.
- Диапазон по умолчанию — там же. Изначально это 20000–30000.
Если у тарифа включены Стандартные порты, панель сначала пробует собственные номера игры (27015, 25565, 7777…). Если они заняты, порты выдаются из диапазона. Стандартные порты лежат вне диапазона, поэтому их нужно отдельно открыть в файрволе ноды.
Если у ноды несколько IP (Ноды → нода → Адреса), порты считаются для каждого IP отдельно. Так два CS-сервера на разных IP одной ноды могут оба получить 27015. Когда на адресе по умолчанию свободных портов не остаётся, сервер ставится на следующий адрес ноды.
Смена диапазона действует только на новые серверы, у созданных порты не меняются.
Файрвол
На ноде должны быть открыты весь диапазон портов (TCP и UDP, если игры используют оба протокола) и стандартные порты, если они включены в тарифах. Пример для ufw:
ufw allow 20000:30000/tcp ufw allow 20000:30000/udp
Игра должна знать свой внешний порт
Сервер внутри контейнера всегда слушает порт в контейнере, а Docker перенаправляет на него выданный внешний порт. Для большинства игр (CS 1.6, CS 2, SA-MP, Minecraft) этого достаточно: игроки подключаются на адрес:внешний порт, и всё работает.
Некоторые серверы сами сообщают свой порт мастер-серверу или клиенту: Steam query, Rust (app-порт), ARK, Valheim и другие. В списке серверов у них может оказаться внутренний номер вместо внешнего, и тогда сервер не находится или к нему не подключиться. Варианты:
- включите в тарифе Стандартные порты, чтобы внешний порт совпадал с внутренним, и держите такие серверы по одному на IP;
- или выделите таким играм отдельные IP ноды.
Типовые проблемы
«no free port in range» при создании сервера — в диапазоне не осталось свободных портов (или подряд идущих, если у игры есть смещения). Расширьте диапазон, добавьте ноде IP или удалите лишние серверы.
«port already allocated on this node» — явно указанный при создании порт уже занят другим сервером. Выберите другой или не указывайте порт, тогда панель подберёт его сама.
Сервер запущен, но к нему не подключиться — проверьте файрвол ноды и провайдера (security groups облака): диапазон должен быть открыт для нужного протокола. Какие порты получил сервер, видно на его странице и на странице Порты.
См. также Подключение ноды, FastDL и Типовые проблемы.