RE:NODE

Síť12 min čtení

Doména pro herní server: záznamy A a SRV

Herní server žije na adrese a portu, ale doména nese jen adresu. Tři způsoby, jak tu mezeru překlenout, a jak ověřit, že to funguje.

Aktualizováno

7 čtenářů

Nasměruj záznam A na adresu, kterou ti ukazuje panel u serveru, počkej, až se začne překládat, a hráčům dej play.example.com plus port. U skoro každé hry je to celé a zabere to dvě minuty. Zajímavá část je port, protože doménové jméno nese adresu a nic jiného a jen malé množství her si port samo dohledá.

Existují přesně tři způsoby, jak port zneviditelnit, a jeden, jak s ním žít. Tento článek probírá všechny čtyři, která hra patří kam a jak výsledek ověřit, než ho pošleš na Discord.

Mezera: jméno nese adresu, hra potřebuje port#

Záznam A mapuje jméno na adresu IPv4. Záznam AAAA dělá totéž pro IPv6. Ani jeden nemá pole pro číslo portu, protokol nebo cestu a žádné nastavení u poskytovatele DNS to nezmění. Takže play.example.com se přeloží na 203.0.113.10 a klient pořád stojí před strojem se šedesáti tisíci dveřmi a potřebuje vědět, které z nich.

Máš čtyři možnosti:

  1. Řekni lidem port. play.example.com:27015. Ošklivé, univerzální, funguje všude a pořád je to mnohem lepší než adresa, kterou si nikdo nezapamatuje ani nemůže znovu vydat.
  2. Zveřejni záznam `SRV`. Klient si ho vyhledá a port zjistí sám. Funguje jen u her, jejichž klient vyhledávání skutečně provádí, což v praxi znamená Minecraft Java a hrstku služeb, které nejsou hry.
  3. Běž na portu, který klient předpokládá. Pokud hra ve výchozím stavu používá 27015 a ty jedeš na 27015, nikdo port nepíše. Když je to možné, je to nejčistší řešení.
  4. Předřaď proxy. Proxy poslouchá na očekávaném portu a interně přeposílá na skutečný. Standard pro HTTP a dostupné i pro Minecraft přes proxy jako Velocity. U většiny her na UDP není dostupné.
bez zadaného portujen Minecraft Javavýchozí portport ze záznamupřeposláno interněHráčzadá jménoDotaz DNSA nebo AAAADotaz SRVvčetně portuProxyposlouchá na výchozím portuHerní server203.0.113.10:25571
Tři cesty od zadaného jména k běžícímu serveru

Jak zjistit adresu, na kterou míříš#

Než přijde na řadu cokoli z toho, získej správnou adresu. U hostingu s panelem ukazuje stránka samotného serveru adresu a port, na které skutečně poslouchá, a právě tato dvojice patří do záznamu i do připojovacího řetězce. Zkopíruj ji, nepiš ji z paměti, protože port v hlavě bývá často ten z minulého měsíce.

Tři pasti v tomto kroku:

  • Adresa panelu není adresa serveru. panel.renode.space je web. Není to místo, kde poslouchá tvůj herní server, a záznam namířený tam nic nezíská.
  • Sdílená adresa je normální. Za jednou adresou může sedět několik serverů na různých portech. Právě proto na portu záleží a právě proto nemůžeš předpokládat, že výchozí port je volný. Statické adresy a zda je potřebuješ popisuje dva případy, kdy vyhrazená adresa přestává být volitelná - když tě má někdo jiný na seznamu povolených a když potřebuješ výchozí port, který se sdílet nedá.
  • Dotazovací port není herní port. Většina her alokuje alespoň dva. Hráči se připojují na herní port; prohlížeče serverů mluví s dotazovacím portem. Když do záznamu dáš dotazovací port, vznikne jméno, které se přeloží, a spojení, které se nikdy nedokončí. Úplnou taxonomii najdeš v porty herních serverů vysvětleně.

RE:NODE doménová jména neprodává a neprovozuje DNS, takže samotný záznam patří tam, kde leží tvoje zóna - k registrátorovi, do Cloudflare nebo kdokoli, na koho míří tvoje jmenné servery. dig +short NS example.com na to odpoví definitivně a úpravy záznamů v panelu, který není autoritativní, jsou oblíbený způsob, jak ztratit odpoledne.

Záznam A, který funguje vždy#

Tuhle variantu zvol, pokud nemáš konkrétní důvod pro jinou.

  1. V editoru DNS u svého poskytovatele vytvoř záznam A.
  2. Název: play, pokud formulář chce jen štítek, play.example.com, pokud chce celé jméno. Podívej se na existující záznam, jakou podobu používá.
  3. Hodnota: adresa IPv4 ze stránky serveru.
  4. TTL: 300 při zřizování, 3600, až se vše ustálí.
  5. Ulož a než to někomu řekneš, ověř překlad zvenčí své vlastní sítě.
Záznam ve formátu zóny BIND
play    300  IN  A     203.0.113.10node    300  IN  AAAA  2001:db8::10

Pokud tvůj poskytovatel nabízí funkci HTTP proxy - nejčastěji na ni lidé narazí u oranžového mráčku v Cloudflare - musí být u tohoto záznamu vypnutá. Ta proxy ukončuje HTTP a HTTPS. Herní protokol není ani jedno, takže záznam za proxy vydá hráčům adresu patřící síti té proxy, která herní spojení nikdy nepřijme. Záznam musí být jen DNS, tedy šedý mráček. Co přesně oranžový mráček přenese a co ne, popisuje Cloudflare pro weby a herní servery.

Jakmile je serverů víc, přestaň mířit názvy služeb přímo na adresy. Adresu dej do jména stroje a názvy služeb na něj namiř přes CNAME, aby stěhování byla jedna úprava místo devíti - celý tento vzor je v subdomény pro servery.

Záznamy SRV a hry, které je čtou#

Záznam SRV nese hostitele a port pohromadě, takže klient, který ho vyhledá, nepotřebuje port od hráče. Háček je v tom, že se klient musí zeptat, a skoro žádný to nedělá.

Minecraft Java ano. Když hráč zadá jméno hostitele bez portu, klient se nejprve zeptá na _minecraft._tcp.<hostname> a pokud se vrátí záznam, použije z něj cíl a port. Pokud nic nepřijde, vrátí se k běžnému dotazu na A a předpokládá 25565.

Dva záznamy, ne jeden
_minecraft._tcp.play  300  IN  SRV  0 5 25571 node.example.com.node                  300  IN  A          203.0.113.10

Druhý záznam je ten, na který lidé zapomínají. Nic v záznamu SRV není adresa: cílem je jméno hostitele a to musí mít vlastní záznam A. IP adresa napsaná do pole cíle je neplatná a selže tiše. Záznamy SRV pro Minecraft prochází každé pole, tři podoby, v jakých přicházejí formuláře registrátorů, a příkazy dig, které to dokážou.

Mimo Minecraft Java počítej s tím, že SRV není k dispozici, dokud to neotestuješ. Minecraft Bedrock vyhledávání neprovádí. Hry na enginech Source a GoldSrc také ne. Valheim, Palworld, Rust, Terraria a zbytek katalogu survivalů taky ne. Významnou výjimkou jsou hlasové servery - TeamSpeak 3 používá _ts3._udp a Mumble _mumble._tcp - což stojí za to vědět, protože to bývá druhá polovina DNS komunity.

Výchozí porty a proxy, které port odstraní#

Pokud může být port výchozí, udělej z něj výchozí a přestaň číst. Hráč, který zadá play.example.com a nic jiného, je nejlepší dostupný výsledek, a u hry na standardním portu ho zajistí samotný záznam A.

HraVýchozí herní portProtokol
Minecraft Java25565TCP
Minecraft Bedrock19132UDP
Hry na Source a GoldSrc27015UDP
Valheim2456UDP
Palworld8211UDP
FiveM30120TCP a UDP
Project Zomboid16261UDP
7 Days to Die26900TCP a UDP
Terraria7777TCP
Factorio34197UDP
Arma 3 a DayZ2302UDP
Don't Starve Together10999UDP

U některých z nich se porty mezi verzemi mění, proto si to ověř podle portu, na který se tvůj server skutečně navázal a který konzole vypíše při startu.

Cesta přes proxy je užší, než lidé čekají. Reverzní proxy funguje tak, že rozumí protokolu natolik, aby přečetla požadované jméno hostitele a podle něj směrovala, a proto je standardem u HTTP a jinde vzácná - postup vysvětluje co dělá reverzní proxy. Minecraft má obdobu ve Velocity a BungeeCord, které poslouchají na 25565 a přeposílají hráče na backendy na interních portech, a umí dokonce směrovat podle jména, které hráč zadal, takže creative.example.com a play.example.com skončí na různých serverech za jedním veřejným portem. Takovou sestavu popisuje sítě proxy Velocity pro Minecraft. Pro střílečku nebo survival na UDP není ekvivalent, na který bys měl spoléhat, a obecný přeposílač TCP nebo UDP přidává skok a další místo poruchy jen proto, aby ušetřil dvojtečku.

Herní tarify RE:NODE slot pro proxy neobsahují, a to záměrně: HTTP proxy s herním tokem dat nemá co smysluplného dělat. Tarify pro aplikace a weby ho obsahují, protože HTTP je přesně místo, kde se uplatní.

Co přijímá který herní klient#

Záznam je užitečný, jen pokud klient přijme jméno v poli. Většina ano, a ti, kteří odmítnou, mají konzolový příkaz, který nikoli.

KlientKam jméno patříPoznámky
Minecraft JavaAdd Server, pole adresyPort vynech, aby se použil záznam SRV
Minecraft BedrockAddress a Port jako dvě poleŽádné vyhledání SRV. Dej obě hodnoty
Source a GoldSrcconnect play.example.com:27015Konzole, s povolenou vývojářskou konzolí
Prohlížeč serverů SteamuFavourites, Add a ServerVětšina her jméno přijme; pokud některá odmítne, použij konzoli
ValheimJoin Game, Add Serverplay.example.com:2456, herní port, ne dotazovací
FiveMconnect play.example.com:30120Konzole F8
Survivaly obecněDialog Direct ConnectZkus jméno; pro izolaci problému zkus místo něj adresu

Pokud klient odmítne jméno, které se jinde překládá správně, je chyba v klientovi, ne v tvém DNS. Takovým hráčům dej adresu a port a jdi dál - jméno se pořád vyplatí všem ostatním i ve dni, kdy budeš server stěhovat.

Crossplay to ještě komplikuje. Hráč na Bedrocku, který se k serveru Java připojuje přes Geyser, jde na jiný port přes UDP, takže potřebuje vlastní dvojici adresy a portu bez ohledu na to, jak vypadá strana Javy - dvoje vstupní dveře popisuje Geyser a crossplay s Bedrockem.

Ověření, než to oznámíš#

Neúspěšné připojení má příliš mnoho možných příčin na to, aby bylo testem. Odděl DNS od sítě a síť od hry, v tomto pořadí.

bash
$ dig +short A play.example.com @1.1.1.1203.0.113.10$ dig +short SRV _minecraft._tcp.play.example.com @1.1.1.10 5 25571 node.example.com.$ nc -vz play.example.com 25571Connection to play.example.com 25571 port [tcp/*] succeeded!

Na pojmenování resolveru záleží. Výslovný dotaz na 1.1.1.1 nebo 8.8.8.8 obejde vše, co má v cache tvůj router a poskytovatel připojení, a právě tak rozlišíš „není zveřejněno“ od „ještě se nerozšířilo“. Ve Windows dělají tytéž dvě věci nslookup play.example.com 1.1.1.1 a Test-NetConnection play.example.com -Port 25571.

U hry na UDP nemá nc žádné spojení k dokončení, takže test portu v užitečné podobě neexistuje. Ověř, že se server navázal tam, kde si myslíš, přečtením jeho konzole při startu - řekne to - a pak udělej jediný test, který se počítá: připoj se pomocí jména ze stroje, který není ve tvé síti. Telefon na mobilních datech je nejrychlejší způsob, jak dokázat, že cesta funguje pro někoho jiného než tebe.

Co doména za tebe neudělá#

Neschová tvou adresu. Kdokoli jméno přeloží za dvě sekundy. Doména je vrstva pohodlí, ne ochrana. To, co stojí mezi záplavou a tvým serverem, je filtrování u poskytovatele a i to zahodí jen zjevný objemový provoz - upřímnou verzi najdeš v co děláme proti útokům.

Nesníží latenci. Pakety jdou stejnou cestou jako dřív. Jediné síťové číslo, které jméno změní, je jednorázový překlad při připojení.

Nepřežije klienta, který si adresu uložil do cache. Někteří klienti překládají jednou při připojení a výsledek drží po celou relaci a zejména seznam oblíbených ve Steamu si pamatuje, co našel. Po přesunu požádej lidi, aby záznam odebrali a přidali znovu, místo abys ladil, proč jeden člověk pořád končí na starém stroji.

Neopraví zavřený port. Dokonalý záznam namířený na port, na kterém nic neposlouchá, vypadá z pohledu klienta přesně jako rozbitý záznam. Pokud se jméno přeloží a připojení selže, problém už není v DNS.

Stěhování serveru a co se při něm rozbije#

Celý důvod, proč používat jméno, je stěhování, tak ho udělej pořádně.

  1. Den předem sniž TTL záznamu - a cíle SRV, pokud ho máš - na 300.
  2. Vyčkej celé předchozí TTL, aby všechny cache převzaly krátkou hodnotu.
  3. Přesuň svět nebo data, spusť nový server a ověř, že funguje přes adresu.
  4. Změň záznam. Jeden řádek.
  5. Starý server nech běžet několik hodin. Hráči uprostřed relace nic znovu nepřekládají a staré cache stále přicházejí.
  6. Sleduj konzoli starého serveru. Když se hodinu nikdo nepřipojil, je hotovo.
  7. TTL zase zvyš.

Přesun serveru bez ztráty hráčů probírá zbytek, včetně toho, že data se stěhují před DNS, ne po něm.

Při přepnutí se běžně rozbijí tři věci. Starý záznam má pořád v cache router některého hráče a ten trvá na tom, že server nefunguje - ať to ověří zkouškou přímo přes adresu. Firewall nového serveru má otevřený herní port, ale ne dotazovací, takže server funguje a nikdy se nevypíše. A něčí zástupce má IP adresu zapečenou z doby, kdy jsi ještě neměl doménu, což je přesně ten problém, který měla doména ukončit.

FAQ#

Mohu se zbavit portu, aby hráči psali jen moji doménu?

Jen ve třech situacích: hra je Minecraft Java a zveřejníš záznam SRV, server běží na výchozím portu hry, nebo na výchozím portu místo tebe poslouchá proxy, která rozumí protokolu. Jinak je správná odpověď play.example.com:27015 a pořád je to zlepšení oproti holé adrese.

Musím doménu koupit u svého hostingu?

Ne, a obvykle to ani nejde. Doména se kupuje u registrátora a její záznamy žijí tam, kam míří její jmenné servery. Hosting a DNS jsou oddělené služby, které se potkají jen v hodnotě jednoho záznamu. RE:NODE doménová jména neprodává ani DNS neprovozuje.

Proč mi jméno funguje, ale kamarádům ne?

Skoro vždy jde o cache. Tvůj resolver má novou odpověď a jejich starou, po zbytek předchozího TTL. Otestuj jméno proti 1.1.1.1, abys viděl zveřejněnou skutečnost, a zkontroluj, že nikdo nemá uloženou adresu se starým portem.

Mám pro herní server použít A, nebo CNAME?

Záznam A je v pořádku a je o jeden dotaz kratší. CNAME namířený na jméno stroje je lepší, jakmile provozuješ víc než jeden server, protože přesun stroje je pak jediná úprava. CNAME nedávej na kořen domény - to není dovoleno.

Dostane server certifikát tím, že na něj namířím doménu?

U herního serveru ne a nepotřebuje ho: herní protokoly HTTPS nepoužívají. Certifikáty mají smysl u webových a aplikačních serverů dostupných přes HTTPS, kde ti ho slot pro proxy vydá a obnovuje, jakmile se jméno překládá.


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