Задайте разные пароли для входа в Palworld и администрирования, а REST оставьте доступным только по выбранному приватному пути. Pocketpair прямо предупреждает: API не предназначен для прямой публикации в интернете. Наличие пароля это ограничение не отменяет.
Инструкция рассчитана на существующий dedicated-сервер на Linux VPS, SSH-доступ к игровому хосту и OpenSSH с curl на компьютере администратора. Используется REST из актуального руководства сервера. На Windows отличается каталог конфигурации; принцип доступа остаётся тем же.
Разделите вход в игру, поиск сервера и управление#
ServerPassword отвечает за вход игроков. AdminPassword выдаёт административные права; его же REST использует как пароль в Basic-аутентификации с именем пользователя admin. Это не пароль SSH, не имя Linux-пользователя и не данные Steam.
Сервер, которого нет в общем списке, всё ещё может принимать подключения по известному адресу. Видимость и контроль доступа — разные настройки. Используйте игровой пароль там, где он нужен, и отдельно решите, кому разрешён игровой порт. Закрытый REST сам по себе не делает весь сервер приватным.
Для небольшой группы удобно зафиксировать три разрешённых пути: игроки к игровому порту, операторы к SSH, приватный мониторинг к REST. Если REST никому не нужен, оставьте его выключенным. Значение в примере контейнера не является причиной включать административный интерфейс.
Меняйте рабочую конфигурацию, сохраняя остальные поля#
Штатно остановите игру и сохраните копию активных настроек. На Linux это Pal/Saved/Config/LinuxServer/PalWorldSettings.ini, на Windows в том же пути используется WindowsServer. Правка DefaultPalWorldSettings.ini не изменяет рабочую конфигурацию.
В существующем значении OptionSettings=(...) задайте разные надёжные ServerPassword и AdminPassword, включите RESTAPIEnabled=True и укажите RESTAPIPort, в примере 8212. Это поля уже существующих настроек, а не отдельные INI-секции. Не заменяйте длинную строку четырьмя полями, потеряв остальные правила мира.
Если контейнер генерирует файл из переменных окружения, изменяйте исходные параметры генератора. Иначе при старте ручная правка исчезнет и вы будете проверять пароль, которого игра не загружала. Названия переменных и их соответствие полям зависят от конкретного образа.
Сначала подготовьте приватный сетевой путь#
Для прямой установки до запуска закройте внешний TCP-доступ к 8212 на уровне провайдера и сетевой политики хоста. SSH-служба на игровом хосте должна иметь возможность обратиться к 127.0.0.1:8212. Не считайте, что RESTAPIPort одновременно задаёт привязку слушателя к loopback.
Для обычной Docker bridge-сети с NAT на актуальном Engine публикуйте REST только на loopback хоста. Нужный элемент в списке ports существующего сервиса Palworld:
- "127.0.0.1:8212:8212/tcp"
Замените им публикацию этого же порта на все интерфейсы; не оставляйте обе записи. Игровой UDP-порт настраивается отдельно. Это фрагмент Compose, а не полное описание сервиса. Он не относится к host networking, Swarm и маршрутизируемым сетям контейнеров. Docker также документирует доступ соседей по сети к localhost-публикациям в версиях Engine до 28.0.0; обновите Engine либо отдельно учтите это ограничение.
Примените сетевое изменение в согласованный перерыв. С внешней машины убедитесь, что публичный REST недоступен, включая публичный IPv6 при его наличии. Проверяйте реальный маршрут вместе с политикой. Успешный локальный HTTP-запрос ничего не говорит о внешней доступности.
Откройте туннель и запросите информацию#
На своём компьютере замените operator@server.example.com на SSH-пользователя и адрес именно игрового хоста. Оставьте терминал работающим:
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:18212:127.0.0.1:8212 operator@server.example.com
Порт 18212 принадлежит вашему компьютеру, а 8212 — удалённому хосту. Адрес назначения loopback рассматривается со стороны SSH-сервера. Если SSH заканчивается на бастионе или в другом контейнере, его loopback не превращается в адрес игрового хоста. Исправьте маршрут вместо публикации REST наружу.
Во втором локальном терминале запросите информацию о сервере:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --silent --show-error --include --basic --user admin http://127.0.0.1:18212/v1/api/info
curl предложит ввести настроенный AdminPassword. Пароль не попадёт в историю вместе с командой. В Windows PowerShell используйте curl.exe, если имя curl занято алиасом. HTTP-запрос проходит интернет внутри SSH и только на хосте достигает обычного HTTP-сервиса игры. Сама Basic-аутентификация не шифрует канал, а Base64 не заменяет туннель.
Ищите ошибку на соответствующем уровне#
| Наблюдение | Следующая проверка |
|---|---|
| SSH не может занять 18212 | Выберите свободный локальный порт и измените адрес curl соответственно. |
| SSH сообщает об ошибке перенаправленного соединения | Проверьте слушатель, рабочую конфигурацию и адрес назначения из сети SSH-хоста. |
| curl получает отказ или тайм-аут | Проверьте, что туннель открыт и направлен на нужный хост и порт. |
| HTTP 401 | Проверьте admin, действующий AdminPassword, перезапуск и генератор настроек. Пароль для игроков другой. |
| HTTP 404 | Проверьте путь /v1/api/info и убедитесь, что отвечает Palworld, а не соседний сервис. |
| HTTP 200 с ожидаемой информацией | Сопоставьте servername, version и worldguid: другой экземпляр тоже способен ответить успешно. |
Не проверяйте авторизацию командами выключения, бана или принудительной остановки. /info достаточно для проверки маршрута без изменения мира. Для будущей автоматизации сохраните тот же приватный путь. Административный пароль остаётся привилегированным, даже если интеграция читает только статус: ограничьте доступ к файлу с ним, скрывайте заголовки в журналах и меняйте пароль после раскрытия. Управление инфраструктурой на собственном VPS можно организовать через Nexardo; приватный доступ к игровому API всё равно требует явной настройки.
Источники#
- Pocketpair: настройки и рабочие пути конфигурации
- Pocketpair: REST-аутентификация и сетевые ограничения
- Pocketpair: информационный endpoint сервера
- Поддерживаемый контейнер Palworld: реализация REST-аутентификации
- OpenSSH: локальное перенаправление, curl: авторизация и параметры запросов, Docker: границы публикации портов




