Minecraft Руководство

Настройка прокси Velocity для серверов Minecraft: пересылка IP и защита

Развёртывание высокопроизводительного прокси Velocity для Minecraft: современная пересылка modern forwarding, генерация secret и изоляция backend через UFW.

Настройка прокси Velocity для серверов Minecraft: пересылка IP и защита

При создании сети серверов Minecraft (хаб, выживание, мини-игры) объединение отдельных миров выполняется с помощью прокси-сервера. Современным стандартом индустрии является прокси Velocity от команды PaperMC, пришедший на смену устаревшему BungeeCord. Он обеспечивает экстремальную производительность, устойчивость к бот-атакам и нативную поддержку современных версий протокола.

Однако неопытные администраторы часто совершают критическую ошибку безопасности: они поднимают Velocity на порту 25565, но оставляют порты внутренних серверов Paper (например, 25566, 25567) открытыми в интернет. Злоумышленники могут подключиться к внутреннему серверу напрямую с модифицированным клиентом, подделав никнейм и UUID любого администратора. В этой статье разобран процесс безопасного развёртывания Velocity с криптографической пересылкой Modern forwarding и изоляцией бэкендов через UFW.

Конфигурация forwarding.secret в velocity.toml#

В отличие от устаревшего режима BungeeCord, где IP-адрес передавался в открытом текстовом заголовке рукопожатия, Velocity использует режим Modern forwarding. В этом режиме данные игрока (IP-адрес, UUID, текстуры скина) подписываются криптографическим секретом на основе HMAC.

Сгенерируйте файл секрета для прокси:

bash
mkdir -p /opt/velocity /opt/paper-lobby
openssl rand -hex 32 > /opt/velocity/forwarding.secret

В файле конфигурации /opt/velocity/velocity.toml укажите порт входа для игроков (25565) и активируйте modern forwarding:

bash
cat << 'EOF' | sudo tee -a /opt/velocity/velocity.toml
bind = "0.0.0.0:25565"
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"

[servers]
lobby = "127.0.0.1:25566"
survival = "127.0.0.1:25567"

try = [
  "lobby"
]
EOF

Настройка бэкенд-серверов Paper#

Теперь необходимо сконфигурировать серверы Paper (или Purpur), чтобы они принимали игроков только от вашего прокси и сверяли цифровую подпись.

Скопируйте сгенерированный файл forwarding.secret на каждый бэкенд-сервер:

bash
cp /opt/velocity/forwarding.secret /opt/paper-lobby/

В конфигурации config/paper-global.yml на бэкенд-сервере настройте секцию proxies:

bash
cat << 'EOF' | sudo tee -a /opt/paper-lobby/config/paper-global.yml
proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "PASTE_CONTENTS_OF_FORWARDING_SECRET_HERE"
EOF

В файле server.properties бэкенд-сервера установите online-mode=false (так как проверку лицензии Mojang берёт на себя Velocity) и привяжите сервер к локальному адресу:

bash
cat << 'EOF' | sudo tee -a /opt/paper-lobby/server.properties
server-ip=127.0.0.1
server-port=25566
online-mode=false
EOF

Изоляция бэкенд-портов через межсетевой экран UFW#

Если ваши бэкенд-серверы запущены на разных физических VPS в одной приватной сети, привязки к 127.0.0.1 недостаточно. Необходимо заблокировать доступ к бэкенд-портам из внешней сети на уровне файрвола, разрешив подключения только с IP-адреса прокси.

Настройте правила межсетевого экрана UFW на хосте с бэкенд-сервером:

bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp

# Allow game connections only from the Velocity proxy IP
sudo ufw allow from 10.0.0.5 to any port 25566 proto tcp

# Enable firewall
sudo ufw enable
sudo ufw status verbose

Теперь, если злоумышленник попытается ввести IP-адрес и порт 25566 в клиенте игры, запрос будет сброшен на уровне ядра Linux без ответа.

Проверка статуса сети и авторизации игроков#

Запустите службы Velocity и бэкенд-сервера, после чего проверьте логи инициализации:

bash
sudo journalctl -u velocity -n 50 --no-pager

Подключитесь к серверу через публичный IP на порту 25565. Выполните команду на бэкенд-сервере:

bash
tail -n 20 /opt/paper-lobby/logs/latest.log | grep -E "(logged in with entity id|UUID)"

Убедитесь, что в логе отображается реальный внешний IP-адрес игрока и его подлинный UUID, а не локальный адрес прокси 127.0.0.1. Это подтверждает корректную работу передачи IP для систем античита и банов.

Для централизованного управления десятками игровых серверов в единой сети, мониторинга онлайна и настройки безопасных приватных соединений администраторы задействуют панель управления серверами, где конфигурация прокси и балансировка нагрузки автоматизированы.

Источники#