Provozuj oba protokoly, nebo zůstaň u IPv4. Server dostupný jen přes IPv6 je nedostupný pro velkou část hráčů, kteří nikdy nepřijdou na to proč, a server se záznamem AAAA, za kterým nic neposlouchá, je horší než server bez záznamu AAAA, protože změní „nejde se připojit“ na „připojí se občas, někomu, z některých sítí“.
To je celé doporučení. Všechno níže je detail: co IPv6 skutečně mění, které části herního průmyslu to dohnaly, tři chyby v konfiguraci, které způsobují občasné výpadky, a hrstka situací, kdy IPv6 vůbec není volitelné.
Co IPv6 mění a co ne#
IPv6 je stejný internet s větším polem pro adresu. Směrování, TCP, UDP, DNS i všechny herní protokoly nad nimi fungují stejně. Co se mění, stojí za to znát přesně, protože polovina lidových pověstí kolem něj je špatně.
- Adresy mají 128 bitů místo 32. Nedostatek je pryč. Jedno domácí připojení typicky dostane delegovaný prefix
/56nebo/48, což je víc adres než celý internet na IPv4. - Obvykle neexistuje NAT. Každé zařízení má globálně směrovatelnou adresu, takže mezi ním a internetem stojí jen firewall. Na IPv4 tu práci domácímu routeru omylem dělal NAT. Na IPv6 ji omylem nedělá nic.
- ARP zmizelo a nahradil ho Neighbour Discovery, který běží nad ICMPv6. Proto blokování ICMPv6 rozbije věci, které blokování ICMP na IPv4 nikdy nerozbilo.
- Routery nefragmentují. Na IPv4 mohl mezilehlý router příliš velký paket rozsekat. Na IPv6 pošle zpět zprávu Packet Too Big a odesílatel na ni má zareagovat. Pokud se tahle zpráva filtruje, velké pakety mizí a malé ne.
- Minimální MTU je 1280 bajtů, oproti 576 na IPv4.
Co se nemění: latence, propustnost, jitter ani vzdálenost k hráčům. Pakety IPv6 putují po stejném vlákně stejnou rychlostí. Pokud ti někdo tvrdí, že je IPv6 rychlejší, popisuje cestu, která měla náhodou lepší peering, ne vlastnost protokolu. Tři čísla, která skutečně rozhodují o pocitu ze hry, jsou v článku latence, jitter a ztráta paketů.
Čtení a psaní adresy IPv6#
Osm skupin po čtyřech hexadecimálních číslicích oddělených dvojtečkami a dvě zkratky: počáteční nuly ve skupině lze vynechat a jednu řadu skupin samých nul lze nahradit ::, a to jen jednou v adrese.
2001:0db8:0000:0000:0000:0000:0000:0010 full form2001:db8::10 the same address, written sanelyPrefixy, se kterými se opravdu setkáš:
| Prefix | Co to je | Kde to uvidíš |
|---|---|---|
2000::/3 | Globální unicast | Skutečné, směrovatelné adresy |
2001:db8::/32 | Pouze dokumentace | Příklady, včetně tohoto článku |
fe80::/10 | Link-local | Automaticky nastaveno na každém rozhraní |
fc00::/7 | Unique local | Privátní rozsahy, přibližný protějšek 10.0.0.0/8 |
ff00::/8 | Multicast | Nahrazuje broadcast, který IPv6 nemá |
::ffff:0:0/96 | IPv4-mapped | Adresa IPv4 viděná dual-stack socketem |
Syntaktický detail, který rozbíjí konfigurační soubory: když je adresa vedle portu, patří do hranatých závorek. [2001:db8::10]:25565 je server, 2001:db8::10:25565 je úplně jiná adresa a nejspíš překlep, na který budeš deset minut zírat. Stejné pravidlo o závorkách platí v URL, ve většině direktiv bind a v connection stringách.
Ještě jedno: /64 je standardní velikost jednoho síťového segmentu. Všechno, odkud se zákazník připojuje, obvykle leží v jednom /64, a tahle jediná skutečnost určuje celou část o banech a logování níže.
Která strana to vlastně podporuje#
Podpora není jedna otázka, ale čtyři: poslouchá binárka serveru na IPv6, vytáčí ji klient, přijímá ji master server nebo matchmaking a rozumí jí tvoje nástroje. Všechny čtyři musí být ano a selhání jsou tichá.
| Komponenta | Stav věcí |
|---|---|
| Minecraft Java server a klient | Funguje. Netty naváže oba protokoly, pokud tomu nebrání příznak JVM |
| Minecraft Bedrock dedicated server | Má samostatný server-portv6 v server.properties, výchozí 19133 |
| Hry na enginech Source a GoldSrc | V praxi IPv4. Neplánuj server Source jen pro IPv6 |
| Většina survival serverů na Unity a Unreal | Vývojáři je netestovali. Počítej s IPv4, dokud nedokážeš opak |
| Prohlížeč serverů a oblíbené ve Steamu | Postaveno kolem adresace IPv4 |
| Webové, API a databázové služby | Naprosto v pořádku. Tady je IPv6 nudné a funguje |
| Monitoring, kontroly dostupnosti, stavové boty | Nesmírně se liší. Mnohé kontrolují jen záznamy A |
U Minecraftu Java je jedna konkrétní past, kterou stojí za to pojmenovat. Socket navázaný na :: přijímá na Linuxu i spojení IPv4, protože sysctl net.ipv6.bindv6only má výchozí hodnotu 0 a klienti IPv4 přicházejí jako IPv4-mapped adresy. Jenže JVM spuštěná s -Djava.net.preferIPv4Stack=true sockety IPv6 vůbec nevytvoří, takže server je jen na IPv4, ať se zbytek stroje děje cokoli. Ten příznak se objevuje v řadě zkopírovaných startovacích skriptů. Pokud běžíš se seznamem příznaků, který jsi nepsal, zkontroluj ho dřív, než usoudíš, že hra IPv6 nepodporuje.
Dual-stack správně: bind, záznam, firewall#
Tři věci musí platit současně a lidé obvykle splní jednu nebo dvě.
- Služba poslouchá na IPv6. Ověř to přes
ss, ne nadějí. Adresa0.0.0.0:25565je jen IPv4.[::]:25565jsou oba protokoly, na výchozím linuxovém jádru. - DNS ji zveřejňuje. Záznam
AAAApro stejné jméno, které nese záznamA. Typy záznamů popisuje DNS záznamy vysvětleně a subdomény pro servery řeší, jak držet adresu na jednom místě, aby přidání druhého záznamu neznamenalo přidání druhé věci, na kterou zapomeneš. - Firewall ji povoluje. Pravidla IPv6 jsou samostatná sada v
iptablesaip6tablesa klasický výsledek je služba, která přes IPv4 funguje bezchybně a přes IPv6 je tiše zahazována.
$ ss -ltnp | grep 25565LISTEN 0 128 *:25565 *:*$ dig +short AAAA play.example.com @1.1.1.12001:db8::10$ ip6tables -L INPUT -n --line-numbersV ufw řídí práci s IPv6 jeden řádek v /etc/default/ufw a pravidlo, které přidáš, platí pro oba protokoly, jen když je zapnutý:
IPV6=yesPokud místo toho používáš nftables, rodina inet pokrývá oba protokoly jednou sadou pravidel, což tuhle celou kategorii chyb odstraní. Pravidla firewallu, na kterých záleží mají kompletní sadu pravidel v obou syntaxích a průvodce ufw je delší procházka tímto nástrojem.
Druhou častou mezerou jsou kontejnery. Docker se historicky dodával s vypnutým IPv6, takže kontejner s publikovaným portem odpovídá na IPv4 a na IPv6 ne, i když je hostitel plně dual-stack. Zapnutí znamená "ipv6": true a fixed-cidr-v6 v /etc/docker/daemon.json plus restart démona - okolní nastavení najdeš v Dockeru na VDS.
ICMPv6 a MTU: porucha, která vypadá jako ztráta paketů#
Tohle je ta, která plýtvá dny. Na IPv4 můžeš zablokovat všechno ICMP, naštvat síťaře a většinou ti to projde. Na IPv6 ne, protože na něm protokol závisí.
Neighbour Discovery, který zjišťuje adresu následujícího skoku na linkové vrstvě, je ICMPv6. Router Advertisements, tedy způsob, jakým většina hostů vůbec získá adresu, jsou ICMPv6. A Packet Too Big, typ 2, je způsob, jakým se odesílatel dozví, že má zmenšit pakety, protože žádný router IPv6 za něj nefragmentuje.
Zablokuj ICMPv6 typu 2 kdekoli na cestě a dostaneš velmi specifický příznak: malé pakety procházejí, handshaky se dokončí, spojení se naváže a pak zmizí všechno, co potřebuje paket plné velikosti. Hra se připojí a pak zamrzne na první velké aktualizaci stavu. Webová stránka vrátí hlavičky a visí na těle. Vypadá to přesně jako ztráta paketů, a není. Podívej se na část o oddělení ztrát od jiných problémů v článku latence, jitter a ztráta paketů, protože diagnostika je stejná, ale lék ne.
Pravidlo k zapamatování je prosté: povol příchozí ICMPv6, klidně s omezením rychlosti, a nikdy ho neodpaluj plošně. Tunelovaná připojení IPv6, která někteří domácí poskytovatelé stále vydávají, snižují použitelné MTU pod 1500 a činí tuhle poruchu mnohem pravděpodobnější právě u hráčů, kteří ji dokážou diagnostikovat nejhůř.
Bany, allow-listy a logy: pravidlo /64#
Ban na IPv4 dopadne na jednu adresu a obvykle jednu domácnost. Ban na IPv6 na jediné /128 dopadne na jednu adresu, kterou klient klidně změní během hodiny, protože privacy extensions dávají hostům dočasné adresy uvnitř jejich vlastního prefixu už z principu.
Praktické pravidlo: jednotkou identity na IPv6 je /64, ne adresa.
- Banuj `/64`.
2001:db8:1234:5678::/64je to, jak vypadá jedno zákaznické připojení. Ban2001:db8:1234:5678::a1b2zabanuje jeden identifikátor rozhraní, dokud se nezmění. - Do allow-listu dej taky `/64`, jinak se admin, kterého jsi dopoledne pustil dovnitř, odpoledne změní v cizince.
- Loguj prefix. Ukládání celých adres a seskupování podle nich dává k ničemu statistiky; seskupuj podle prvních 64 bitů.
- Ověř, že tvoje nástroje vůbec přijímají prefix. Překvapivé množství systémů banů psaných pro IPv4 bere jen holou adresu, což znamená, že bany IPv6 nefungují a měsíce si toho nikdo nevšimne.
- Nechoď pod `/64` bezstarostně.
/48může být celý region poskytovatele a/32je často celý poskytovatel.
Totéž platí pro rate limity, které jsou skutečnou obranou proti zneužití na aplikační úrovni - počítání podle adresy je bezvýznamné, když má útočník v jedné podsíti 18 trilionů adres. Rate limity a zneužití popisují podobu limitů, které fungují, a co děláme s útoky je upřímné v tom, které části problému filtrování řeší a které ne.
Testování a co znamená „funguje“#
Testování z dual-stack stroje dokazuje skoro nic, protože se tiše vrátí na IPv4, jakmile IPv6 selže. Většina klientů zkouší obojí a IPv6 preferuje s krátkým náskokem, takže rozbitá cesta IPv6 se projeví zlomkem sekundy zpoždění, ne chybou. Pro uživatele je to skvělé, pro testování hrozné.
Vynuť protokol:
$ ping6 play.example.com$ curl -6 -sI https://api.example.com$ mtr -6 play.example.com$ dig AAAA play.example.com @2606:4700:4700::1111U hry je jediným skutečným testem klient v síti s IPv6 a vypnutým IPv4, nebo mobilní připojení u operátora, který provozuje jen IPv6 s NAT64. Pokud se takový klient připojí a zůstane připojený přes změnu mapy a velkou synchronizaci stavu, cesta funguje. Pokud se připojí a zamrzne, vrať se a přečti si část o ICMPv6.
Existuje ještě jeden test, který zachytí velmi častou chybu: certifikáty. Pokud má jméno záznam AAAA, validátor certifikační autority může zkusit adresu IPv6 a záznam mířící na adresu, na které nic neposlouchá, je klasická příčina selhání vydání certifikátu pro jméno, které přes IPv4 vypadá naprosto správně nastavené. Pokud se certifikát nevydá a záznam A je správně, zkontroluj další na řadě záznam AAAA - zbytek cesty k vydání pokrývá namíření domény na server.
Kde si IPv6 skutečně zaslouží své místo#
Většina tohoto článku jsou varování, takže tady je druhá strana. Existují tři situace, kdy je IPv6 lepší odpověď, a jedna, kdy je jediná.
Hostování z domova za CGNAT. Pokud tě poskytovatel schová za carrier-grade NAT, nemáš veřejnou adresu IPv4, na kterou by šlo přesměrovat port, a žádné nastavení routeru ji nevytvoří. Mnohá z těchto připojení přitom přidělují skutečný, směrovatelný prefix IPv6. Domácí server jen na IPv6 pro širší publikum nefunguje, ale je to reálná možnost pro soukromou skupinu, kde mají IPv6 všichni. Vlastní hosting doma versus pronájem to poměřuje s ostatními náklady na provoz serveru na vlastní lince.
Být na allow-listu někoho jiného. Pokud API, platební poskytovatel nebo firemní firewall musí povolit tvůj server, IPv6 ti dá stabilní prefix bez cenové vzácnosti, která provází adresy IPv4. Statické adresy a zda je potřebuješ je širší otázka, kdy se vyplatí platit za vyhrazenou adresu.
Cokoli, co je prosté HTTP nebo databázové spojení. Provoz webu, API a databází přes IPv6 je nenápadný a už roky. Pokud tvoje aplikace komunikuje se službou, která zveřejňuje záznamy AAAA, nejspíš už IPv6 používá a nikdy sis nevšiml. To je cílový stav.
Oslovení hráčů v mobilních sítích jen s IPv6. Někteří operátoři provozují jen IPv6 s překladem NAT64 na okraji. Tito hráči se k serverům IPv4 dostávají přes překladač, což funguje pro TCP a většinu UDP a přidává skok plus tabulku stavů překladu, která občas zahodí nečinné relace. Zveřejnění záznamu AAAA odstraní překladač z cesty právě pro tyto hráče.
Na RE:NODE se každý server publikuje s adresou IPv4 a portem a to je to, co patří do tvých DNS záznamů. IPv6 neuvádíme jako standard, takže pokud na něm tvůj projekt opravdu stojí, zeptej se dřív, než kolem něj budeš navrhovat, ne potom. Podpora je ticket z panelu nebo Discord a odpověď bude rovné ano nebo ne, ne možná.
FAQ#
Mám pro svůj herní server zveřejnit záznam AAAA?
Jen pokud ses k serveru sám připojil přes IPv6, s vypnutým IPv4 na klientovi. Záznam AAAA, za kterým nic neposlouchá, způsobuje občasné výpadky přesně u hráčů, jejichž sítě preferují IPv6, a ty se velmi špatně užitečně hlásí.
Mohu provozovat herní server jen na IPv6?
Technicky u některých her, prakticky u žádné s veřejným publikem. Značná část hráčů nemá IPv6 vůbec, jejich routery ho mají vypnuté nebo ho jejich herní klient nepoužije. Skutečné možnosti jsou dvě: dual-stack, nebo jen IPv4.
Zrychlí IPv6 můj server?
Ne. Je to stejná cesta stejnou rychlostí. Jediný měřitelný rozdíl je při navazování spojení, a to jen u klientů, kteří by jinak byli překládáni přes bránu NAT64 operátora.
Jak správně zabanovat hráče na IPv6?
Zabanuj /64, ne jednu adresu. Klienti už z principu střídají posledních 64 bitů své adresy, takže ban na /128 sám vyprší. Nejdřív ověř, že tvoje nástroje na bany vůbec přijímají prefix, protože spousta těch psaných pro IPv4 ne.
Proč můj server funguje přes IPv4, ale ne přes IPv6?
Tři obvyklé příčiny, v tomto pořadí: proces je navázaný na 0.0.0.0 místo ::, sada pravidel IPv6 ve firewallu nemá pravidlo, které jsi přidal pro IPv4, nebo má runtime kontejnerů vypnuté IPv6. První vyřeší ss -ltnp na jeden řádek.




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.