Выделенному серверу Valheim нужны два UDP-порта: игровой, по умолчанию 2456, и следующий за ним 2457, который отвечает на запросы Steam к серверу. Игровой порт меняется через -port, и оба сдвигаются вместе: -port 2500 означает 2500 и 2501. Диапазон 2456-2458 из старых руководств и из первоначальных инструкций Iron Gate - безопасный запас, а не третье требование; пробросить его не повредит, но сервер от 2458 не зависит. Всё это UDP. Правило для TCP, как бы аккуратно оно ни было написано, для Valheim ничего не делает. Дальше в статье разобрано, для чего нужен каждый порт, как открыть их дома и на машине с Linux или Windows, как кроссплей меняет картину и как разместить несколько серверов на одном адресе.
Что делает каждый порт#
| Порт | Протокол | Назначение | Нужен для |
|---|---|---|---|
2456 (значение -port) | UDP | Игровой трафик | Подключения по IP, самой игры |
2457 (-port + 1) | UDP | Запросы Steam | Список сообществ, браузер серверов Steam |
2458 (-port + 2) | UDP | Текущими сборками не используется | Ни для чего - пробросьте, если руководство настаивает |
Игровой порт несёт саму сессию: позиции, данные зон, строительство, чат. Когда игрок в Steam вводит адрес в Join Game, он подключается именно к этому порту.
Порт запросов - это способ, которым сервер описывает себя внешнему миру, не пуская никого внутрь: название, число игроков, наличие пароля, версия. Его читают список сообществ и собственный браузер серверов Steam. Если закрыт только порт запросов, сервер отлично работает для тех, кто заходит по IP, но не показывается ни в одном списке - это один из самых частых вопросов в поддержку по Valheim, и ему посвящена отдельная статья: сервер Valheim не отображается в списке.
2458 пришёл из ранних сборок и из первоначальных заметок Iron Gate по настройке, где людям советовали пробрасывать 2456-2458. Современные выделенные серверы занимают игровой порт и следующий за ним. Если вы всё равно пробрасываете диапазон, три порта ничего не стоят; если порты выделяются по отдельности, достаточно двух.
Общая идея игровых портов и портов запросов в разных играх изложена в статье порты игровых серверов, а сам протокол запросов - в статье порты запросов и A2S.
Как -port сдвигает пару#
Сервер принимает один аргумент порта и вычисляет по нему порт запросов:
$ ./valheim_server.x86_64 -nographics -batchmode \ -name "Longship Crew" -world "Midgard" \ -password "herring-barrel-42" -port 2466Этот сервер использует UDP 2466 для игры и 2467 для запросов. Отдельного аргумента для порта запросов нет; связь между ними жёсткая. Отсюда три правила:
- Оба порта должны быть свободны и доступны. Хостинг или файрвол, открывший только число, которое вы написали в
-port, даст вам сервер, который невозможно добавить в список. - Выбирайте игровые порты не ближе чем через два, когда на машине несколько серверов. Если взять
2456и2457как два игровых порта, игровой порт второго сервера окажется портом запросов первого, и один из них не сможет занять порт. - Игроки, заходящие по IP, используют игровой порт, а не порт запросов:
203.0.113.10:2466.
Единственное исключение из третьего правила - собственный браузер серверов Steam (View, затем Game Servers, затем Favourites, вне игры). Добавление сервера там использует адрес, по которому Steam отправляет запросы, то есть порт запросов: 203.0.113.10:2467. Внутри Valheim - всегда игровой порт.
Все остальные аргументы запуска, значения по умолчанию и типичные ошибки с ними описаны в справочнике аргументов запуска Valheim.
Кроссплей и ретранслятор#
С -crossplay картина для части игроков меняется. К серверам с кроссплеем подключаются через ретранслятор PlayFab по шестизначному коду, поэтому игрок на Xbox или Game Pass, использующий код, подключается к ретранслятору, а ретранслятор общается с сервером. Такому трафику не нужен входящий проброс на вашем роутере в том же смысле, что и прямым подключениям, поэтому домашний сервер с кроссплеем иногда доступен по коду, хотя по IP до него никто не достучится.
Полагаться на это не стоит. Игроки Steam, заходящие по IP, всё равно подключаются прямо к игровому порту, списку сообществ по-прежнему нужен порт запросов, а ретранслятор добавляет лишний переход каждому пакету. Откройте порты как следует, а код считайте удобством, а не обходным путём. Всё остальное, что меняет кроссплей, описано в статье кроссплей Valheim и игроки на Xbox.
Открытие портов на машине#
Серверу на вашем собственном компьютере с Linux или Windows нужно, чтобы файрвол операционной системы пропускал трафик, и это происходит ещё до роутера.
В Ubuntu или Debian с ufw:
$ sudo ufw allow 2456:2457/udp comment "Valheim"$ sudo ufw status numberedЧасть /udp обязательна. sudo ufw allow 2456 без неё открывает и TCP, и UDP только для одного порта и оставляет порт запросов закрытым. Правила, порядок и их удаление описаны в руководстве по файрволу ufw.
С обычным iptables, если машина использует его:
$ sudo iptables -A INPUT -p udp --dport 2456:2457 -j ACCEPTТакое правило само не переживает перезагрузку; сохраните его средствами вашего дистрибутива (netfilter-persistent save в системах на основе Debian с установленным соответствующим пакетом).
В Windows при первом запуске valheim_server.exe обычно появляется запрос брандмауэра Защитника Windows. Разрешите доступ хотя бы в частных сетях. Если запрос закрыли или нужно явное правило, выполните это в PowerShell от имени администратора:
New-NetFirewallRule -DisplayName "Valheim server" -Direction Inbound ` -Protocol UDP -LocalPort 2456-2457 -Action AllowПравило, привязанное к программе, а не к портам, тоже работает и переживает смену -port, но перестаёт работать, когда SteamCMD ставит сервер в другую папку. Правила для портов проще понимать.
Проброс дома#
Серверу на домашнем подключении нужен ещё один шаг: роутер должен отправлять входящий UDP на этих портах на ПК, где работает сервер.
- Дайте ПК с сервером постоянный адрес в локальной сети. Либо резервирование DHCP в роутере, либо статический адрес на самом ПК. Проброс на
192.168.1.50перестанет работать в тот день, когда ПК получит адрес192.168.1.51. - Создайте проброс. Внешние порты
2456-2457, протокол UDP, внутренний адрес - ПК с сервером, внутренние порты2456-2457. В роутерах это называется "port forwarding", "virtual server" или "NAT rules". Если роутер предлагает "TCP/UDP" или "Both", это подойдёт; один "TCP" - нет. - Узнайте свой публичный адрес. Страница состояния роутера показывает его WAN-адрес; если он начинается с
100.64до100.127, с10., с172.16до172.31или с192.168, ваш провайдер использует carrier-grade NAT, и никакой проброс на вашем роутере работать не будет. - Проверьте снаружи. Попросите друга зайти по IP или воспользуйтесь телефоном на мобильном интернете. Проверка из собственной сети ничего не доказывает - см. ниже.
Случай CGNAT из третьего шага встречается часто на мобильных, оптоволоконных и кабельных подключениях, а оставшиеся варианты - попросить у провайдера публичный адрес, VPN с пробросом портов или хостинг в другом месте - сравниваются в статье NAT и CGNAT для хозяев игровых серверов. Возможности роутера, которые мешают, - UPnP, конфликтующий с ручными правилами, двойной NAT за модемом провайдера и адреса, меняющиеся за ночь, - разобраны в статье проброс портов или хостинг сервера.
Подключение к своему серверу из той же сети
Люди пробрасывают порты, пытаются зайти на свой публичный адрес с ПК рядом с сервером и делают вывод, что проброс сломан. Возможно, с ним всё в порядке. Чтобы подключаться к собственному публичному адресу изнутри сети, роутеру нужна функция NAT loopback, или hairpinning, а у многих домашних роутеров её нет.
Игрокам в той же сети нужно заходить по локальному адресу сервера, например 192.168.1.50:2456. Игроки снаружи используют публичный. Если игроки снаружи заходят, проброс работает, что бы ни происходило изнутри.
Несколько серверов на одном IP#
Запускать два-три сервера Valheim на одной машине или на одном адресе - обычное дело: ванильный мир и мир с модами или основной мир и тестовая копия. Каждому нужна своя пара портов, и у каждого должна быть своя папка сохранений.
# Server A - the main world$ ./valheim_server.x86_64 -nographics -batchmode -name "Midgard Main" \ -world "Midgard" -password "herring-barrel-42" -port 2456 \ -savedir "/srv/valheim/main"# Server B - a modded test world$ ./valheim_server.x86_64 -nographics -batchmode -name "Midgard Test" \ -world "MidgardTest" -password "herring-barrel-42" -port 2466 \ -savedir "/srv/valheim/test"Шаг в десять между игровыми портами (2456, 2466, 2476) - скорее привычка, чем правило: технический минимум - два, но так остаётся запас, и порты проще различать в правилах файрвола. Пробрасывайте или разрешайте каждую пару: здесь это 2456-2457 и 2466-2467.
Отдельный -savedir важен не меньше, чем порт. Два сервера с общей папкой сохранений делят adminlist.txt, bannedlist.txt и permittedlist.txt, а если имена их миров совпадут, они начнут перезаписывать сохранения друг друга. Структура описана в статье расположение сохранений Valheim. Если серверы запущены от разных системных пользователей, у каждого и так будет своя папка сохранений по умолчанию, но -savedir делает это явным.
Игроки отличают серверы по названию в списке, а при подключении по IP - по порту. Коды подключения на серверах с кроссплеем у каждого сервера свои, так что об этом думать не нужно.
Порты на хостинге#
На арендованном сервере вы не выбираете адрес и не настраиваете роутер. Хостинг выделяет порты из собственного диапазона, а ваша задача - убедиться, что сервер использует именно выданные.
Проверьте три вещи:
- Игровой порт в строке запуска совпадает с выделенным. На хостинге с панелью значение
-portобычно подставляется из основного выделения автоматически. Если вы правите команду запуска вручную, оставьте его. - Порт запросов тоже выделен. Поскольку Valheim вычисляет его как игровой порт плюс один, хостингу нужно дать вам именно следующий порт, а не произвольный второй. Порт запросов с несвязанным номером для Valheim бесполезен.
- Заходите по адресу и порту, которые показывает панель. Это может быть не
2456. К серверу203.0.113.10:27015подключаются именно так.
В RE:NODE на каждом тарифе Valheim выделено два порта, игровой и порт запросов, а вкладка Network - это место, где выделения перечислены, добавляются и удаляются. Арендованный сервер заодно избавляет от домашних проблем из предыдущего раздела: нет ни CGNAT, ни роутера, ни loopback, остаются только два UDP-порта.
Проверка, что порты открыты#
UDP проверять неудобно. Соединение не устанавливается, поэтому сайты-"проверялки портов", пытающиеся соединиться, обычно показывают UDP-порт закрытым или неопределённым, даже когда он работает. У Valheim есть способы получше:
- Зайдите по IP извне сети. Если получилось, игровой порт открыт. Ничто другое не доказывает этого так прямо.
- Найдите сервер в списке или добавьте его в избранное Steam по порту запросов. Если Steam показывает название и число игроков, порт запросов отвечает.
- Опросите его утилитой. Любая программа, говорящая на протоколе Steam A2S, может запросить у порта запросов сведения о сервере. Ответ означает, что порт доступен и сервер работает.
- Следите за логом сервера, пока кто-то подключается. Попытка, дошедшая до сервера, оставляет в логе строку. Полное отсутствие записей означает, что пакеты не дошли: виноват файрвол, проброс или неверный адрес, а не игра.
Если вход по IP не удаётся и в логе пусто, проблема в сетевом пути. Если в логе есть попытка, а игрока затем отклонили, то с портами всё в порядке, а причина указана в сообщении - версия, пароль, бан или полный сервер; всё это описано в статье ошибки подключения Valheim Failed to connect.
FAQ#
Valheim использует TCP или UDP?
UDP, и для игрового порта, и для порта запросов. Правило для TCP на 2456 - самая частая причина, по которой аккуратно проброшенный сервер оказывается недоступен.
Нужно ли пробрасывать 2458?
Нет, для текущих сборок не нужно. В старых руководствах указан 2456-2458, и проброс всех трёх вреда не приносит, но сервер использует игровой порт и следующий за ним.
Какой порт вводить при подключении по IP?
Игровой - 2456, если сервер не запущен с другим -port. Порт запросов нужен только для избранного в браузере серверов Steam, вне игры.
Можно ли запустить Valheim на порту 27015 или любом другом?
Да. С -port подойдёт любой свободный UDP-порт, лишь бы следующий за ним тоже был свободен и открыт. Игроки подключаются к этому порту, а список находит сервер через следующий.
Почему мои друзья могут зайти, а я в своей сети - нет?
Скорее всего, в вашем роутере нет NAT loopback, поэтому он не может завернуть ваш собственный публичный адрес обратно внутрь. Заходите по локальному адресу сервера, а игроки снаружи пусть используют публичный.
Нужны ли открытые порты серверам с кроссплеем?
Для игроков Steam, заходящих по IP, и для списка сообществ - да. Игроки по коду идут через ретранслятор, но сервер, который работает только по коду, настроен наполовину и медленнее, чем мог бы.


