Создание связки серверов на Velocity

Когда создают крупные проекты с несколькими режимами (например, Survival, SkyBlock и пр.), обычно размещают разные режимы на разных серверах. За счёт этого:

  1. Проект проще масштабировать, т.к. при увеличении нагрузки можно просто добавить несколько новых серверов без влияния на существующие.
  2. Плагины не конфликтуют друг с другом, т.к. сервера изолированы друг от друга.

Чтобы игроки могли перемещаться между разными серверами, используют прокси-сервер. Когда игроки заходят на проект, они фактически подключаются к прокси-серверу, который направляет их соединение на нужный сервер.

Схема работы

В этой статье мы разберём, как настроить сделать свою связку серверов по такой схеме.

Зачем нужен прокси-сервер?

Прокси-сервер — это «входная дверь» твоего проекта. Игрок подключается к одному IP-адресу, а прокси уже сам решает, на какой сервер его отправить.

Что это даёт на практике:

  1. Один адрес для всего проекта. Игрокам не нужно запоминать отдельный IP для каждого режима — они подключаются к одному адресу, а дальше перемещаются между серверами через команды или порталы.
  2. Общие системы на всю сеть. Чат, права (LuckPerms), список игроков (TabList) — всё это можно настроить централизованно через прокси.
  3. Безопасность. Игровые серверы можно полностью закрыть от внешнего мира, оставив открытым только порт прокси. Подключиться к серверам напрямую в обход прокси не получится.

Почему Velocity, а не BungeeCord?

BungeeCord появился раньше и долгое время был стандартом, но сейчас для новых проектов лучше выбирать Velocity. Вот почему:

  1. Производительность. Velocity написан на современных библиотеках и спокойно держит тысячи игроков с минимальной нагрузкой на процессор.
  2. Стабильность. Более продвинутая обработка пакетов — меньше вылетов под нагрузкой.
  3. Совместимость с модами. Velocity гораздо лучше работает с Forge- и Fabric-серверами.
  4. Безопасная передача данных. Встроенная система modern forwarding надёжнее старых методов BungeeCord.

Настройка Velocity

Основная настройка происходит в файле velocity.toml. Чтобы прокси «увидел» твои игровые серверы, их нужно зарегистрировать.

Регистрация серверов (Backend)

Найди в конфигурации секцию [servers]. Здесь задаётся внутреннее имя сервера (оно будет использоваться в командах, например /server lobby) и его фактический адрес.

# Имя сервера = "IP-адрес:порт"
lobby = "127.0.0.1:30001"
survival = "127.0.0.1:30002"
creative = "127.0.0.1:30003"

Режим передачи данных игрока (player info forwarding)

Это одна из самых важных настроек. Через этот механизм прокси сообщает игровому серверу настоящий IP-адрес игрока и его UUID. Без этого все игроки будут выглядеть так, будто заходят с IP-адреса самого прокси, а скины могут не подгружаться.

Что нужно сделать:

  1. Открой velocity.toml и найди параметр player-info-forwarding-mode.
  2. Установи значение modern.

После выбора режима modern Velocity создаст файл forwarding.secret. Текст из этого файла — твой секретный ключ. Его нужно будет скопировать и вставить в настройки каждого игрового сервера. Благодаря этому к серверам нельзя будет подключиться в обход прокси.

Настройка игровых серверов

Каждый игровой сервер должен знать, что он работает за прокси, и принимать данные от Velocity. Настройка зависит от ядра сервера.

Paper (и форки: Purpur, Pufferfish и т.д.)

  1. Открой файл config/paper-global.yml (в старых версиях — paper.yml).
  2. Найди раздел velocity-support.
  3. Установи enabled: true.
  4. В поле secret вставь содержимое файла forwarding.secret от Velocity.
  5. В server.properties установи online-mode=false.

Fabric

Для Fabric потребуется дополнительный мод — например, FabricProxy-Lite:

  1. Установи мод в папку mods.
  2. Запусти сервер, чтобы сгенерировался конфиг мода.
  3. В конфиге включи поддержку Velocity и вставь секретный ключ.
  4. В server.properties установи online-mode=false.

Forge (1.16+)

Современные версии Forge поддерживают Velocity через мод-прослойку, например Ambassador:

  1. Установи мод на сервер.
  2. В конфиге мода укажи секретный ключ из forwarding.secret.
  3. В server.properties установи online-mode=false.

Распространённые ошибки

Failed to verify username

Эта ошибка появляется в двух случаях:

  1. Ты пытаешься зайти на игровой сервер напрямую (в обход прокси), а на нём стоит online-mode=true.
  2. Прокси работает в лицензионном режиме, а ты заходишь с пиратского клиента.

Убедись, что на всех игровых серверах стоит online-mode=false и что ты подключаешься именно через прокси.

Connection refused

Прокси не может достучаться до игрового сервера. Проверь:

  1. Запущен ли игровой сервер.
  2. Правильно ли указан его адрес и порт в velocity.toml.

Invalid velocity secret

Секретный ключ в конфиге игрового сервера не совпадает с тем, что лежит в forwarding.secret у Velocity. Скопируй ключ заново и убедись, что нет лишних пробелов или переносов строки.