RE:NODE

Síť15 min čtení

Porty herních serverů: query, RCON a firewall

Všechny porty, které herní server používá, k čemu je query port, proč běžící server nejde najít v prohlížeči serverů a jak otestovat port zvenčí.

Aktualizováno

4 čtenáři

Většina her potřebuje víc než jeden port a ten druhý bývá ten, na který nikdo nemyslí - až do chvíle, kdy server běží dokonale a nikomu se nezobrazí v prohlížeči serverů. Herní server obvykle otevírá herní port, ke kterému se hráči připojují, query port, který prohlížeč serverů dotazuje na název a počet hráčů, a někdy třetí port pro vzdálenou správu. Jsou to samostatná čísla, často na různých protokolech, a každé selhává po svém. Tento článek uvádí skutečná čísla pro hry, které lidé opravdu hostují, vysvětluje, které musí být otevřené, a dává ti příkazy, kterými to zvenčí dokážeš.

Tři druhy portů#

Téměř každý dedikovaný server, který kdy budeš provozovat, používá porty ze tří kategorií a pomáhá si je držet od sebe.

  • Herní port. Ten, na který se klient připojí, když hráč zadá adresu. Je vždy přidělený, vždy zveřejněný a když je zavřený, nikdo se nedostane dovnitř. Je to číslo, které patří do připojovacího řetězce nebo SRV záznamu.
  • Query port. Ten, na který se prohlížeče serverů, listingové weby a monitorovací boty ptají na název hostitele, mapu, počet hráčů a sloty. Odpovídá na maličký dotaz maličkou odpovědí a s hraním nemá nic společného. Když je zavřený, server funguje dokonale a je neviditelný.
  • Administrativní porty. RCON, SourceTV nebo GOTV, webový admin panel, telnetová konzole, REST API. Každý z nich je volitelný, každý je cestou do tvého serveru a žádný by neměl být otevřený světu bez dobrého důvodu.

Query port existuje proto, že herní protokol je náročný. Prohlížeč serverů s dvěma tisíci servery si nemůže dovolit zahájit s každým skutečnou herní relaci jen proto, aby přečetl počet hráčů. Server tedy mluví i levným bezstavovým vedlejším protokolem - dotazovacím protokolem Steam A2S u většiny her Source a her zapsaných ve Steamu, vlastním query a server-list-ping v Minecraftu, vlastním HTTP endpointem hry u FiveM. Jeden UDP paket dovnitř, jeden ven, žádný handshake.

Někdy oba žijí na stejném čísle. Counter-Strike 2, Team Fortress 2 a Garry's Mod odpovídají na herní provoz i dotazy A2S na 27015/udp, a proto tyto hry tak zřídka mají problém neviditelného serveru. Někdy jsou vedle sebe: Valheim používá 2456 a 2457 a query port je vždy herní port plus jedna. Někdy jsou to nesouvisející čísla v různých rozsazích: Palworld běží na 8211/udp a query na 27015/udp. A občas jsou obráceně, než bys hádal - nastavení Port v Unturned je query port a hra běží na Port + 1.

Porty podle her#

Jsou to výchozí hodnoty. Téměř všechny jsou konfigurovatelné a v panelu je přidělené číslo vidět na stránce serveru - při psaní připojovacího řetězce ho kopíruj odtamtud, ne z této tabulky.

HraHerní portQuery portDalší
Minecraft (Java)25565 TCP25565 UDP (volitelné)25575 TCP RCON
Minecraft (Bedrock / Geyser)19132 UDPstejný port-
Counter-Strike 227015 UDP27015 UDP27015 TCP RCON, 27020 UDP GOTV
Counter-Strike 1.627015 UDP27015 UDPRCON přes UDP na 27015, 27020 HLTV
Team Fortress 227015 UDP27015 UDP27015 TCP RCON, 27020 UDP SourceTV
Garry's Mod27015 UDP27015 UDP27015 TCP RCON, 27020 UDP SourceTV
Left 4 Dead 227015 UDP27015 UDP27015 TCP RCON
Valheim2456 UDP2457 UDP-
Palworld8211 UDP27015 UDP25575 TCP RCON, 8212 TCP REST
Project Zomboid16261 UDP16261 UDP16262 UDP druhý kanál, 27015 TCP RCON
7 Days to Die26900 TCP a UDP2690026901-26902 UDP, 8081 telnet, 8080 web
Rust28015 UDP28015 UDP28016 TCP RCON, 28082 TCP Rust+
ARK: Survival Ascended7777 UDP27015 UDP27020 TCP RCON
Satisfactory7777 UDP7777 TCP API-
Terraria7777 TCP7777 TCP-
Factorio34197 UDP34197 UDPRCON na portu, který si zvolíš
Unturned27016 UDP (Port + 1)27015 UDP (Port)-
FiveM30120 UDP30120 TCP HTTP40120 TCP txAdmin
Arma 32302 UDP2303 UDP2304 Steam master, 2306 BattlEye
DayZ2302 UDP2305 UDP2303-2304 rezervované vedle herního portu
Don't Starve Together10999 UDP master-10998 jeskyně, 27018-27019, 8768-8769
Insurgency: Sandstorm27102 UDP27131 UDP-
Killing Floor 27777 UDP27015 UDP20560 UDP Steam, 8080 TCP webový admin
SCP: Secret Laboratory7777 UDP7777 UDP-
The Isle (Evrima)7777 UDP27015 UDP8888 TCP RCON, 10000 TCP fronta pro připojení
Sons of the Forest8766 UDP27016 UDP9700 UDP BlobSync
The Forest27015 UDP27016 UDP8766 UDP Steam
Squad7787-7788 UDP27165-27166 UDP15000 UDP beacon, 21114 TCP RCON
Abiotic Factor7777 UDP27015 UDP-
RimWorld (multiplayerový mod)25555 TCP--
BeamMP30814 TCP a UDP30814 TCP-
Euro Truck Simulator 227015 UDP27016 UDP-
Assetto Corsa9600 TCP a UDP8081 TCP HTTP-

Dva vzorce v té tabulce stojí za pojmenování. Za prvé, blok 27015-27020 patří Steamu a spousta her ho znovu používá pro query bez ohledu na herní port - a právě proto znamená provoz dvou Steam her na jednom stroji, že jednu z nich musíš přesunout. Za druhé, překvapivě mnoho survival her chce malý souvislý blok místo jednoho čísla, protože engine obsadí tebou zadaný port plus jeden nebo dva nad ním. Arma 3 a DayZ rezervují pět; 7 Days to Die chce tři; Squad dva páry. Tarif, který přidělí jeden port, tyto hry spustit nemůže, a proto je počet portů na stránce každého tarifu a ne zahrabaný ve specifikaci.

Hry, které v tabulce nejsou, nejsou záhada, jen méně běžné. Server vypíše, na co se navázal, v prvních dvaceti řádcích logu, a ten řádek je autoritativnější než jakákoli dokumentace, včetně této.

TCP, UDP a pravidlo firewallu, které nic nedělá#

Nejběžnější chyba ve firewallu je otevřít správné číslo na špatném protokolu. Vznikne server, který běží, naslouchá, je správně nakonfigurovaný a naprosto nedostupný, a hráč vidí obecný timeout.

Většina her používá pro hraní UDP. Hra nechce opakované odesílání: aktualizace pozice stará 200 ms je k ničemu a TCP by trvalo na jejím doručení dřív než doručení čerstvé. Hry proto posílají datagramy „vystřel a zapomeň“ a řazení i ztráty řeší samy. Minecraft Java je slavná výjimka - je to TCP, protože jde o protokol, kde se střídají tahy a záleží na každém paketu. Terraria je TCP. Multiplayerový mod RimWorldu je TCP. Všechno ostatní v tabulce výše je UDP pro část, která nese hráče, a query protokoly jsou také téměř vždy UDP.

Praktické důsledky:

  • Pravidlo, které povolí tcp/2456 pro Valheim, nedělá vůbec nic. Oba porty Valheimu jsou UDP.
  • Pravidlo pro udp/25565 u Minecraftu Java povolí query protokol, ne hru. Hráči se stále nepřipojí.
  • Některé hry potřebují obojí na stejném čísle. BeamMP používá TCP pro navázání spojení a přenos modů a UDP pro stav vozidel. Satisfactory používá UDP pro hru a TCP pro správcovské API na stejném 7777. Otevři oba.
  • „Povolit jakýkoli protokol“ na domácím routeru obvykle znamená TCP a UDP, ale ne vždy. Zkontroluj to.

To, že UDP je bezspojové, mění i to, jak vypadá „zavřený“ port. Zavřený TCP port odmítne okamžitě a dostaneš rychlou a jasnou chybu. Zavřený nebo filtrovaný UDP port obvykle nevyvolá nic a klient jen čeká a pak to vzdá. Proto se problémy s UDP diagnostikují pomaleji a vágněji než u TCP a proto skener portů hlásí UDP porty jako open|filtered - bez odpovědi opravdu nedokáže rozlišit. TCP vs UDP pro herní servery jde hlouběji do toho, co to znamená pro proxy a filtrování. Pokud si pravidla píšeš sám, firewallová pravidla, na kterých záleží popisují tvar default-deny, který zanechá nejmenší útočnou plochu.

Proč se běžící server nezobrazuje v prohlížeči#

Tři zcela odlišné příčiny vypadají zvenčí stejně: server běží, konzole vypadá zdravě a žádný prohlížeč ho nevypisuje.

Query port není dostupný. Buď nebyl nikdy přidělen, nebo pravidlo firewallu pokrývá jen herní port, nebo je hra nastavena odpovídat na dotazy na portu, na který nic nepřeposílá. Ověř to přímým připojením přes IP a port. Pokud přímé připojení funguje a výpis ne, našel jsi to.

Hra chce přihlašovací token, který jsi nedodal. Counter-Strike 2, Team Fortress 2, Garry's Mod, Unturned, Insurgency: Sandstorm a Euro Truck Simulator 2 chtějí token pro přihlášení herního serveru ke Steamu - GSLT, zdarma od Valve, vydávaný na server osobě s licencí hry. Bez něj některé z nich běží anonymně s omezeným výpisem a některé se nevypisují vůbec. Nikdo ho nemůže vytvořit za tebe: náhodný řetězec, který projde validací pole, Steam odmítne, čímž se jasné selhání změní na server, který se spustí a nikdy není vidět. Tam, kde hra bez tokenu nepoběží, rozumný hostitel instalaci zadrží, dokud token nedodáš, místo aby ti předal rozbitý server. Tokeny herních serverů Steamu popisují jejich vytvoření i to, co znamená ban proti tokenu.

Hra se vypisuje přes vlastní službu, ne přes Steam. FiveM se registruje u Cfx.re přes svůj HTTP endpoint na 30120/tcp. Minecraft nemá žádný centrální seznam - obrazovka multiplayeru pinguje adresy, které hráči zadali. BeamMP se registruje u backendu BeamMP pomocí tvého auth klíče. V každém případě je třeba zkontrolovat odchozí dostupnost a klíč, ne příchozí query port.

Existuje i čtvrtá, nudnější příčina, která stojí hodiny času: seznam je prostě pomalý. Komunitní prohlížeč Valheimu může nový server ukázat až po deseti minutách a jeho filtr ve hře je slabý. Než začneš přestavovat firewall, vyhledej neobvyklé slovo z názvu serveru a dopřej tomu trpělivost na jednu kávu.

Testování portu zvenčí#

Testování ze samotného serveru nic nedokazuje. Loopback rozhraní je vždy otevřené; kontroluješ jedinou cestu, kterou nepůjde žádný hráč. Každý test níže se spouští z jiného počítače, ideálně z jiné sítě.

bash
# TCP: does something accept a connection?$ nc -vz node.example.com 25565Connection to node.example.com 25565 port [tcp/*] succeeded!# UDP with a real Steam query, which is the only honest UDP test$ nmap -sU -p 27015 -sV --script=discovery node.example.com# What is the server actually listening on, run on the server$ ss -lntup | grep -E '2456|2457'

Na Windows provede případ TCP v PowerShellu Test-NetConnection node.example.com -Port 25565. Pro UDP žádný ekvivalentní jednořádkový příkaz není, protože správný test UDP znamená mluvit protokolem samotné hry a vidět odpověď - což přesně dělají veřejné weby se stavem serverů. Kontroly A2S pro hry ze Steamu a weby se stavem Minecraftu pro servery Java jsou nejrychlejší poctivá odpověď, jakou na UDP port dostaneš.

ss -lntup je příkaz, který rozhodne spory. Vypíše, co je navázáno, na jakém protokolu, na jaké adrese a kterým procesem. Ve výstupu záleží na dvou věcech. Pokud sloupec s adresou ukazuje 127.0.0.1:27015 místo 0.0.0.0:27015 nebo *:27015, server je navázán jen na loopback a žádná změna firewallu na světě nepomůže - oprav bind adresu v konfiguraci hry. A pokud proces není ten, který jsi čekal, dva servery se perou o jeden port, což poražený hlásí jako „address already in use“ někde v logu, který jsi ještě nečetl.

Změna nebo přidání portu#

Změna portu jsou dvě úpravy, které se musí shodovat, a když se neshodují, skončíš se serverem naslouchajícím na portu, který firewall nepovoluje, nebo s firewallem povolujícím port, na kterém nic neposlouchá.

  1. Přiděl port. V panelu je to záložka Network; na vlastním stroji je to pravidlo firewallu a doma port forward.
  2. Nastav proměnnou portu samotné hry na stejné číslo. V panelu je na záložce Startup, jinak v konfiguračním souboru nebo spouštěcích argumentech. Je to -port u Valheimu, server-port v server.properties u Minecraftu, Port v ServerConfig.toml u BeamMP, -Port= u několika her na Unrealu.
  3. Restartuj a přečti prvních dvacet řádků konzole. Server vypíše, na co se navázal. Pokud vypíše staré číslo, upravil jsi špatný soubor, nebo hra při vypnutí přepsala tvoji konfiguraci - několik z nich to dělá.
  4. Než to někomu řekneš, otestuj zvenčí.

Na RE:NODE každý tarif uvádí své přidělení a porty se přidávají a odebírají na záložce Network, přičemž query a RCON se počítají do celku. Na záložce Startup v panelu jsou herní proměnné, takže obě poloviny změny jsou od sebe dvě záložky daleko a konzole výsledek ukáže okamžitě - čtení konzole stojí za prolistování, pokud ti výstup při startu nic neříká. Změna tarifu server nepřestavuje, takže přechod na stupeň s více porty zachová svět i konfiguraci, které už máš.

Pokud bys chtěl, aby hráči port vůbec nemuseli psát, je to práce pro DNS, ne pro síť. Obyčejný záznam A jim dá jméno a stejný port; záznam SRV dokáže u Minecraftu Java nestandardní port úplně skrýt. Připojení domény k hernímu serveru je jednoduchá verze a SRV záznamy pro Minecraft je ta, která číslo skryje.

RCON a porty, které bys neměl vystavovat#

RCON je vzdálená konzole: ověříš se heslem a pak posíláš příkazy, jako bys seděl u serveru. Je opravdu užitečný pro propojení s Discordem, stavové boty a plánované úlohy. Je také, ve většině implementací, protokolem v čistém textu s jedním sdíleným heslem a bez omezení počtu pokusů, což z vystaveného portu RCON dělá jeden z lepších způsobů, jak o server přijít.

Co stojí za to vědět, než ho zapneš:

  • Source RCON je TCP na čísle herního portu, zapíná se pomocí -usercon a rcon_password. Protože sdílí číslo s herním UDP provozem, lidé otevřou tcp/27015, aniž si uvědomí, že tím vystavili konzoli.
  • GoldSrc - Counter-Strike 1.6 a jeho příbuzní - provozuje RCON přes UDP na herním portu, takže ho nelze oddělit od hraní ve firewallu vůbec. Heslo je jediná ochrana, jaká existuje.
  • Minecraft RCON je 25575/tcp a vypnutý, dokud není enable-rcon=true. Rust ho zpřístupňuje jako websocket na 28016/tcp. Palworld má RCON na 25575/tcp i REST API na 8212/tcp, každé s vlastním heslem.
  • Webové admin panely - Killing Floor 2 na 8080, dashboard 7 Days to Die na 8080 a telnet na 8081 - jsou HTTP, ve výchozím stavu nešifrované a často chráněné heslem, které leží v konfiguračním souboru v čistém textu.

Pravidlo, které tě udrží z průšvihu, je jednoduché: světu vystav herní port a query port a nic dalšího. Pokud potřebuješ RCON zvenčí, omez pravidlo na adresy, ze kterých administruješ, použij heslo, které není tvým admin heslem, a změň ho pokaždé, když někdo opustí tým správců. RCON bezpečně má delší verzi a co dělat, když je váš server napadený je článek, který chceš mít přečtený dopředu, ne až potom.

Port forwarding doma, NAT a CGNAT#

Hostování z vlastního připojení porty spíš ztěžuje než usnadňuje, protože mezi internetem a tvým strojem je překladová vrstva. Router má jednu veřejnou adresu, server soukromou a forward routeru říká, že provoz přicházející na daný port patří danému internímu stroji.

V praxi to rozbijí tři věci:

  • Interní adresa se změní. Server dostane od DHCP nový pronájem, forward stále míří na starou adresu a všechno přestane fungovat. Než cokoli přesměruješ, dej stroji DHCP rezervaci nebo statickou lokální adresu.
  • Veřejná adresa se změní. Většina domácích připojení dostává dynamickou adresu, která se při opětovném připojení mění. Dynamický DNS záznam to zamaskuje, za cenu zpoždění propagace při každé změně. Statické IP adresy: kdy ji potřebuješ rozebírá, co ti stabilní adresa dává a co ne.
  • Carrier-grade NAT. Pokud je WAN adresa tvého routeru v rozsahu 100.64.0.0/10, sdílíš veřejnou adresu s dalšími zákazníky a žádný port forward není možný, protože port není tvůj, abys ho mohl přeposílat. Mnoho poskytovatelů tě na požádání z CGNAT přesune; někteří ne a někteří si to nechají zaplatit. IPv6 je skutečná cesta ven, pokud ho mají i tvoji hráči, což je ten háček - viz IPv6 a herní servery.

Je tu i část, kterou nikdo nezapisuje: přesměrovaný port na domácím připojení je trvalá příchozí díra do sítě, ve které žijí tvoje bankovní údaje, na které běží software herního serveru s historií záplatování, kterou nikdo nepovažuje za výbornou. Self-hosting herního serveru doma versus pronájem obě možnosti poctivě porovnává, včetně případů, kdy je hostování doma správná odpověď.

FAQ#

Co je query port a potřebuji ho mít otevřený?

Je to port, na který se prohlížeč serverů ptá na název, mapu a počet hráčů tvého serveru. Hraní ho nepoužívá. Otevřený ho potřebuješ jen tehdy, pokud chceš, aby byl server vypsaný nebo monitorovaný; hráči, kteří se připojují přímou adresou, se dostanou i bez něj.

Proč mi server funguje, ale nikomu jinému ne?

Testuješ zevnitř sítě, kde firewall a NAT nejsou v cestě. Otestuj z mobilního připojení nebo požádej někoho zvenčí, ať to zkusí. Pokud jim to nejde a tobě ano, problém je ve firewallu, forwardu nebo bind adrese, ne ve hře.

Mohou dva herní servery sdílet jeden port?

Ne. Jeden proces může navázat jeden port na jednom protokolu najednou a druhý selže s „address already in use“. Mohou sdílet číslo napříč protokoly - jeden na TCP, druhý na UDP - ale to se lidé většinou neptají. Dej každému serveru vlastní port a vlastní query port.

Musím otevírat i odchozí porty?

Téměř nikdy. Odchozí spojení jsou ve výchozím stavu povolená na prakticky každém firewallu a routeru a návratový provoz povoluje sledování spojení. Výpis serveru, ověření přes Steam i stahování aktualizací jsou odchozí a obvykle nepotřebují žádné pravidlo.

Je nestandardní port bezpečnější než výchozí?

Mírně a ne tak, aby ses na to spoléhal. Vyřadí tvůj server z nejhrubších hromadných skenů, což má u administrativního portu nějakou hodnotu, ale cokoli, co skenuje rozsah, ho stejně najde. Používej to jako pohodlí, nikdy jako ochranu.

Kolik portů můj tarif potřebuje?

Spočítej herní port, query port, pokud je to samostatné číslo, a každý administrativní port, který opravdu hodláš používat. Valheim potřebuje dva. Minecraft Java jeden, pokud nechceš RCON. Arma 3 a DayZ blok pěti a tří. Zbytek pokrývá tabulka podle her výše.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000