Via dividita tunelo ekskludas la lanĉilon, ne la ludon
Lanĉilo startigas alian plenumeblon por la matĉo, kaj tiu procezo posedas siajn proprajn ingojn. Trovu la veran procezon, kongruigu la ĝustan identigilon, poste testu.
Vi aldonas la lanĉilon al la ekskluda listo, la elŝuto saltas de malrapida al rapida, kaj la matĉo ankoraŭ surteriĝas sur malproksima servilo. Nenio estas difektita. La lanĉilo kaj la ludo estas du procezoj kun du aroj da ingoj, kaj ekskludi unu diras nenion pri la alia. La elŝuto plirapidiĝis ĉar la elŝuto estis la trafiko de la lanĉilo; la matĉo estas la konekto de iu alia, malfermita de plenumeblo, kiun via regulo neniam vidis.
Unu instalilo, multaj procezoj
Moderna luda programaro estas malgranda konstelacio. Estas kliento, kiu ensalutas vin, ĝisdatigilo, kiu eltiras enhavon, lanĉilo, kiu startigas la ludon, kaj luda plenumeblo, kiu mem povas krei duan procezon por kontraŭtrompado aŭ por la matĉa tavolo. Ĉiu el ili povas teni siajn proprajn konektojn al siaj propraj celoj.
Ekskluda regulo kutime nomas unu el ili. Kiun ĝi nomas, tute dependas de la identigilo, kiun la VPN-kliento subtenas, kaj tio estas la parto, kiun uzantoj malofte kontrolas. Iuj klientoj kongruigas plenumeblan vojon, iuj pakaĵan aŭ faskan identigilon, kaj iuj procezan nomon, kiun du senrilataj binaraj dosieroj povas kunhavi. Legu la regulon antaŭ ol legi la procezan liston, ĉar la regulo limigas eĉ tion, kion vi povas esprimi.
La simptomo do ne estas “la dividita tunelo estas difektita”. Ĝi estas “la regulo kovras procezon, kiu ne estas tiu, kiu portas la trafikon pri kiu mi zorgas”, kio estas multe pli mallarĝa kaj multe pli riparigebla aserto. Fojon vi diras ĝin tiel, la sekva paŝo ĉesas esti konjekto.
Trovu la procezon, kiu posedas la matĉan konekton
Startigu la ludon, eniru matĉon, kaj rigardu, kiu posedas la ingojn anstataŭ kio estas sur la ekrano. En Windows la proceza listo plus inga demando por ĉiu procezo respondas tion per du komandoj:
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
La dua komando presas procezan ID, ne nomon, do kunigu la du eligojn laŭ ID. La vico, kiun vi serĉas, estas tiu, kies fora adreso apartenas al la luda servo, kaj ĝia poseda procezo estas la plenumeblo, kiun via regulo devas nomi.
En Linux la sama demando postulas unu komandon por inga tipo, kaj indas kontroli ambaŭ, ĉar matĉa konekto povas esti UDP dum ĉio alia estas TCP:
ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'
Se la ludo funkcias en ujo aŭ en kongrueca tavolo, la procezo, kiun vi trovas, povas esti ŝimo anstataŭ la binara dosiero, kiun vi instalis. En tiu kazo la grava identigilo estas tiu, kiun la kliento vidas, kio povas esti la vojo de la ŝimo, kaj neniu kvanto da redaktado de la originala dosiero efikos ĝin.
Kongruigu la identigilon, kiun via kliento subtenas
Legu la dokumentaron de la kliento pri la ekskluda regulo antaŭ ol aldoni ion. La tri kutimaj modeloj kondutas malsame, kaj unu el ili estas kaptilo.
| Identifier | How it behaves | Failure mode |
|---|---|---|
| Executable path | Matches exactly the file at that path | Breaks when an update moves the binary |
| Process name | Matches any binary with that name | Too broad; catches unrelated software |
| Package or bundle id | Matches a signed application group | May include services you did not intend |
Vojo-reguloj estas la plej precizaj kaj la plej rompiĝemaj. Ĝisdatigo de la lanĉilo, kiu movas la plenumeblon, lasas la regulon montri al dosiero, kiu ne plu funkcias, kaj la simptomo revenas sen ke io videble ŝanĝiĝu. Pakaĵaj reguloj postvivas tion, kaj ili ankaŭ povas silente kovri helpajn procezojn, pri kiuj vi neniam pensis, kio estas aŭ oportuna aŭ alarmiga laŭ la helpanto.
Kion ajn la kliento subtenas, ne aldonu erojn por ĉiu plenumeblo, kiun vi trovas. Listo kunmetita per provoj kaj eraroj ĝis unu seanco funkciis ne estas revizebla, kaj ĝi silente amasigos esceptojn por senrilata programaro. Nomu la procezon, kiun vi trovis, kaj skribu, por kio ĝi estis.
Testu en la matĉo, ne en elŝuto
La elŝuta rapideco de la lanĉilo estas la plej malbona ebla testo, ĉar ĝi ekzercas ĝuste la procezon, kiu jam estis ekskludita. Uzu tion, kio malsukcesis, kaj kontrolu la vojon anstataŭ la propran agadmontrilon de la ludo:
ip route get 203.0.113.55
Get-NetTCPConnection -State Established | Where-Object RemotePort -eq 27015
La unua komando bezonas la adreson, al kiu solviĝis la matĉa servilo, kiun la konekta protokolo de la ludo aŭ via kliento povas doni al vi. Se la vojo nomas la fizikan interfacon, la regulo funkcias. La dua montras, ĉu seanco entute ekzistas, kio apartigas “ekskludita sed la servilo estas malŝaltita” de “ne ekskludita”.
Tenu la regionon kaj la alirreton fiksaj dum vi testas. Matĉo, kiu surteriĝas en malsama datencentro ĉiufoje, produktas malsamajn adresojn, kaj vi finos ĉasante moviĝantan celon anstataŭ validigante regulon. Du ruloj kun la sama adreso valoras pli ol dek kun malsamaj.
Rekontrolu post la sekva ĝisdatigo
Ĉiu vojo-bazita regulo havas konservodaŭron mezuritan en flikaj cikloj. Kiam la ludo post monato ĉesas respekti la ekskludon, la unua afero kontrolebla estas, ĉu la plenumeblo moviĝis, kaj la dua estas, ĉu apud ĝi aperis nova helpa procezo.
La aplikaĵa ekskluda modelo, kiun dokumentas unu kliento, estas racia referenco por kiel ĉi tiuj reguloj estas priskribitaj, kvankam la detaloj varias inter produktoj. Legu vian, registru la identigilon, kiun vi uzis, kaj notu la daton. Tiu registro estas tio, kio transformas misteron en kvinminutan riparon la venontan fojon, kiam la lanĉilo eldonos ĝisdatigon.
Se la kliento simple ne povas esprimi la limon, kiun vi bezonas, aprobita pli larĝa politiko estas pli bona ol amaso da nedokumentitaj esceptoj. Larĝa kaj komprenata superas mallarĝan kaj malĝustan, precipe kiam la mallarĝa versio estas tio, kion ĉiuj kredas esti en loko.