Pridáte spúšťač do zoznamu vylúčení, sťahovanie preskočí z pomalého na rýchle a zápas stále skončí na vzdialenom serveri. Nič nie je pokazené. Spúšťač a hra sú dva procesy s dvoma sadami soketov a vylúčenie jedného nič nehovorí o druhom. Sťahovanie sa zrýchlilo, pretože sťahovanie bola prevádzka spúšťača; zápas je niekoho iné spojenie, ktoré otvoril spustiteľný súbor, ktorý vaše pravidlo nikdy nevidelo.

Jeden inštalátor, veľa procesov

Moderný herný softvér je malé súhvezdie. Je tu klient, ktorý vás prihlási, aktualizátor, ktorý sťahuje obsah, spúšťač, ktorý spustí hru, a spustiteľný súbor hry, ktorý sám môže vytvoriť druhý proces pre anti-cheat alebo pre vrstvu párovania zápasov. Každý z nich môže držať vlastné spojenia k vlastným cieľom.

Pravidlo vylúčenia zvyčajne pomenuje jeden z nich. Ktorý to je, závisí úplne od identifikátora, ktorý klient VPN podporuje, a to je časť, ktorú používatelia málokedy kontrolujú. Niektorí klienti porovnávajú cestu k spustiteľnému súboru, iní identifikátor balíka alebo bundle a ďalší názov procesu, ktorý môžu zdieľať dva nesúvisiace binárne súbory. Prečítajte si pravidlo pred zoznamom procesov, pretože pravidlo obmedzuje aj to, čo môžete vyjadriť.

Príznak teda nie je „rozdelený tunel je pokazený“. Je to „pravidlo pokrýva proces, ktorý nie je tým, kto nesie prevádzku, na ktorej mi záleží“, čo je oveľa užšie a oveľa opraviteľnejšie tvrdenie. Keď to poviete takto, ďalší krok prestane byť hádaním.

Nájdite proces, ktorý vlastní spojenie zápasu

Spustite hru, vstúpte do zápasu a pozrite sa, kto vlastní sokety, nie čo je na obrazovke. V Windows na to zoznam procesov plus dopyt na sokety pre každý proces odpovedajú dvoma príkazmi:

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ý príkaz vypisuje ID procesu, nie názov, takže oba výstupy spojte podľa ID. Riadok, ktorý hľadáte, je ten, ktorého vzdialená adresa patrí hernej službe, a vlastniaci proces je spustiteľný súbor, ktorý musí vaše pravidlo pomenovať.

V Linuxe tá istá otázka vyžaduje jeden príkaz na typ soketu a oplatí sa skontrolovať oba, pretože spojenie zápasu môže byť UDP, zatiaľ čo všetko ostatné je TCP:

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

Ak hra beží v kontajneri alebo vo vrstve kompatibility, nájdený proces môže byť shim, nie binárny súbor, ktorý ste nainštalovali. V takom prípade je dôležitý identifikátor ten, ktorý vidí klient, a môže to byť cesta shimu, a žiadne úpravy pôvodného súboru to neovplyvnia.

Priraďte identifikátor, ktorý váš klient podporuje

Pred pridaním čohokoľvek si prečítajte dokumentáciu klienta k pravidlu vylúčenia. Tri bežné modely sa správajú odlišne a jeden z nich je pasca.

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

Pravidlá cesty sú najpresnejšie a najkrehkejšie. Aktualizácia spúšťača, ktorá presunie spustiteľný súbor, nechá pravidlo ukazovať na súbor, ktorý už nebeží, a príznak sa vráti bez toho, aby sa niečo zjavne zmenilo. Pravidlá balíkov to prežijú a môžu tiež potichu pokryť pomocné procesy, o ktorých ste nikdy neuvažovali, čo je buď pohodlné, alebo znepokojujúce podľa pomocníka.

Čokoľvek klient podporuje, nepridávajte položky pre každý spustiteľný súbor, ktorý nájdete. Zoznam zostavený metódou pokus-omyl, kým jedna relácia nefungovala, sa nedá skontrolovať a bude potichu hromadiť výnimky pre nesúvisiaci softvér. Pomenujte proces, ktorý ste našli, a zapíšte, na čo slúžil.

Testujte na zápase, nie na sťahovaní

Rýchlosť sťahovania spúšťača je najhorší možný test, pretože precvičuje presne ten proces, ktorý už bol vylúčený. Použite to, čo zlyhávalo, a kontrolujte cestu, nie vlastné zobrazenie výkonu hry:

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

Prvý príkaz potrebuje adresu, na ktorú sa server zápasu preložil, a môže ju dať protokol pripojení hry alebo váš klient. Ak trasa uvádza fyzické rozhranie, pravidlo funguje. Druhý ukazuje, či relácia vôbec existuje, čo oddeľuje „vylúčené, ale server je mimo prevádzky“ od „nevylúčené“.

Počas testu držte oblasť a prístupovú sieť pevne. Zápas, ktorý pri každom pokuse skončí v inom dátovom centre, vytvára rôzne adresy a vy skončíte prenasledovaním pohyblivého cieľa namiesto overovania pravidla. Dve behy s rovnakou adresou majú väčšiu cenu než desať s rôznymi.

Po ďalšej aktualizácii skontrolujte znova

Každé pravidlo založené na ceste má trvanlivosť meranú v cykloch záplat. Keď hra o mesiac prestane rešpektovať vylúčenie, prvá vec, ktorú skontrolujete, je, či sa spustiteľný súbor presunul, a druhá, či sa vedľa neobjavil nový pomocný proces.

Model vylúčenia aplikácií, ktorý dokumentuje jeden klient, je rozumnou referenciou pre to, ako sa tieto pravidlá opisujú, aj keď sa podrobnosti medzi produktmi líšia. Prečítajte si ten svoj, zaznamenajte použitý identifikátor a poznačte dátum. Práve tento záznam premení záhadu na päťminútovú opravu pri ďalšej aktualizácii spúšťača.

Ak klient jednoducho nedokáže vyjadriť hranicu, ktorú potrebujete, schválená širšia politika je lepšia než hromada nedokumentovaných výnimiek. Široké a pochopené poráža úzke a nesprávne, najmä keď úzka verzia je to, čo všetci považujú za platné.

Súvisiace články