Кроссплатформенный мультиплеер в Valheim позволяет игрокам со Steam (PC), Xbox One, Xbox Series X/S и Microsoft Store играть в одном мире. Для маршрутизации трафика между различными платформами разработчики Iron Gate внедрили интеграцию с бэкендом Microsoft PlayFab Party. Включение кроссплея меняет сетевой стек сервера: вместо прямого сокета Steamworks сервер регистрирует сессию в облачном сервисе и генерирует специальный код подключения (Join Code).
В этой статье рассматриваются механизмы работы кроссплея в Valheim, настройка службы systemd с флагом -crossplay, конфигурация портов брандмауэра и диагностика проблем с PlayFab Join Code.
Как работает кроссплей Valheim: Steam vs PlayFab#
Выделенный сервер Valheim (Steam App ID 896660) по умолчанию использует прямое подключение через Steamworks Networking по протоколу UDP на портах 2456–2457. При прямом подключении клиент отправляет пакеты непосредственно на публичный IP-адрес сервера.
При добавлении аргумента запуска -crossplay сервер активирует сетевой модуль PlayFab:
- Сервер отправляет исходящий HTTPS/UDP запрос к серверам авторизации Microsoft PlayFab.
- Инициализируется туннель PlayFab Party для обхода NAT (NAT punch-through).
- Сервер получает уникальный шестизначный буквенно-цифровой идентификатор — Join Code.
- Игроки с консолей Xbox могут подключаться по Join Code без необходимости указывать публичный IP и настраивать port forwarding на домашнем роутере.
Игроки со Steam по-прежнему могут подключаться по прямому IP-адресу, если порты проброшены корректно.
Настройка флагов запуска и параметра -crossplay#
Для включения кроссплея флаг -crossplay необходимо передать в бинарный файл valheim_server.x86_64. Откройте юнит-файл systemd вашего сервера:
sudo nano /etc/systemd/system/valheim.service
Убедитесь, что в строке ExecStart указаны имя мира, пароль и флаг кроссплея:
[Unit]
Description=Valheim Dedicated Server
After=network.target
[Service]
Type=simple
User=valheim
Group=valheim
WorkingDirectory=/opt/valheim
ExecStart=/opt/valheim/valheim_server.x86_64 \
-name "My Valheim Realm" \
-port 2456 \
-world "Dedicated" \
-password "SecretPassword123" \
-public 1 \
-crossplay
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Перезагрузите конфигурацию systemd и перезапустите службу:
sudo systemctl daemon-reload
sudo systemctl restart valheim
В специализированной панели управления серверами включение кроссплея и генерация Join Code автоматизированы в виде переключателя в веб-интерфейсе без необходимости редактировать текстовые файлы служб Linux.
Настройка брандмауэра и проброс портов UDP#
Несмотря на то, что PlayFab использует ретрансляторы для обхода NAT, для обеспечения минимального пинга и стабильности прямого подключения Steam-игроков необходимо открыть диапазон портов UDP 2456–2458 в брандмауэре:
sudo ufw allow 2456:2458/udp comment "Valheim game and query ports"
sudo ufw reload
sudo ufw status verbose
Если сервер находится за аппаратным NAT или маршрутизатором провайдера, настройте проброс портов 2456–2458 UDP на локальный IP-адрес сервера. Также серверу необходим свободный исходящий доступ к UDP-диапазонам PlayFab (обычно порты 30000–65535 UDP для STUN/relay).
Получение Join Code и проверка статуса сессии#
После запуска сервера с флагом -crossplay процесс регистрирует сессию на серверах Microsoft. Проверьте журналы systemd, чтобы извлечь Join Code:
sudo journalctl -u valheim -e --no-pager | grep -i "playfab"
В выводе должны появиться строки успешной регистрации:
Session "My Valheim Realm" with join code 123456 and IP <PUBLIC_IP>:2456 is active with 0 player(s)
Если в логе отображается строка:
PlayFab session registered: Trueсервер успешно связался с облаком PlayFab и готов принимать подключения как с ПК, так и с консолей Xbox.
Решение проблем с подключением игроков с консолей#
- Сервер зависает на
PlayFab session registered: False: Проверьте доступность DNS и возможность сервера отправлять исходящие UDP-пакеты. Проверьте резолвинг доменов Microsoft:
nslookup title.mps.playfabapi.com
curl -I https://title.mps.playfabapi.com
- Ошибка
Failed to connectу игроков с Xbox по Join Code: Join Code меняется при каждом перезапуске сервера. Убедитесь, что игроки используют актуальный код из текущей сессии:
sudo journalctl -u valheim --since "10 minutes ago" | grep -oP 'join code \K[0-9A-Za-z]+'
- Разрыв соединения после 30 секунд игры на консолях: В 90% случаев это вызвано агрессивным таймаутом NAT-сессий в таблице conntrack маршрутизатора. Увеличьте таймаут UDP-сессий на Linux-шлюзе:
sudo sysctl -w net.netfilter.nf_conntrack_udp_timeout=60
sudo sysctl -w net.netfilter.nf_conntrack_udp_timeout_stream=180




