Přidáte spouštěč do seznamu vyloučení, stahování přeskočí z pomalého na rychlé a zápas stejně skončí na vzdáleném serveru. Nic není rozbité. Spouštěč a hra jsou dva procesy se dvěma sadami soketů a vyloučení jednoho nic neříká o druhém. Stahování se zrychlilo, protože stahování byl provoz spouštěče; zápas je něčí jiné připojení, které otevřel spustitelný soubor, jenž vaše pravidlo nikdy nevidělo.

Jeden instalátor, mnoho procesů

Moderní herní software je malé souhvězdí. Je tu klient, který vás přihlásí, aktualizátor, který stahuje obsah, spouštěč, který startuje hru, a spustitelný soubor hry, který sám může vytvořit druhý proces pro anti-cheat nebo pro matchmakingovou vrstvu. Každý z nich může držet vlastní připojení k vlastním cílům.

Pravidlo vyloučení obvykle pojmenuje jeden z nich. Který to je, závisí zcela na identifikátoru, který klient VPN podporuje, a to je část, kterou uživatelé málokdy kontrolují. Někteří klienti porovnávají cestu ke spustitelnému souboru, někteří identifikátor balíčku nebo bundlu a někteří název procesu, který mohou sdílet dva nesouvisející binární soubory. Přečtěte si pravidlo dřív než seznam procesů, protože pravidlo omezuje i to, co můžete vyjádřit.

Příznak tedy není „rozdělený tunel je rozbitý“. Je to „pravidlo pokrývá proces, který není tím, kdo nese provoz, na kterém mi záleží“, což je mnohem užší a mnohem opravitelnější tvrzení. Jakmile to řeknete takto, další krok přestane být hádáním.

Najděte proces, který vlastní připojení zápasu

Spusťte hru, vstupte do zápasu a podívejte se, kdo vlastní sokety, nikoli co je na obrazovce. Ve Windows na to seznam procesů plus dotaz na sokety pro každý proces odpovídá dvěma příkazy:

Get-Process | Where-Object { $_.ProcessName -match 'launcher|game|client' } | Select-Object Id,ProcessName,Path
Get-NetTCPConnection -State Established | Select-Object OwningProcess,RemoteAddress,RemotePort | Sort-Object OwningProcess

Druhý příkaz vypisuje ID procesu, ne název, takže oba výstupy spojte podle ID. Řádek, který hledáte, je ten, jehož vzdálená adresa patří herní službě, a vlastnící proces je spustitelný soubor, který musí vaše pravidlo pojmenovat.

V Linuxu stejná otázka vyžaduje jeden příkaz na typ soketu a vyplatí se zkontrolovat oba, protože připojení zápasu může být UDP, zatímco všechno ostatní je TCP:

ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'

Pokud hra běží v kontejneru nebo vrstvě kompatibility, proces, který najdete, může být shim, nikoli binární soubor, který jste nainstalovali. V tom případě je důležitý identifikátor ten, který vidí klient, což může být cesta shimu, a žádné úpravy původního souboru to neovlivní.

Přiřaďte identifikátor, který váš klient podporuje

Před přidáním čehokoli si přečtěte dokumentaci klienta k pravidlu vyloučení. Tři běžné modely se chovají různě a jeden z nich je past.

IdentifierHow it behavesFailure mode
Executable pathMatches exactly the file at that pathBreaks when an update moves the binary
Process nameMatches any binary with that nameToo broad; catches unrelated software
Package or bundle idMatches a signed application groupMay include services you did not intend

Pravidla cest jsou nejpřesnější a nejkřehčí. Aktualizace spouštěče, která přesune spustitelný soubor, nechá pravidlo ukazovat na soubor, který už neběží, a příznak se vrátí, aniž by se něco zjevně změnilo. Pravidla balíčků to přežijí a mohou také tiše pokrýt pomocné procesy, o kterých jste nikdy neuvažovali, což je buď pohodlné, nebo znepokojivé podle pomocníka.

Ať klient podporuje cokoli, nepřidávejte položky pro každý spustitelný soubor, který najdete. Seznam sestavený metodou pokus-omyl, dokud jedna relace nefungovala, nelze zkontrolovat a bude tiše hromadit výjimky pro nesouvisející software. Pojmenujte proces, který jste našli, a zapište, k čemu byl.

Testujte na zápasu, ne na stahování

Rychlost stahování spouštěče je nejhorší možný test, protože procvičuje přesně ten proces, který už byl vyloučen. Použijte věc, která selhávala, a kontrolujte cestu, ne vlastní zobrazení výkonu hry:

ip route get 203.0.113.55
Get-NetTCPConnection -State Established | Where-Object RemotePort -eq 27015

První příkaz potřebuje adresu, na kterou server zápasu přeložil, což vám může dát protokol připojení hry nebo váš klient. Pokud trasa uvádí fyzické rozhraní, pravidlo funguje. Druhý ukazuje, zda relace vůbec existuje, což odděluje „vyloučeno, ale server je mimo provoz“ od „nevyloučeno“.

Během testu držte oblast a přístupovou síť pevně. Zápas, který při každém pokusu skončí v jiném datovém centru, vytváří různé adresy a vy skončíte pronásledováním pohyblivého cíle místo ověřování pravidla. Dvě běhy se stejnou adresou mají větší cenu než deset s různými.

Po další aktualizaci zkontrolujte znovu

Každé pravidlo založené na cestě má trvanlivost měřenou v cyklech záplat. Když hra po měsíci přestane vyloučení respektovat, první věc, kterou zkontrolujete, je, zda se spustitelný soubor přesunul, a druhá, zda se vedle něj neobjevil nový pomocný proces.

Model vyloučení aplikací, který dokumentuje jeden klient, je rozumnou referencí pro to, jak se tato pravidla popisují, i když se podrobnosti mezi produkty liší. Přečtěte si ten svůj, zaznamenejte identifikátor, který jste použili, a poznamenejte datum. Právě tento záznam promění záhadu v pětiminutovou opravu při příští aktualizaci spouštěče.

Pokud klient prostě nedokáže vyjádřit hranici, kterou potřebujete, schválená širší politika je lepší než hromada nedokumentovaných výjimek. Široké a pochopené poráží úzké a špatné, zvlášť když úzká verze je to, co všichni považují za platné.

Související články