Velocity: как собрать сеть серверов Minecraft

Что такое прокси Velocity, как поставить его перед несколькими серверами Paper и какие порты для этого нужны в разделе «Сеть» панели EGN.

Команда EGN 10 мин чтения
Velocity: как собрать сеть серверов Minecraft
Содержание 14
  1. Коротко
  2. Как устроена сеть
  3. Шаги
  4. Примеры
  5. Как сделать в панели EGN
  6. Симптомы и решения
  7. Пример проверки сети с нуля
  8. Частые ошибки
  9. Итог
  10. Вопросы и ответы
  11. Нужен ли Velocity, если сервер один?
  12. Можно ли ставить обычные плагины Paper на Velocity?
  13. Что будет, если потерять forwarding.secret?
  14. Нужно ли отдельное место для прокси?

Один сервер Minecraft — это одна карта, одни правила и один набор плагинов. Когда проекту нужны лобби, выживание и креатив, игроков удобнее держать в одной сети: они заходят на один адрес, а переходят между мирами командой или из меню. За это отвечает прокси. Сейчас самый распространённый выбор — Velocity.

Коротко

Velocity ставится как отдельный сервер-прокси. Игроки подключаются к его адресу, а сам прокси переводит их на один из серверов, описанных в velocity.toml в секции [servers]. Бэкенды (Paper) включают режим передачи данных игрока от прокси (modern forwarding) с общим секретом. В панели EGN у каждого бэкенда свой порт из раздела «Сеть», а тариф должен покрывать все порты сети.

Как устроена сеть

Схема простая: игрок → прокси → бэкенд. Игрок видит только адрес прокси. Все остальные серверы — внутренние для сети, хотя технически они доступны по своим адресам и портам.

Схема: игроки заходят на Velocity, а тот переводит их на бэкенды
Схема: игроки заходят на Velocity, а тот переводит их на бэкенды

Velocity работает только с плагинами, написанными под его собственный API. Обычные плагины Spigot и Paper на прокси не загружаются, и это нормально: на прокси живут плагины сети (например, для переходов между серверами и общих сообщений), а игровые правила — на бэкендах.

Шаги

  1. Определите состав сети. Запишите, какие серверы нужны: например, lobby (вход и хаб), survival и creative. Каждый из них будет отдельным сервером EGN с Paper той же версии Minecraft.

  2. Выделите порты. У каждого бэкенда должен быть свой порт, который прокси будет использовать для подключения. В панели откройте раздел «Сеть» на каждом сервере и посмотрите, какой адрес и порт выдан. Если портов не хватает, их можно докупить в кабинете — на странице сервера в «Сети» есть счётчик «N из M портов тарифа» и кнопка «Докупить порт» (её видит владелец).

  3. Поставьте Velocity на прокси-сервер. Velocity — это отдельное Java-приложение (velocity-<версия>.jar), а не плагин для Paper. Актуальную сборку берут на сайте PaperMC (papermc.io/downloads/velocity), документация — docs.papermc.io/velocity. Если в списке ядер вашего сервера EGN Velocity нет, загрузите jar через «Файлы» и укажите его имя в разделе «Запуск»; затрудняетесь — напишите в поддержку. Прокси сам не «имеет версии мира», но должен поддерживать версии клиентов, которых вы хотите пускать, и версии бэкендов.

  4. Заполните velocity.toml. Прокси создаст файл при первом запуске. Ключевые поля:

TOML
bind = "0.0.0.0:25565"
online-mode = true
show-max-players = 200
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"

[servers]
lobby = "203.0.113.10:30101"
survival = "203.0.113.10:30102"
creative = "203.0.113.10:30103"
try = ["lobby"]

[forced-hosts]
"survival.example.ru" = ["survival"]

Адреса и порты в [servers] — примеры из документации. Подставьте свои: адрес ноды и порты из раздела «Сеть» каждого бэкенда. Поле try задаёт, на какой сервер отправлять игрока при входе и после кика. Секция [forced-hosts] нужна, если разные домены должны вести на разные серверы.

  1. Создайте секрет. Файл forwarding.secret с длинной случайной строкой лежит рядом с velocity.toml. Он нужен, чтобы бэкенды принимали данные игрока только от вашего прокси. Строку не публикуйте и не отправляйте в чат — она работает как пароль.

  2. Настройте бэкенды. В Paper включите поддержку прокси в config/paper-global.yml: в секции proxies → velocity поставьте enabled: true, online-mode: true (если прокси проверяет игроков, то есть online-mode = true в velocity.toml) и впишите в secret содержимое файла forwarding.secret. А в server.properties бэкенда поставьте online-mode=false: проверку аккаунтов делает прокси, а бэкенд доверяет ему по секрету.

YAML
proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "содержимое forwarding.secret"

После изменения перезапустите бэкенд.

  1. Перезапустите всё по порядку. Сначала бэкенды (lobby, survival, creative), затем прокси. Если прокси стартует раньше, он покажет игрокам «сервер недоступен», пока бэкенды не поднимутся.

  2. Проверьте вход. Подключитесь к адресу прокси, зайдите на лобби, затем перейдите на survival через команду, которую вы настроили в плагине сети. Если вход не проходит, смотрите логи прокси и бэкенда одновременно — ошибки секрета видно сразу.

Примеры

Лобби для новых игроков. Бэкенд lobby с меньшими требованиями по памяти, на нём нет выживания и магазина. В try указываем именно его: игрок всегда начинает там. Если лобби перезапускается, прокси держит игрока на экране выбора, а не кидает в ошибку.

Два выживания на одном адресе. Оба мира работают на разных бэкендах с собственными портами. Игрок заходит через forced-hosts: survival.example.ru ведёт на survival, hardcore.example.ru — на hardcore. Для этого обоим доменам достаточно записей DNS, ведущих на адрес прокси: игрок указывает домен, а Velocity по нему выбирает сервер. Как направить домен на порт, читайте в статье про свой домен и SRV.

Общий список игроков и баны. Баны и права живут на уровне прокси или отдельного сервера авторизации, а не в каждом мире. Иначе игрок, забаненный на survival, спокойно зайдёт на creative. Выбор системы прав — в статье про LuckPerms.

Velocity и бэкенды: адрес и порт каждого бэкенда из раздела «Сеть»
Velocity и бэкенды: адрес и порт каждого бэкенда из раздела «Сеть»
Раздел «Сеть» на тестовом сервере: порты плагинов и счётчик портов тарифа
Раздел «Сеть» на тестовом сервере: порты плагинов и счётчик портов тарифа

Как сделать в панели EGN

Большую часть работы с сетью вы делаете в самой панели, не в консоли. Пройдите по шагам на каждом бэкенде.

  1. Откройте сервер и перейдите в раздел «Сеть». Вверху будет адрес для подключения и счётчик «N из M портов тарифа». Это главная цифра для сети: каждый бэкенд занимает минимум один порт.
  2. В списке «Все порты сервера» посмотрите, какой порт выдан серверу. Именно он пойдёт в [servers] прокси, если бэкенд — это основной игровой порт.
  3. Если сервер ещё не имеет лишнего порта, добавьте его в «Сети» кнопкой «Добавить порт» (в пределах лимита тарифа). Если портов нет, откроется сообщение о лимите и ссылка на докупку портов — её видит только владелец сервера.
  4. Перепишите адрес и порт в velocity.toml и перезапустите прокси.
  5. Вернитесь в «Сеть», убедитесь, что порт на месте, а сервер запущен после правки. Если что-то не так, смотрите таблицу ниже.

Для сравнения: вот как выглядит раздел «Сеть», когда у сервера выданы порты под голосовой чат и Bedrock. Прокси и каждый бэкенд получают такой же список, только со своими адресами.

Раздел «Сеть»: адрес подключения, порты плагинов и список всех портов сервера
Раздел «Сеть»: адрес подключения, порты плагинов и список всех портов сервера

Если на бэкенде стоит карта или другой плагин с отдельным портом, он тоже появится в этом списке. Его порт не должен совпадать с портом прокси или другого бэкенда, поэтому не вписывайте адреса вручную, не сверившись с «Сетью».

Симптомы и решения

Когда сеть не работает, быстрее всего идти по таблице: симптом, частая причина и что сделать.

Симптом Частая причина Решение
Прокси запускается, но подключиться нельзя Порт bind занят или закрыт фаерволом Проверьте, что порт прокси выдан и не занят другим сервером ноды
Игрок видит «Сервер недоступен» на лобби Бэкенд ещё не поднялся или не виден по адресу из [servers] Запустите бэкенд, проверьте адрес и порт в «Сети»
Ошибка проверки игрока при входе на бэкенд На бэкенде online-mode=true в server.properties или не включён proxies.velocity Поставьте на бэкенде online-mode=false, включите proxies.velocity и перезапустите
Игрок заходит, но попадает не туда Неверный try или [forced-hosts] Поставьте в try сервер, который должен быть стартовым
Переход между серверами не работает Бэкенд не принимает данные от прокси Проверьте proxies.velocity в paper-global.yml и совпадение секрета
В «Сети» статус «Порт выдан, нужно применить» или баннер «Нужен перезапуск» Порт выдан, но сервер ещё не перезапущен Перезапустите сервер, баннер снимется сам

Два правила, которые экономят время: меняйте только одно поле за раз и всегда перезапускайте бэкенды до прокси. Если ошибка не уходит, смотрите лог прокси: в первых строках после старта он пишет, какие бэкенды доступны, а какие нет.

Пример проверки сети с нуля

Допустим, вы собираете сеть из трёх серверов: lobby, survival, creative. Порядок работы такой.

Сначала поднимите все три бэкенда по одному. Для каждого проверьте в «Сети» адрес и порт, запишите их в таблицу. Затем поставьте Velocity и заполните [servers] по этой таблице. Запустите прокси и подключитесь к нему клиентом Minecraft, но без перехода: только вход на лобби. Если вход проходит, переходите на survival и creative через настроенную команду. Если переход не работает, проблема почти всегда в секрете или в online-mode.

Такой порядок выглядит медленнее, чем «всё сразу», но сразу видно, какой элемент сломан. Когда сеть работает, добавляйте новые серверы по одному и каждый раз проверяйте вход.

Частые ошибки

Секрет не совпадает

Если в forwarding.secret и в paper-global.yml разные строки, игрок увидит ошибку при входе на бэкенд. Скопируйте секрет один раз и не редактируйте его в двух местах руками.

Бэкенды видны из интернета

Порты бэкендов в EGN достижимы снаружи. С modern forwarding и секретом чужой клиент не войдёт на бэкенд напрямую, но порт всё равно будут сканировать. Подробнее — в статье про защиту от ботов.

Остальные ошибки обычно такие:

  • Прокси на другой версии Minecraft, чем бэкенды. Прокси должен поддерживать версии всех бэкендов. Обновляйте прокси, если в сети появилась новая версия игры.
  • Порт бэкенда не выдан. Адрес в [servers] указывает на порт, которого нет в разделе «Сеть». Проверьте список портов сервера и при необходимости выдайте новый.
  • Игрок попадает на лобби, а не на нужный мир. Проверьте порядок в try и пути [forced-hosts].
  • Бэкенд не переходит в режим прокси. Без proxies.velocity в paper-global.yml бэкенд не примет данные игрока от прокси.
Что дальше

Когда сеть собрана, у каждого сервера появляются свои плагины и своя нагрузка. Смотрите статьи про Geyser (чтобы пускать игроков с телефонов и консолей), про голосовой чат (порты UDP) и про веб-карту: у каждого из них свой порт, и все они попадают в тот же раздел «Сеть».

Итог

Velocity (сравнение с BungeeCord — в статье BungeeCord или Velocity, порты — в статье про «Сеть») — самый практичный способ собрать из нескольких серверов Paper одну сеть с общим адресом. Настройка сводится к трём вещам: velocity.toml с секцией [servers], общий секрет между прокси и бэкендами и свой порт у каждого бэкенда из раздела «Сеть». Начинайте с двух серверов — лобби и одного мира, — проверьте вход и только потом добавляйте остальные.

Вопросы и ответы

Нужен ли Velocity, если сервер один?

Нет. Прокси имеет смысл, когда миров или режимов несколько. Один сервер проще держать без прокси.

Можно ли ставить обычные плагины Paper на Velocity?

Нет. Прокси использует собственный API Velocity. Плагины игрового мира ставятся на бэкенды.

Что будет, если потерять forwarding.secret?

Бэкенды перестанут принимать игроков через прокси. Восстановите файл и значение в paper-global.yml одинаковыми и перезапустите сервер.

Нужно ли отдельное место для прокси?

Да, прокси — отдельный сервер с собственным адресом. На нём не нужно много памяти: он только передаёт трафик, без мира и чанков.

Сервер под Minecraft за пару минут — egnetwork.ru

Читать далее

Вся рубрика →