DGuard

Как настроить Velocity: сеть серверов с лобби

Собираем сеть из прокси Velocity, лобби и режима выживания: velocity.toml, безопасная передача данных игроков, конфиги Paper на серверах и файрвол — без него в сеть можно зайти под чужим ником.

Команда DGuard7 мин

Коротко: Velocity принимает игроков на порту 25565 и раздаёт их по серверам из раздела `[servers]` в `velocity.toml`. Игровые серверы переводятся в offline-режим и получают данные игроков от прокси через modern forwarding с секретом из файла forwarding.secret. Последний и обязательный шаг — закрыть серверы файрволом, чтобы к ним можно было подключиться только через прокси.

Если вы ещё выбираете прокси, сначала прочитайте «Velocity или BungeeCord». Здесь — практическая настройка.

Схема сети

Возьмём типичную сеть на одной машине. Velocity слушает порт 25565 — это единственный адрес для игроков. Лобби работает на 127.0.0.1:30066, выживание — на 127.0.0.1:30067. Оба сервера — Paper или Leaf; держать их на одной версии Minecraft проще всего. Если сервер стоит на другой машине, адрес в конфиге будет внешним, и файрвол становится строго обязательным.

Установка Velocity

  1. 1

    Установите Java

    Актуальный Velocity требует Java 25 или новее. У серверов Paper свои требования: Paper 1.21 работает на Java 21.

  2. 2

    Скачайте Velocity

    Возьмите последнюю стабильную сборку на papermc.io/downloads/velocity и положите jar в отдельную папку — только для прокси.

  3. 3

    Запустите один раз

    При первом старте Velocity создаст velocity.toml и файл forwarding.secret со случайной строкой. Остановите прокси командой end в консоли.

start.sh из документации Velocity (Linux и macOS)
#!/bin/sh
java -Xms1G -Xmx1G -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar velocity*.jar

Настройка velocity.toml

velocity.toml — ключевые строки
bind = "0.0.0.0:25565"
online-mode = true
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"

[servers]
lobby = "127.0.0.1:30066"
survival = "127.0.0.1:30067"

try = [
    "lobby"
]

[forced-hosts]
# удалите примеры или впишите свои домены
  • bind — адрес и порт, на которых прокси принимает игроков. По умолчанию все адреса машины, порт 25565.
  • online-mode = true — аккаунты игроков проверяет прокси. Не выключайте: в offline-режиме Velocity сам пишет в лог, что это риск для безопасности.
  • player-info-forwarding-mode = "modern" — безопасная передача ника, UUID, IP и скина серверам. По умолчанию стоит "NONE", и тогда все игроки приходят с адресом прокси и offline-UUID.
  • [servers] — имена и адреса серверов. Имя слева — то, что игрок пишет в /server.
  • try — куда отправлять игрока при входе и при кике с сервера. Первым ставьте лобби.
  • [forced-hosts] — привязка доменов к серверам, например survival.example.com сразу на выживание. Примеры из стандартного конфига ссылаются на серверы lobby, factions и minigames: если таких нет в [servers], Velocity не запустится.

Настройка серверов Paper

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

  1. 1

    server.properties

    online-mode=false — аккаунт уже проверил прокси. Порт — тот, что указан в velocity.toml: server-port=30066. Если прокси и серверы на одной машине, добавьте server-ip=127.0.0.1 — сервер будет принимать только локальные подключения. Остальные настройки — в статье о server.properties.

  2. 2

    spigot.yml

    settings.bungeecord: false — передача в стиле BungeeCord с modern forwarding не нужна, документация Velocity просит её выключить.

  3. 3

    config/paper-global.yml

    В разделе proxies.velocity: enabled: true, online-mode: true (как в velocity.toml), secret — строка из forwarding.secret.

  4. 4

    Перезапустите и проверьте

    Перезапустите сервер, зайдите через адрес прокси и убедитесь, что у вас ваш скин и правильный UUID.

config/paper-global.yml на каждом сервере сети
proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "строка-из-forwarding.secret"

Файрвол: самый важный шаг

Теперь серверы работают в offline-режиме. Документация Velocity предупреждает прямо: если к серверу можно подключиться в обход прокси, кто угодно сможет войти под любым ником. Modern forwarding усложняет подделку, но, по словам той же документации, не заменяет файрвол. Варианты защиты из документации Velocity:

  • Привязка к localhost. Прокси и серверы на одной машине — server-ip=127.0.0.1 в server.properties каждого сервера. Проще всего, но не подходит, если серверы на разных машинах или на общем хостинге.
  • Файрвол ОС — iptables или nftables на Linux, Брандмауэр Windows: порты серверов открыты только для IP прокси. Velocity настоятельно рекомендует этот способ.
  • Шифрованный туннель между машинами — WireGuard, OpenVPN и подобные. Надёжно, но сложно в настройке.
  • Плагин белого списка IP — последняя линия обороны, если другие способы недоступны, например на общем хостинге.

Проверьте результат снаружи: с другой машины подключение к адресу сервера на порту 30066 или 30067 не должно устанавливаться. Открытым для игроков остаётся только порт прокси. Про защиту самого прокси от ботов и DDoS — в отдельной статье о ботах и DDoS.

Переходы между серверами и команды

Команда /server встроена в Velocity и по умолчанию доступна всем (право velocity.command.server): без аргумента показывает текущий сервер и список остальных, с именем — переводит туда. Другие встроенные команды: /glist — онлайн по сети (по умолчанию право не выдано никому), /send — перенести игрока или всех на другой сервер, /velocity reload — перечитать velocity.toml.

В лобби обычно ставят плагин-навигатор: меню или NPC, которые отправляют игрока на режим. Многие такие плагины пользуются каналом сообщений BungeeCord — Velocity поддерживает его, настройка bungee-plugin-message-channel в разделе [advanced]. Права на прокси выдаёт плагин прав под Velocity, например LuckPerms; в сети все его копии подключают к одной базе — MySQL, MariaDB, PostgreSQL или MongoDB.

DGuard на каждом сервере сети

Прокси пересылает пакеты, но мира не видит, поэтому античит ставят на игровые серверы. С DGuard это выглядит так:

  1. 1

    Добавьте каждый сервер в панель

    Лобби и выживание — отдельные серверы в панели DGuard, у каждого свой ключ dg_…. Ключ показывают один раз — сохраните его.

  2. 2

    Поставьте PacketEvents и DGuard на каждый сервер

    В plugins/ каждого игрового сервера — последний релиз PacketEvents и DGuard.jar. На прокси DGuard не ставится.

  3. 3

    Вставьте ключ и перезапустите

    Ключ — в plugins/DGuard/config.yml → license.key, затем перезапуск. Команда /dguard license покажет состояние лицензии.

Серверу с DGuard нужен исходящий HTTPS до сайта DGuard: лицензия, обновления и облачная проверка правил аима и TriggerBot. Файрвол выше закрывает входящие подключения к серверам — исходящие оставьте открытыми. Решите и про лобби: если там есть PvP-зона или паркур, читеры с Fly и KillAura появятся и там.

Ещё одна мысль для сети: стандартные баны Minecraft хранятся на каждом сервере отдельно, в его banned-players.json, поэтому игрок, забаненный на выживании, может зайти на другой режим. Чтобы бан действовал во всей сети, используйте плагин наказаний с общей базой данных для всех серверов или плагин банов на прокси.

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

  • «Server '…' for forced host '…' does not exist» — в [forced-hosts] остались примеры с серверами, которых нет в [servers]. Удалите их или поправьте имена.
  • «Fallback server … is not registered in your configuration» — в try указан сервер, которого нет в [servers].
  • Игроки без скинов и с чужими UUID — не включена передача данных: нужен player-info-forwarding-mode = "modern" в velocity.toml и proxies.velocity.enabled: true на сервере.
  • Сервер не пускает игроков после настройки — secret в paper-global.yml не совпадает с forwarding.secret или proxies.velocity.online-mode не совпадает с online-mode прокси.
  • ViaVersion и на прокси, и на серверах — документация ViaVersion просит ставить его в одно место: либо на прокси, либо на серверы за ним. И предупреждает, что на прокси античиты могут работать хуже, потому что перевод протокола идёт на другом уровне. Держите ViaVersion на игровых серверах, рядом с античитом — подробнее в статье о ViaVersion.

Частые вопросы

Нужно ли ставить online-mode=false на серверах за Velocity?

Да, в server.properties каждого сервера за прокси online-mode=false: аккаунты проверяет Velocity. В velocity.toml при этом online-mode = true, а серверы обязательно закрываются файрволом.

Где взять секрет для paper-global.yml?

Velocity создаёт файл forwarding.secret со случайной строкой при первом запуске. Эту строку вставьте в proxies.velocity.secret в config/paper-global.yml каждого сервера.

Почему игроки на сервере за Velocity без скинов?

Скорее всего, не включена передача данных: в velocity.toml должно быть player-info-forwarding-mode = "modern", а на сервере — proxies.velocity.enabled: true с тем же секретом.

Как перейти на другой сервер в сети Velocity?

Командой /server <имя> — она встроена в Velocity и по умолчанию доступна всем. Без имени команда покажет, где вы сейчас и какие серверы есть.

Куда ставить античит в сети Velocity?

На каждый игровой сервер: прокси не видит движение и бой. DGuard ставится на каждый сервер со своим ключом и последним релизом PacketEvents рядом.

Источники

Все разделы

Поставьте лучший античит для современного Minecraft

DGuard ловит все 47 видов читов из нашего сравнения — у ближайшего соперника, Intave, 27. Полная защита на любом тарифе, до 30 игроков онлайн — бесплатно.