Velocity — nowoczesny proxy do Minecrafta
Velocity to proxy nowej generacji stworzony przez zespół PaperMC. Wydajniejszy od BungeeCord, bezpieczniejszy dzięki modern forwarding i aktywnie rozwijany. Jeśli budujesz sieć serwerów Minecraft, Velocity to jedyna słuszna odpowiedź.
Czym jest proxy w Minecraftcie
Proxy w Minecraftcie to serwer pośredniczący, który przyjmuje połączenia graczy i kieruje ich do serwerów backend — gry właściwej. Gracz łączy się z jednym adresem IP, a proxy decyduje, na którym serwerze faktycznie ląduje. Dzięki temu można budować sieci złożone z dziesiątek lub setek osobnych instancji gry, a gracze widzą je jako jeden spójny serwer.
Bez proxy każdy serwer backend byłby osobnym adresem. Gracze musieliby się rozłączać i łączyć ponownie, żeby przejść z lobby do gry. Z proxy przejście jest natychmiastowe — podobnie jak teleportacja. Sieć proxy to standard na dużych serwerach: Hypixel, Mineplex, CubeCraft — wszystkie działają w tym modelu.
Proxy obsługuje też wspólny czat, globalne komendy administracyjne i uwierzytelnianie — gracz loguje się raz na proxy, a jego tożsamość jest przekazywana do każdego serwera backend.
Velocity vs BungeeCord — porównanie
BungeeCord przez lata był jedynym poważnym wyborem dla sieci Minecraft. Velocity zmienia tę sytuację gruntownie. Oto kluczowe różnice:
Wydajność
Velocity zostało napisane z myślą o wydajności od podstaw. Używa innego modelu sieciowego niż BungeeCord — zamiast jednego wątku na połączenie, stosuje asynchroniczne I/O oparte na Netty. W praktyce Velocity obsługuje więcej jednoczesnych połączeń przy mniejszym zużyciu pamięci i CPU. Na sieci z kilkudziesięcioma graczami różnica jest subtelna. Na sieci z tysiącami graczy — kolosalna.
Bezpieczeństwo — modern forwarding
To najważniejsza przewaga Velocity. BungeeCord używa IP forwarding — serwer backend po prostu ufa nagłówkowi z adresem IP i UUID gracza przekazanemu przez proxy. To poważna luka: każdy, kto zna adres serwera backend i może się z nim połączyć bezpośrednio, może podać dowolny UUID i wejść jako administrator.
Velocity rozwiązuje ten problem przez modern forwarding. Każdy serwer backend posiada wspólny sekret (klucz HMAC) z proxy. Dane gracza są podpisane tym kluczem — bez znajomości sekretu nie da się sfałszować tożsamości. To fundamentalna zmiana w modelu bezpieczeństwa.
Aktywny rozwój
BungeeCord praktycznie nie jest rozwijany. Waterfall (fork BungeeCord) był utrzymywany przez Paper team, ale w 2022 roku oficjalnie zakończył wsparcie, rekomendując przejście na Velocity. Velocity jest aktywnie rozwijane, regularnie aktualizowane pod nowe wersje Minecrafta i ma rosnący ekosystem pluginów.
Kompatybilność
Velocity nie jest kompatybilne z pluginami BungeeCord. Ma własne API. To wadą przy migracji, ale zaletą w dłuższej perspektywie — API Velocity jest znacznie lepiej zaprojektowane i stabilniejsze.
Wniosek: Jeśli zaczynasz nową sieć — wybierz Velocity bez zastanowienia. Jeśli masz istniejącą sieć na BungeeCord — zaplanuj migrację. BungeeCord to technologiczny dług, który będzie rosnąć.
Instalacja Velocity
Velocity jest dystrybuowane jako pojedynczy plik JAR. Instalacja jest prosta, ale wymaga kilku kroków, żeby sieć działała poprawnie.
Wymagania
- Java 17 lub nowsza (zalecana Java 21 LTS)
- Dedykowany port dla proxy (domyślnie 25565)
- Osobne porty dla każdego serwera backend (np. 25566, 25567...)
- Co najmniej 512 MB RAM dla samego proxy (zależy od skali)
Pobieranie i uruchomienie
Plik JAR Velocity pobierzesz ze strony PaperMC (papermc.io/downloads/velocity). Zawsze pobieraj najnowszą stabilną wersję. Po pobraniu utwórz osobny katalog dla proxy i umieść tam plik.
Pierwsze uruchomienie tworzy strukturę plików konfiguracyjnych:
java -Xms512M -Xmx512M -jar velocity-*.jar Po chwili Velocity wygeneruje velocity.toml, forwarding.secret i katalog plugins/. Zatrzymaj proxy (Ctrl+C) i przejdź do konfiguracji.
Skrypt startowy
Na serwerze produkcyjnym używaj skryptu startowego zamiast uruchamiać proxy ręcznie. Przykładowy start.sh:
#!/bin/bash
java -Xms512M -Xmx1G \
-XX:+UseG1GC \
-XX:G1HeapRegionSize=4M \
-XX:+UnlockExperimentalVMOptions \
-XX:+ParallelRefProcEnabled \
-XX:+AlwaysPreTouch \
-jar velocity-*.jar Velocity jest lekkie — 512 MB do 1 GB RAM wystarczy nawet dla setek graczy. Proxy nie przetwarza logiki gry, tylko przekazuje pakiety.
Konfiguracja velocity.toml
Główny plik konfiguracyjny Velocity to velocity.toml. Poniżej omówienie najważniejszych sekcji.
Podstawowe ustawienia
# Adres i port, na którym nasłuchuje proxy
bind = "0.0.0.0:25565"
# Nazwa wyświetlana w liście serwerów
motd = "&aMoja siec Minecraft"
# Maksymalna liczba graczy (0 = bez limitu)
show-max-players = 100
# Tryb forwarding — KLUCZOWE ustawienie
player-info-forwarding-mode = "modern"
# Czy proxy ma umożliwiać grę w trybie offline (cracked)?
online-mode = true Sekcja servers
Tu definiujesz wszystkie serwery backend dostępne w sieci:
[servers]
lobby = "127.0.0.1:25566"
survival = "127.0.0.1:25567"
minigry = "127.0.0.1:25568"
# Serwery, do których trafia gracz po zalogowaniu (w kolejności prób)
try = ["lobby"] Sekcja forced-hosts
Forced hosts pozwalają kierować graczy do konkretnego serwera na podstawie adresu, z którego się łączą. Przydatne jeśli masz kilka subdomen wskazujących na ten sam IP:
[forced-hosts]
"survival.mojserwer.pl" = ["survival"]
"minigry.mojserwer.pl" = ["minigry"] Sekcja advanced
[advanced]
# Rozmiar kolejki kompresji (bajty). Pakiety powyżej tej wartości są kompresowane
compression-threshold = 256
# Poziom kompresji (0-9, -1 = domyślny)
compression-level = -1
# Timeout logowania (ms)
login-ratelimit = 3000
# Maksymalna liczba graczy z tego samego IP
connection-throttle = 4000 Dodawanie serwerów backend
Serwery backend to właściwe serwery gry — lobby, survival, minigry, etc. Każdy z nich musi być skonfigurowany tak, żeby akceptował połączenia tylko z proxy, nie bezpośrednio od graczy.
Konfiguracja serwera Paper jako backend
Każdy serwer backend musi mieć:
- Własny port (inny niż proxy i inne backendy)
- Tryb offline (
online-mode=falsewserver.properties) — uwierzytelnianie obsługuje proxy - Nasłuchiwanie tylko na localhost — nie udostępniaj portów backendów publicznie
W server.properties każdego backendu:
online-mode=false
server-port=25566
server-ip=127.0.0.1 Ważne: Ustawienie server-ip=127.0.0.1 sprawia, że serwer backend nasłuchuje tylko na interfejsie lokalnym. Gracze nie mogą się z nim połączyć bezpośrednio — tylko proxy, działające na tym samym hoście, ma dostęp. Jeśli backendy są na różnych maszynach, użyj firewalla.
Wiele maszyn w sieci
Jeśli proxy i serwery backend działają na różnych maszynach, w velocity.toml wpisz prywatne IP serwera backend:
[servers]
lobby = "192.168.1.10:25566"
survival = "192.168.1.11:25566" Backendy na osobnych maszynach powinny mieć reguły firewalla blokujące port 25566 dla wszystkich oprócz IP proxy. Publiczny dostęp do portów backendów to krytyczna luka bezpieczeństwa.
Forwarding — modern vs legacy
Forwarding to mechanizm przekazywania tożsamości gracza (UUID, nazwa, IP) z proxy do serwera backend. Velocity oferuje trzy tryby: none, legacy i modern.
Modern forwarding (zalecane)
Modern forwarding używa kryptograficznego podpisu HMAC opartego na sekrecie przechowywanym w pliku forwarding.secret. Serwer backend weryfikuje podpis przed zaakceptowaniem danych gracza. Bez znajomości sekretu nie da się podszyć pod innego gracza, nawet mając bezpośredni dostęp do portu backendu.
Konfiguracja modern forwarding wymaga Paper (lub forka Paper, np. Purpur) w wersji 1.13+. Vanilla i CraftBukkit nie wspierają tego trybu.
Kroki konfiguracji:
- W
velocity.tomlustaw:player-info-forwarding-mode = "modern" - Skopiuj zawartość pliku
forwarding.secret— będziesz potrzebować tego klucza na każdym backendzie - Na każdym serwerze Paper edytuj
config/paper-global.yml:
proxies:
velocity:
enabled: true
online-mode: true
secret: "TWOJ_SEKRET_Z_FORWARDING_SECRET" Sekcja proxies.velocity pojawi się w pliku dopiero po pierwszym uruchomieniu Paper z włączoną obsługą proxy.
Legacy forwarding (BungeeCord compatibility)
Tryb legacy emuluje zachowanie BungeeCord — dane gracza są przekazywane w nagłówku połączenia bez kryptograficznego podpisu. Używaj tego trybu tylko jeśli masz serwery backend, które nie wspierają modern forwarding (starsze wersje, pluginy wymagające BungeeCord API).
W trybie legacy musisz bezwzględnie zablokować bezpośredni dostęp do portów backendów — brak podpisu kryptograficznego oznacza, że każdy może podszyć się pod dowolnego gracza.
Tryb none
Bez forwardingu serwery backend nie wiedzą nic o prawdziwej tożsamości gracza — każdy połączony gracz jest anonimowy z perspektywy backendu. Używany tylko w bardzo specyficznych scenariuszach (np. publiczne proxy dla serwerów, które nie należą do właściciela proxy).
Pluginy Velocity
Ekosystem pluginów Velocity rośnie szybko. Instalacja jest prosta — wrzuć plik JAR do katalogu plugins/ i uruchom proxy. Oto najważniejsze pluginy:
LimboFilter
Jeden z najważniejszych pluginów bezpieczeństwa. LimboFilter weryfikuje graczy przed wpuszczeniem do sieci, używając technik anty-bot: puzzle matematyczne, analizę ruchu sieciowego, CAPTCHA. Chroni sieć przed atakami botów, które mogą przeciążyć serwer lub wykraść zasoby. Wymagany na każdej publicznej sieci.
LimboAuth
Autoryzacja graczy bezpośrednio na poziomie proxy, w lekkim środowisku Limbo (serwer bez logiki gry). Gracz po połączeniu trafia do Limbo, gdzie musi się zalogować — dopiero po autoryzacji proxy kieruje go do właściwego backendu. Eliminuje problemy z autoryzacją na każdym backendzie osobno.
MiniPlaceholders
Rozszerzone placeholdery dla Velocity — zmienne, które możesz używać w wiadomościach, MOTD i innych miejscach. Podstawa dla wielu innych pluginów korzystających z dynamicznych tekstów.
VelocityPteroPower
Integracja z Pterodactyl Panel — automatycznie uruchamia serwery backend, gdy gracz próbuje się na nie połączyć, i zatrzymuje je po opustoszeniu. Idealne dla sieci z wieloma serwerami, gdzie nie wszystkie muszą działać cały czas.
SignedVelocity
Obsługa podpisanych wiadomości czatu (wprowadzonych w Minecraft 1.19). Bez tego pluginu wiadomości czatu mogą być blokowane przez serwery backend wymagające podpisów.
Kickredirect
Kiedy serwer backend wyrzuca gracza (restarty, błędy), zamiast wyrzucać go z sieci, plugin automatycznie przenosi go do lobby lub innego serwera. Znacząco poprawia doświadczenie gracza.
Uwaga: Pluginy BungeeCord nie działają na Velocity. Przed instalacją sprawdź, czy plugin ma wersję dla Velocity (Velocity API). Większość popularnych rozwiązań ma oddzielne porty — szukaj nazwy pluginu + "velocity" na Modrinth lub Hangar.
Bezpieczeństwo sieci
Velocity dostarcza solidne fundamenty bezpieczeństwa, ale poprawna konfiguracja całej sieci wymaga dodatkowych kroków.
Modern forwarding jako podstawa
Jak wspomniano wcześniej, modern forwarding z kryptograficznym podpisem HMAC to pierwsza linia obrony. Bez niego każdy, kto uzyska dostęp do portu backendu (nawet przez przypadek, jeśli firewall jest źle skonfigurowany), może grać jako dowolny gracz, w tym administracja.
Firewall — obowiązkowy
Porty serwerów backend muszą być niedostępne z zewnątrz. Konfiguracja server-ip=127.0.0.1 w server.properties to niewystarczające zabezpieczenie samo w sobie — dodaj reguły firewalla blokujące porty backendów dla ruchu zewnętrznego:
# Zezwól tylko na lokalny dostęp do portów backendów
ufw deny 25566
ufw deny 25567
ufw allow 25565 # tylko port proxy jest publiczny Ochrona przed DDoS i botami
Duże sieci są regularnym celem ataków DDoS i botów. Velocity samo w sobie nie ma zaawansowanej ochrony anty-DDoS — potrzebujesz:
- LimboFilter — anty-bot na poziomie proxy (puzzle, analiza ruchu)
- TCPShield lub podobny CDN — ukrywa prawdziwy IP serwera, filtruje DDoS
- Fail2ban — blokuje IP po zbyt wielu nieudanych próbach połączenia
- Ustawienie
connection-throttlew velocity.toml — limit połączeń z jednego IP
Aktualizacje
Velocity regularnie łata luki bezpieczeństwa. Subskrybuj powiadomienia o wydaniach na GitHubie PaperMC i aktualizuj proxy po każdym security release. Przestarzałe wersje Velocity mogą zawierać znane exploity.
Logi i monitoring
Włącz logowanie połączeń i regularnie przeglądaj logi. Velocity loguje próby połączeń, błędy i zdarzenia proxy. Narzędzia jak Grafana + Prometheus z eksporterem Velocity pozwalają wizualizować ruch i wykrywać anomalie w czasie rzeczywistym.
Skalowanie sieci
Velocity jest zaprojektowany do skalowania — zarówno w pionie (więcej zasobów dla jednego proxy), jak i w poziomie (wiele instancji proxy za load balancerem).
Pionowe skalowanie
Dla większości sieci jedno proxy Velocity wystarczy nawet dla kilku tysięcy jednoczesnych graczy. Proxy nie przetwarza logiki gry — głównym zasobem jest przepustowość sieci i RAM. Dla 1000 graczy przydziel 2-4 GB RAM. Velocity efektywnie używa wielowątkowości, więc więcej rdzeni CPU przekłada się na lepszą wydajność.
Poziome skalowanie — wiele proxy
Przy bardzo dużej skali (dziesiątki tysięcy graczy) możesz uruchomić wiele instancji Velocity za load balancerem (np. HAProxy lub AWS ELB). Wymaga to synchronizacji sesji graczy między instancjami — do tego służy Redis.
W takim układzie gracze mogą połączyć się z dowolną instancją proxy, a Redis przechowuje globalny stan sesji. Pluginy takie jak Velocity-Redis-Bungee lub dedykowane rozwiązania obsługują tę synchronizację.
Struktura typowej sieci
Standardowa architektura sieci Minecraft wygląda następująco:
- Warstwa proxy: 1-N instancji Velocity (publiczne IP, port 25565)
- Lobby: 1-N serwerów Paper/Purpur (brak publicznego dostępu)
- Serwery gry: survival, minigry, skywars, etc. (brak publicznego dostępu)
- Baza danych: MySQL/PostgreSQL dla danych graczy, Redis dla cache i synchronizacji
Automatyczne skalowanie serwerów backend
Na dużych sieciach nie wszystkie serwery gry muszą działać cały czas. Możesz używać Pterodactyl API lub własnych skryptów, żeby uruchamiać nowe instancje gdy kolejki są pełne i wyłączać je gdy pusteją. Velocity obsługuje dynamiczne dodawanie i usuwanie serwerów backend bez restartu proxy.
Porady i dobre praktyki
Testuj konfigurację lokalnie
Przed wdrożeniem na produkcję zawsze testuj sieć lokalnie: proxy + minimum dwa serwery backend. Sprawdź przełączanie serwerów, forwarding UUID, czat globalny. Błędy konfiguracji wykryte lokalnie to oszczędność czasu i reputacji.
Monitoring i alerty
Skonfiguruj alert gdy serwer backend przestaje odpowiadać. Velocity nie wyłącza się przy awarii backendu — gracze na tym serwerze zostaną rozłączeni lub przeniesieni (zależnie od konfiguracji Kickredirect), ale proxy działa dalej. Monitoring pozwoli Ci szybko zareagować.
Aktualizacje bez downtime
Velocity wspiera przeładowanie konfiguracji bez restartu komendą /velocity reload. Większość zmian w velocity.toml można zastosować bez rozłączania graczy. Wyjątkiem są zmiany portu bindowania i trybu forwarding — te wymagają pełnego restartu proxy.
Wersje Minecrafta
Velocity obsługuje wiele wersji klienta jednocześnie dzięki pluginom takim jak ViaVersion zainstalowanym na backendach lub bezpośrednio na proxy. Gracz z Minecraft 1.16 może połączyć się z serwerem działającym na 1.21 — ViaVersion automatycznie tłumaczy protokół. To ważne dla dostępności — nie wszyscy gracze aktualizują klienta natychmiast po nowym wydaniu.
Nazewnictwo serwerów
Nazwy serwerów w velocity.toml (np. lobby, survival) to wewnętrzne identyfikatory używane przez pluginy i komendy takie jak /server. Wybierz krótkie, jednoznaczne nazwy bez spacji i polskich znaków. Gracze zobaczyć je mogą przez pluginy zarządzające siecią.
Dokumentuj swoją konfigurację
Sieć serwerów Minecraft to złożony system. Dokumentuj porty, role serwerów, zainstalowane pluginy i ważne decyzje konfiguracyjne. Plik README w katalogu proxy zaoszczędzi Ci wielu godzin debugowania po dłuższej przerwie od administrowania.
Zanim zaczniesz: Przeczytaj nasz poradnik o stawianiu serwera jeśli dopiero zaczynasz przygodę z administracją. Velocity to narzędzie dla sieci wielu serwerów — najpierw postaw i skonfiguruj jeden działający serwer, a dopiero potem myśl o proxy.