Ваш подељени тунел искључује покретач, а не игру
Покретач покреће други извршни фајл за меч, и тај процес има своје сокете. Пронађите прави процес, усагласите исправан идентификатор, затим тестирајте.
Додајете покретач на листу изузетака, преузимање прелази са спорог на брзо, а меч и даље завршава на удаљеном серверу. Ништа није покварено. Покретач и игра су два процеса са два скупа сокета, а искључивање једног не говори ништа о другом. Преузимање је убрзано јер је преузимање био саобраћај покретача; меч је нечија туђа веза, коју је отворио извршни фајл који ваше правило никада није видело.
Један инсталатер, много процеса
Савремени софтвер за игре је мало сазвежђе. Постоји клијент који вас пријављује, ажурирање које повлачи садржај, покретач који покреће игру и извршни фајл игре који сам може створити други процес за античит или за слој за упаривање мечева. Сваки од њих може држати сопствене везе ка сопственим одредиштима.
Правило изузећа обично именује један од њих. Који именује, потпуно зависи од идентификатора који VPN клијент подржава, и то је део који корисници ретко проверавају. Неки клијенти пореде путању извршног фајла, неки идентификатор пакета или bundle-а, а неки име процеса које могу делити два неповезана бинарна фајла. Прочитајте правило пре листе процеса, јер правило ограничава чак и оно што можете изразити.
Симптом дакле није „подељени тунел је покварен“. Он је „правило покрива процес који није онај који носи саобраћај до којег ми је стало“, што је много ужа и много лакше поправљива тврдња. Када то тако кажете, следећи корак престаје да буде нагађање.
Пронађите процес који поседује везу меча
Покрените игру, уђите у меч и погледајте коме припадају сокети, а не шта је на екрану. На Windows-у листа процеса плус упит за сокете по процесу одговарају на то двема командама:
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
Друга команда исписује ID процеса, не име, зато спојите два излаза по ID-у. Ред који тражите је онај чија удаљена адреса припада услузи игре, а процес који га поседује је извршни фајл који ваше правило мора да именује.
На Linux-у исто питање захтева једну команду по типу сокета, и вреди проверити оба, јер веза меча може бити UDP док је све остало TCP:
ss -tunp state established | grep -i game
ss -tunp | awk 'NR==1 || /udp/'
Ако игра ради у контејнеру или слоју компатибилности, пронађени процес може бити shim, а не бинарни фајл који сте инсталирали. У том случају важан идентификатор је онај који клијент види, а то може бити путања shim-а, и никакво уређивање оригиналног фајла то неће променити.
Усагласите идентификатор који ваш клијент подржава
Прочитајте документацију клијента о правилу изузећа пре него што било шта додате. Три уобичајена модела понашају се различито, а један од њих је замка.
| 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 |
Правила путање су најпрецизнија и најкрхкија. Ажурирање покретача које премешта извршни фајл оставља правило да показује на фајл који се више не покреће, а симптом се враћа без ичега очигледно промењеног. Правила пакета то преживљавају и могу тихо покрити помоћне процесе о којима никада нисте размишљали, што је или згодно или забрињавајуће у зависности од помоћника.
Шта год клијент подржава, не додајте ставке за сваки извршни фајл који пронађете. Листа састављена покушајима и грешкама док једна сесија није прорадила не може се прегледати и тихо ће гомилати изузетке за неповезани софтвер. Именујте пронађени процес и запишите чему је служио.
Тестирајте на мечу, не на преузимању
Брзина преузимања покретача је најгори могући тест, јер оптерећује управо онај процес који је већ био изузет. Користите оно што није радило и проверите путању, а не сопствени приказ перформанси игре:
ip route get 203.0.113.55
Get-NetTCPConnection -State Established | Where-Object RemotePort -eq 27015
Првој команди је потребна адреса на коју се сервер меча решио, а то може дати дневник веза игре или ваш клијент. Ако рута именује физички интерфејс, правило ради. Друга показује да ли сесија уопште постоји, што раздваја „изузето, али сервер је пао“ од „није изузето“.
Држите регион и приступну мрежу фикснима док тестирате. Меч који сваки покушај заврши у другом дата центру ствара различите адресе, и на крају ћете јурити покретну мету уместо да проверавате правило. Два покретања са истом адресом вреде више од десет са различитим.
Проверите поново после следећег ажурирања
Свако правило засновано на путањи има рок трајања мерен циклусима закрпа. Када игра месец дана касније престане да поштује изузеће, прво проверите да ли се извршни фајл преместио, а друго да ли се поред њега појавио нови помоћни процес.
Модел изузећа апликација који документује један клијент разуман је референтни пример за то како се ова правила описују, иако се детаљи разликују међу производима. Прочитајте свој, запишите коришћени идентификатор и забележите датум. Тај запис претвара мистерију у петоминутну поправку следећи пут када покретач објави ажурирање.
Ако клијент једноставно не може да изрази границу која вам је потребна, одобрена шира политика боља је од гомиле недокументованих изузетака. Широко и схваћено побеђује уско и погрешно, посебно када је уска верзија оно што сви верују да је на снази.