Velocity to proxy, dzięki któremu gracze łączą się z jednym adresem, a potem przechodzą między serwerami poleceniem /server – na przykład z lobby na survival albo na minigry. Pokażemy, jak zainstalować i skonfigurować Velocity, połączyć je z serwerami bezpiecznym modern forwardingiem i zabezpieczyć serwery za proxy tak, aby nikt nie dostał się na nie bezpośrednio.
Czego potrzebujesz
- Co najmniej dwa serwery Minecraft: Paper lub Purpur (wersja 1.13 lub nowsza) albo Fabric, Forge lub NeoForge z modem do forwardingu
- Miejsce na uruchomienie proxy: VPS z Ubuntu 24.04 lub Debianem 13 (połączenie przez SSH); osobny produkt Minecraft Proxy przygotowujemy
- Dostęp do zakładek Pliki i Ustawienia serwera każdego serwera
- Około 40 minut
Kiedy potrzebujesz proxy#
| Chcesz | Potrzebujesz proxy? |
|---|---|
| Jeden serwer dla znajomych lub społeczności | Nie |
| Lobby + jeden lub więcej serwerów gry pod jednym adresem | Tak |
| Różne tryby gry (survival, kreatywny, minigry) z przełączaniem bez rozłączania | Tak |
| Wspólny czat, uprawnienia lub bany na wszystkich serwerach | Tak (z pluginami na proxy) |
| Gracze Bedrocka w całej sieci | Tak, Geyser działa wtedy tylko na proxy |
Proxy samo nie uruchamia gry, tylko przekazuje połączenia. Jest oszczędne: na dziesiątki graczy wystarczy 1–2 GB pamięci.
Jak działa sieć#
Gracz ──► mc.example.cz:25565 (Velocity, weryfikuje konto gracza)
│
├──► lobby (Paper, online-mode=false, przyjmuje tylko proxy)
├──► survival (Paper, online-mode=false, przyjmuje tylko proxy)
└──► minihry (Paper, online-mode=false, przyjmuje tylko proxy)- Gracz łączy się z adresem proxy. Proxy sprawdza w Microsofcie, czy ma oryginalne konto (
online-mode = true). - Proxy wysyła go na pierwszy serwer z listy
try(lobby). - Razem z połączeniem proxy przekazuje serwerowi nick gracza, UUID, skin i prawdziwy adres IP (player info forwarding). Dane podpisuje tajnym kluczem, który zna tylko proxy i Twoje serwery.
- Serwery za proxy (backendy) same niczego nie weryfikują (
online-mode=false) i ufają tylko proxy z ważnym kluczem. Kto połączy się bezpośrednio, dostanie komunikatThis server requires you to connect with Velocity.
Proxy, serwery i domena#
- Proxy: Velocity 4.x wymaga Javy 25. Uruchom je na VPS (VPS Performance, VPS Budget). Na proxy należą tylko pluginy dla Velocity – pluginy dla Papera na nim nie działają.
- Backendy: zwykłe serwery Minecraft. Mogą działać w StormHost jako osobne usługi (każda z własnym adresem i portem) albo na tym samym VPS co proxy.
- Domena (opcjonalnie): gracze wpisują
mc.example.czzamiast IP (Adres serwera i domena).
Produkt Minecraft Proxy
Przygotowujemy samodzielne proxy jako usługę. W zakładce Uruchamianie będzie miało preset parametrów Proxy dla Velocity. Do tego czasu użyj VPS – kroki są poniżej.
Instalacja Velocity na VPS#
Działa tak samo na Ubuntu 24.04 i na Debianie 13. Polecenia uruchamiaj jako root.
Zainstaluj Javę 25 i
curl:bash apt update apt install openjdk-25-jre-headless curlapt update– pobiera aktualną listę pakietów.apt install openjdk-25-jre-headless– instaluje środowisko uruchomieniowe Javy 25 bez bibliotek graficznych (serwer ich nie potrzebuje).curl– program do pobierania plików z internetu (jeśli już go masz, nic się nie stanie).
Sprawdź wersję:
bash java -versionPierwsza linia wyniku musi zawierać
25.Utwórz użytkownika i folder dla proxy:
bash useradd --system --create-home --home-dir /opt/velocity --shell /usr/sbin/nologin velocityuseradd --system– tworzy użytkownika systemowego bez hasła (proxy nie będzie działać jako root).--create-home --home-dir /opt/velocity– tworzy folder/opt/velocity, w którym będzie proxy.--shell /usr/sbin/nologin– nikt nie może zalogować się jako ten użytkownik.velocity– nazwa użytkownika.
Na papermc.io/downloads/velocity (otwiera się w nowym oknie) skopiuj link do najnowszej stabilnej wersji i pobierz ją:
bash cd /opt/velocity curl -o velocity.jar "<DOWNLOAD_URL>" chown velocity:velocity velocity.jarcd /opt/velocity– przechodzi do folderu proxy.curl -o velocity.jar– pobiera plik i zapisuje go jakovelocity.jar.<DOWNLOAD_URL>– link skopiowany ze strony. Zastąp całość łącznie z nawiasami ostrymi, cudzysłowy zostaw.chown velocity:velocity– ustawia użytkownikavelocityjako właściciela pliku.
Uruchom proxy po raz pierwszy, aby utworzyło konfigurację:
bash runuser -u velocity -- env MALLOC_ARENA_MAX=2 java -Xms1G -Xmx1G -XX:MaxDirectMemorySize=512M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -jar velocity.jarrunuser -u velocity --– uruchamia polecenie za--jako użytkownikvelocity.env MALLOC_ARENA_MAX=2– ogranicza areny pamięci alokatora, aby proxy nie zużywało niepotrzebnie dodatkowej pamięci.-Xms1G -Xmx1G– daje proxy 1 GB sterty (od razu całość, aby nie musiało jej powiększać w trakcie działania). Dla większej sieci zwiększ do2G. Proxy potrzebuje dużo pamięci także poza stertą na sieć, więc nie dawaj mu więcej niż połowę pamięci, którą masz dla niego przeznaczoną.-XX:– limit dla buforów sieciowych. Bez niego mogą urosnąć do rozmiaru sterty.MaxDirectMemorySize= 512M -XX:+UseG1GC … -XX:+AlwaysPreTouch– parametry zalecane przez dokumentację Velocity (garbage collector G1 dostrojony dla proxy).-jar velocity.jar– uruchamia proxy.
Generator skryptu startowego przygotuje polecenie dla innego rozmiaru pamięci.
Po starcie zobaczysz linię
Done (…)!. Wpiszendi naciśnij Enter, a proxy się wyłączy. W folderze są terazvelocity.tomliforwarding.secret.Aby proxy działało stale i samo uruchamiało się po restarcie VPS, utwórz dla niego usługę systemd według poradnika Aplikacja 24/7 na VPS. W pliku unit ustaw
User=velocity,WorkingDirectory=,/opt/ velocity Environment=, a wMALLOC_ ARENA_ MAX=2 ExecStartwpisz polecenie z kroku 5 bezrunuser -u velocity -- env MALLOC_ARENA_MAX=2i z pełną ścieżką do Javy, czyli zaczynające się od/usr/bin/java -Xms1G ….Zezwól na port proxy w zaporze VPS: TCP
25565(i port UDP Geysera, jeśli będziesz go używać). Zobacz Zapora w strefie klienta i UFW.
velocity.toml#
Otwórz /opt/ (na przykład nano /opt/). Oto przykład z ustawieniami dla sieci trzech serwerów (resztę pliku zostaw bez zmian):
bind = "0.0.0.0:25565"
motd = "<gold><bold>StormCraft</bold></gold> <gray>| lobby, survival, minihry"
show-max-players = 100
online-mode = true
force-key-authentication = true
player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"
[servers]
lobby = "203.0.113.10:30066"
survival = "203.0.113.11:30067"
minihry = "203.0.113.12:30068"
try = [
"lobby"
]
[forced-hosts]
"survival.example.cz" = [
"survival"
]| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
config-version | Wersja formatu pliku. | Nie zmieniaj | Nigdy – Velocity zarządza nią samo. |
bind | Adres IP i port, na którym proxy nasłuchuje. | "0.0.0.0:25565" | Inny port, jeśli nie chcesz lub nie możesz użyć 25565. |
motd | Opis na liście serwerów. Format MiniMessage (<gold>, <bold>, <#09add3>), a nie kody §. | Twój opis | W dowolnym momencie. |
show-max-players | Ile slotów pokazuje lista serwerów. Velocity nie ogranicza liczby graczy; to tylko wartość wyświetlana. | Np. 100 | Według wielkości sieci. |
online-mode | Proxy weryfikuje konta graczy w Microsofcie. | true | Nigdy na publicznym serwerze. |
force-key-authentication | Wymaga od graczy klucza do podpisywania czatu. | true | false, gdy na proxy działa Geyser (inaczej gracze Bedrocka nie mogą pisać). |
prevent-client-proxy-connections | Wyrzuca gracza, którego dostawca internetu nie zgadza się z tym, co widzi serwer uwierzytelniania. Słaba ochrona przed VPN. | false | Zostaw. |
player-info-forwarding-mode | Jak proxy przekazuje dane gracza: none (nic, gracze dostaną offline UUID), legacy (format BungeeCord, niebezpieczny), bungeeguard (legacy z kluczem), modern (podpisany format Velocity, wersja 1.13+). | "modern" | legacy/bungeeguard tylko dla serwerów na 1.12 i starszych. |
forwarding-secret-file | Plik z tajnym kluczem forwardingu. | "forwarding.secret" | Nie zmieniaj. |
announce-forge | Proxy przedstawia się na liście serwerów jako serwer Forge. | false | true dla sieci serwerów z modami. |
kick-existing-players | Gdy to samo konto zaloguje się drugi raz, pierwsza sesja zostanie wyrzucona (zachowanie Vanilli). | false | true, jeśli Twoi gracze tego oczekują. |
[servers] | Lista backendów w postaci nazwa = "IP:port". Nazwę gracze widzą w /server. | Adresy Twoich serwerów | Gdy dodajesz lub przenosisz serwer. |
try | Kolejność serwerów, na które proxy próbuje wysłać graczy po połączeniu lub wyrzuceniu z serwera. | ["lobby"] | Dodaj serwer zapasowy, na który gracze trafią, gdy lobby nie działa. |
[forced-hosts] | Wysyła graczy od razu na konkretny serwer według wpisanego adresu (kto wpisze survival.example.cz, trafi bezpośrednio na serwer survival). | W razie potrzeby | Gdy chcesz dla każdego serwera osobną subdomenę. Domena musi wskazywać na proxy. |
W sekcjach [advanced] i [query] warto zwrócić uwagę na trzy pozycje:
| Sekcja i ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
[advanced] › login-ratelimit | Minimalny odstęp (ms) między połączeniami z jednego IP. | 3000 | Nie zmieniaj; chroni przed zalewaniem. |
[advanced] › failover-on-unexpected-server-disconnect | Gdy backend padnie, wysyła graczy na inny serwer zamiast ich rozłączać. | true | Zostaw. |
[query] › enabled | Odpowiada na zapytania Query (GameSpy4). | false | Gdy potrzebuje tego strona ze statystykami. |
Velocity 3 i 4
W wersji 4 zamiast linii ping-passthrough = "DISABLED" jest osobna sekcja [ping-passthrough] z przełącznikami version, players, description, favicon i modinfo. Decydują, co proxy przejmuje z backendu na listę serwerów. Domyślnie wszystko jest wyłączone i obowiązuje motd z velocity.toml.
Tajny klucz forwardingu#
Przy pierwszym starcie Velocity tworzy plik forwarding.secret z losowym 12-znakowym kluczem. Zalecamy zastąpić go dłuższym:
- W generatorze haseł wygeneruj losowe hasło o długości co najmniej 32 znaków (litery i cyfry).
- Wpisz je jako jedyną linię do
/opt/(na przykład przezvelocity/ forwarding. secret nano). - Ten sam klucz wpiszesz potem na wszystkich backendach.
Klucz jest jak hasło administratora
Kto zna forwarding.secret i adres backendu, może połączyć się z nim jako dowolny gracz, także jako Ty. Nikomu go nie wysyłaj, nie umieszczaj w publicznych repozytoriach, a przy podejrzeniu wycieku wymień go na proxy i na wszystkich backendach.
Konfiguracja backendów (Paper i Purpur)#
Na każdym serwerze za proxy:
W zakładce Ustawienia serwera w grupie Gracze wyłącz Weryfikacja kont (online-mode) (
online-mode=false) i kliknij Zapisz.Strefa klienta pokaże ostrzeżenie, że dołączyć może każdy. Za proxy z modern forwardingiem to prawidłowe – weryfikację robi proxy, a serwer przyjmuje tylko graczy z ważnym kluczem.
W zakładce Pliki otwórz
spigot.ymli sprawdź, czysettings.bungeecordma wartośćfalse:spigot.ymlYAML settings: bungeecord: falsebungeecord– włącza forwarding w formacie BungeeCord (legacy). Przy modern forwardingu musi być wyłączony.
Otwórz
config/paper-global.ymli w sekcjiproxiesustaw:config/ paper-global.yml YAMLproxies: velocity: enabled: true online-mode: true secret: "<SECRET>"Zamiast
<SECRET>wpisz zawartość plikuforwarding.secretz proxy. Zastąp całość łącznie z nawiasami ostrymi, cudzysłowy zostaw.Uruchom serwer ponownie.
Co oznaczają ustawienia w paper-global.yml:
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
proxies.velocity.enabled | Serwer przyjmuje modern forwarding od Velocity i odrzuca bezpośrednie połączenia. | true | Tylko przy usuwaniu proxy. |
proxies. | Musi zgadzać się z online-mode w velocity.toml. Decyduje, jakie UUID dostaną gracze. | true | Nigdy, jeśli proxy weryfikuje graczy. |
proxies.velocity.secret | Ten sam klucz co w forwarding.secret na proxy. | Zawartość forwarding.secret | Gdy wymieniasz klucz. |
Na Paperze 1.18.2 i starszym te ustawienia są w paper.yml pod nazwami settings., settings. i settings..
Fabric, Forge i NeoForge#
| Loader | Co zainstalować | Gdzie wpisać klucz |
|---|---|---|
| Fabric | Mod FabricProxy-Lite (z Modrinth, wymaga Fabric API) | config/, wpis secret = "<SECRET>" |
| Forge, NeoForge | Mod ProxyCompatibleForge | Plik konfiguracyjny moda w folderze config (według strony moda na Modrinth) |
Ustawienia FabricProxy-Lite:
| Ustawienie | Co robi | Zalecana wartość | Kiedy zmieniać |
|---|---|---|---|
secret | Klucz z forwarding.secret. | Zawartość forwarding.secret | Gdy wymieniasz klucz. |
hackOnlineMode | Pozwala na połączenia przez proxy nawet przy włączonym online-mode na backendzie. | true (domyślnie) | Zostaw. |
hackEarlySend | Wysyła dane gracza wcześniej. Wymaga tego LuckPerms, a także niektóre inne mody. | true, jeśli używasz LuckPerms | Inaczej domyślne false. |
hackMessageChain | Naprawia wyrzucanie graczy z komunikatem o nieprawidłowym podpisie czatu po przejściu między serwerami. | false | true, gdy gracze po /server są wyrzucani z powodu podpisu czatu. |
Zabezpieczenie backendów#
Backend z online-mode=false bez działającego forwardingu wpuściłby każdego pod dowolnym nickiem. Zależnie od tego, gdzie działają Twoje serwery:
- Backendy w StormHost (osobne usługi): adres i port ustawiamy automatycznie (
server-ipnie da się zmienić), więc serwery są osiągalne z internetu. Chroni je właśnie modern forwarding: przyproxies.serwer odrzuci każdego, kto nie przyjdzie przez proxy z ważnym kluczem. Nigdy więc nie używajvelocity. enabled: true legacyaninone. - Backendy na tym samym VPS co proxy: w
server.propertieskażdego backendu ustawserver-ip=127.0.0.1, a wvelocity.tomlużyj adresów127.0.0.1:<PORT>. Serwery nie będą wtedy w ogóle osiągalne z zewnątrz. W zaporze VPS zezwól tylko na port proxy. - Backendy na innym VPS: w zaporze backendu zezwól na port serwera tylko z adresu IP proxy (Zapora w strefie klienta).
Przełączanie serwerów i pluginy na proxy#
| Polecenie | Co robi | Uprawnienie |
|---|---|---|
/server | Pokazuje, na którym serwerze jesteś, i proponuje pozostałe. | velocity.command.server (domyślnie mają je wszyscy) |
/server survival | Przełącza na serwer survival. | To samo |
/glist | Liczba graczy na proxy; z all podział według serwerów. | velocity.command.glist (domyślnie nikt) |
/send <NICK> <SERVER> | Przenosi gracza na inny serwer. | velocity.command.send |
velocity reload | Wczytuje ponownie velocity.toml (w konsoli proxy). | velocity.command.reload |
shutdown | Wyłącza proxy (tylko konsola). | – |
Pluginy na proxy (w folderze /opt/velocity/plugins, wersje dla Velocity):
- LuckPerms – uprawnienia do poleceń proxy. Do uprawnień na serwerach LuckPerms musi być także na każdym backendzie, a wszystkie instancje muszą używać tej samej bazy MySQL/MariaDB (MySQL dla pluginów). Na każdym backendzie ustaw w konfiguracji LuckPerms inny
server(na przykładlobby,survival), aby móc nadawać uprawnienia per serwer, orazmessaging-service: sql, aby zmiany działały od razu na wszystkich serwerach. Szczegóły w poradniku LuckPerms. - Geyser i Floodgate – gracze Bedrocka; instaluj je tylko na proxy (poradnik).
- spark – profilowanie proxy, polecenie
sparkv.
Sprawdzenie, czy działa#
- Uruchom proxy i backendy. Konsola proxy pokaże
Listening on …:25565iDone (…)!. - Połącz się w grze z adresem proxy. Trafisz na serwer
lobby. - Wpisz
/server survival– przełączy Cię bez rozłączania. - W konsoli backendu sprawdź linię z Twoim połączeniem: musi zawierać Twój prawdziwy adres IP, a nie adres proxy. Wtedy forwarding działa. W domyślnym Trybie streamera konsola strefy klienta ukrywa adresy IP – do tego sprawdzenia kliknij u góry Pokaż szczegóły.
- Spróbuj połączyć się bezpośrednio z adresem backendu. Musisz dostać
This server requires you to connect with Velocity.
Rozwiązywanie problemów#
Your server did not send a forwarding request to the proxy. Make sure the server is configured for Velocity forwarding.#
Backend nie ma włączonego modern forwardingu. Sprawdź proxies. w config/paper-global.yml (na Fabricu FabricProxy-Lite) i czy po zmianie uruchomiłeś serwer ponownie.
Unable to verify player details#
Klucz na backendzie nie zgadza się z forwarding.secret na proxy. Skopiuj go ponownie (bez zbędnych spacji i pustych linii) i uruchom backend ponownie.
This server requires you to connect with Velocity.#
Łączysz się bezpośrednio z backendem – tak ma być, serwer jest chroniony. Jeśli widzisz ten komunikat także przy łączeniu przez proxy, proxy ma player-info-forwarding-mode ustawione na coś innego niż modern.
Unable to connect you to lobby. Please try again later.#
Proxy nie dotarło do backendu: serwer nie działa, adres lub port w [servers] nie zgadza się z adresem w zakładce Sieć tego serwera albo połączenie blokuje zapora.
There are no available servers to connect you to. Try again later or contact an admin.#
Żaden z serwerów z listy try nie jest dostępny. Uruchom lobby albo dodaj do try serwer zapasowy.
Gracze mają po przejściu na proxy pusty ekwipunek i inne uprawnienia#
Gracze dostali inne UUID. Przyczyną jest player-info-forwarding-mode = "none" (offline UUID) albo niezgodność online-mode na proxy i proxies. na backendzie. Ustaw modern forwarding i obie wartości na true. Dane pod starymi UUID zostają w świecie i plikach pluginów; przed przeniesieniem dużej sieci na proxy zrób kopię zapasową.
Proxy nie wpuszcza graczy Bedrocka albo nie mogą pisać#
Zobacz Crossplay z Bedrockiem: Geyser musi być na proxy, a force-key-authentication w velocity.toml musi być wyłączone.
Podsumowanie
- Gracze łączą się tylko z proxy; proxy weryfikuje konta (
online-mode = true), a backendy mająonline-mode=false. - Zawsze używaj
player-info-forwarding-mode = "modern", a na backendachproxies.z tym samym kluczem zvelocity. enabled: true forwarding.secret. forwarding.secretjest tajny; zastąp go długim losowym kluczem.- Velocity 4 wymaga Javy 25, a pluginy na proxy muszą być przeznaczone dla Velocity.
- Sprawdź, czy bezpośrednie połączenie z backendem kończy się komunikatem
This server requires you to connect with Velocity.
Dalsza lektura#
- Velocity: pierwsze kroki (otwiera się w nowym oknie)
- Velocity: przekazywanie informacji o graczach (otwiera się w nowym oknie)
- Velocity: konfiguracja (otwiera się w nowym oknie)
- Velocity: zabezpieczenie serwerów (otwiera się w nowym oknie)
- Paper: konfiguracja globalna (otwiera się w nowym oknie)
- LuckPerms: instalacja w sieci serwerów (otwiera się w nowym oknie)