RE:NODE

Порты сервера Valheim: 2456, 2457 и 2458 - что это

Автор Команда RE:NODE
10 мин чтения


Выделенному серверу 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 сдвигает пару#

Сервер принимает один аргумент порта и вычисляет по нему порт запросов:

bash
$ ./valheim_server.x86_64 -nographics -batchmode \    -name "Longship Crew" -world "Midgard" \    -password "herring-barrel-42" -port 2466

Этот сервер использует UDP 2466 для игры и 2467 для запросов. Отдельного аргумента для порта запросов нет; связь между ними жёсткая. Отсюда три правила:

  1. Оба порта должны быть свободны и доступны. Хостинг или файрвол, открывший только число, которое вы написали в -port, даст вам сервер, который невозможно добавить в список.
  2. Выбирайте игровые порты не ближе чем через два, когда на машине несколько серверов. Если взять 2456 и 2457 как два игровых порта, игровой порт второго сервера окажется портом запросов первого, и один из них не сможет занять порт.
  3. Игроки, заходящие по 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:

bash
$ sudo ufw allow 2456:2457/udp comment "Valheim"$ sudo ufw status numbered

Часть /udp обязательна. sudo ufw allow 2456 без неё открывает и TCP, и UDP только для одного порта и оставляет порт запросов закрытым. Правила, порядок и их удаление описаны в руководстве по файрволу ufw.

С обычным iptables, если машина использует его:

bash
$ sudo iptables -A INPUT -p udp --dport 2456:2457 -j ACCEPT

Такое правило само не переживает перезагрузку; сохраните его средствами вашего дистрибутива (netfilter-persistent save в системах на основе Debian с установленным соответствующим пакетом).

В Windows при первом запуске valheim_server.exe обычно появляется запрос брандмауэра Защитника Windows. Разрешите доступ хотя бы в частных сетях. Если запрос закрыли или нужно явное правило, выполните это в PowerShell от имени администратора:

code
New-NetFirewallRule -DisplayName "Valheim server" -Direction Inbound `    -Protocol UDP -LocalPort 2456-2457 -Action Allow

Правило, привязанное к программе, а не к портам, тоже работает и переживает смену -port, но перестаёт работать, когда SteamCMD ставит сервер в другую папку. Правила для портов проще понимать.

Проброс дома#

Серверу на домашнем подключении нужен ещё один шаг: роутер должен отправлять входящий UDP на этих портах на ПК, где работает сервер.

  1. Дайте ПК с сервером постоянный адрес в локальной сети. Либо резервирование DHCP в роутере, либо статический адрес на самом ПК. Проброс на 192.168.1.50 перестанет работать в тот день, когда ПК получит адрес 192.168.1.51.
  2. Создайте проброс. Внешние порты 2456-2457, протокол UDP, внутренний адрес - ПК с сервером, внутренние порты 2456-2457. В роутерах это называется "port forwarding", "virtual server" или "NAT rules". Если роутер предлагает "TCP/UDP" или "Both", это подойдёт; один "TCP" - нет.
  3. Узнайте свой публичный адрес. Страница состояния роутера показывает его WAN-адрес; если он начинается с 100.64 до 100.127, с 10., с 172.16 до 172.31 или с 192.168, ваш провайдер использует carrier-grade NAT, и никакой проброс на вашем роутере работать не будет.
  4. Проверьте снаружи. Попросите друга зайти по IP или воспользуйтесь телефоном на мобильном интернете. Проверка из собственной сети ничего не доказывает - см. ниже.

Случай CGNAT из третьего шага встречается часто на мобильных, оптоволоконных и кабельных подключениях, а оставшиеся варианты - попросить у провайдера публичный адрес, VPN с пробросом портов или хостинг в другом месте - сравниваются в статье NAT и CGNAT для хозяев игровых серверов. Возможности роутера, которые мешают, - UPnP, конфликтующий с ручными правилами, двойной NAT за модемом провайдера и адреса, меняющиеся за ночь, - разобраны в статье проброс портов или хостинг сервера.

Подключение к своему серверу из той же сети

Люди пробрасывают порты, пытаются зайти на свой публичный адрес с ПК рядом с сервером и делают вывод, что проброс сломан. Возможно, с ним всё в порядке. Чтобы подключаться к собственному публичному адресу изнутри сети, роутеру нужна функция NAT loopback, или hairpinning, а у многих домашних роутеров её нет.

Игрокам в той же сети нужно заходить по локальному адресу сервера, например 192.168.1.50:2456. Игроки снаружи используют публичный. Если игроки снаружи заходят, проброс работает, что бы ни происходило изнутри.

UDP 2456UDP 2457напрямую, без пробросаДруг снаружизаходит на публичный IPИгрок в вашей сетизаходит на 192.168.x.xСписок сообществзапрос на 2457Домашний роутерпробрасывает UDP 2456-2457Сервер Valheimигра 2456, запросы 2457
Кто к какому порту подключается на домашнем сервере Valheim

Несколько серверов на одном IP#

Запускать два-три сервера Valheim на одной машине или на одном адресе - обычное дело: ванильный мир и мир с модами или основной мир и тестовая копия. Каждому нужна своя пара портов, и у каждого должна быть своя папка сохранений.

bash
# 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 есть способы получше:

  1. Зайдите по IP извне сети. Если получилось, игровой порт открыт. Ничто другое не доказывает этого так прямо.
  2. Найдите сервер в списке или добавьте его в избранное Steam по порту запросов. Если Steam показывает название и число игроков, порт запросов отвечает.
  3. Опросите его утилитой. Любая программа, говорящая на протоколе Steam A2S, может запросить у порта запросов сведения о сервере. Ответ означает, что порт доступен и сервер работает.
  4. Следите за логом сервера, пока кто-то подключается. Попытка, дошедшая до сервера, оставляет в логе строку. Полное отсутствие записей означает, что пакеты не дошли: виноват файрвол, проброс или неверный адрес, а не игра.

Если вход по 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, и для списка сообществ - да. Игроки по коду идут через ретранслятор, но сервер, который работает только по коду, настроен наполовину и медленнее, чем мог бы.