Сиз иштетүүчүнү четтетүү тизмесине кошосуз, жүктөө жайдан тезге секирет, ал эми матч дагы эле алыскы серверге түшөт. Эч нерсе бузулган эмес. Иштетүүчү жана оюн — эки сокет топтому бар эки процесс, жана бирөөнү четтетүү экинчиси жөнүндө эч нерсе айтпайт. Жүктөө ылдамдады, анткени жүктөө иштетүүчүнүн трафиги эле; матч — башка бирөөнүн байланышы, аны сиздин эрежеңиз эч качан көрбөгөн аткарылуучу файл ачкан.

Бир орнотуучу, көп процесс

Заманбап оюн программасы — кичинекей топ жылдыз. Сизди киргизүүчү клиент, мазмунду тартуучу жаңырткыч, оюнду баштоочу иштетүүчү жана античит же матч шайкештирүү катмары үчүн өзү экинчи процесс жарата алган оюндун аткарылуучу файлы бар. Алардын ар бири өз максаттарына өз байланыштарын кармай алат.

Четтетүү эрежеси адатта алардын бирин атайт. Кайсынысын атайары VPN клиенти колдогон идентификаторго толугу менен көз каранды, жана бул колдонуучулар сейрек текшере турган бөлүк. Кээ бир клиенттер аткарылуучу файлдын жолун дал келтирет, кээ бирлери топтом же пакет идентификаторун, ал эми кээ бирлери эки байланышсыз бинардык файл бөлүшө алган процесс атын дал келтирет. Процесстер тизмесин окуудан мурун эрежени окуңуз, анткени эреже эмнени билдире аларыңызды да чектейт.

Ошондуктан симптом «бөлүнгөн туннель бузулган» эмес. Ал «эреже мага маанилүү трафикти ташыган процесс эмес, башка процессти камтыйт», бул алда канча тар жана алда канча оңдоого боло турган билдирүү. Ушундай деп айткандан кийин кийинки кадам божомол болууну токтотот.

Матчтын байланышына ээ болгон процессти табыңыз

Оюнду баштаңыз, матчка кириңиз жана экранда эмне бар экенине эмес, сокеттер кимге таандык экенине караңыз. 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дин жолу болушу мүмкүн, жана баштапкы файлды канчалык оңдосоңуз да ага таасир этпейт.

Клиентиңиз колдогон идентификаторду дал келтириңиз

Бир нерсе кошуудан мурун клиенттин четтетүү эрежеси тууралуу документтерин окуңуз. Үч жалпы модель ар башка жүрүм-турум көрсөтөт, жана алардын бири капкан.

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

Жол эрежелери эң так жана эң морт. Аткарылуучу файлды жылдырган иштетүүчүнүн жаңыртуусу эрежени мындан ары иштебеген файлга көрсөтүп калтырат, жана ачык эч нерсе өзгөрбөсө да симптом кайтат. Пакет эрежелери буга туруштук берет, жана алар сиз эч качан ойлогон эмес жардамчы процесстерди да тынч жаап калышы мүмкүн, бул жардамчыга жараша ыңгайлуу же тынчсыздандыргыч.

Клиент эмнени колдосо да, тапкан ар бир аткарылуучу файл үчүн жазуу кошпоңуз. Бир сессия иштегенге чейин сынап-жаңылып чогултулган тизмени карап чыгуу мүмкүн эмес, жана ал байланышсыз программалар үчүн өзгөчөлүктөрдү тынч топтойт. Тапкан процессти атаңыз жана ал эмне үчүн керек болгонун жазыңыз.

Матчта текшериңиз, жүктөөдө эмес

Иштетүүчүнүн жүктөө ылдамдыгы — мүмкүн болгон эң начар текшерүү, анткени ал так мурун четтетилген процессти иштетет. Ишке ашпаган нерсени колдонуңуз жана оюндун өзүнүн аткаруу дисплейинин ордуна жолду текшериңиз:

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

Биринчи буйрукка матч сервери чечкен дарек керек, аны оюндун байланыш журналы же клиентиңиз бере алат. Эгер маршрут физикалык интерфейсти атаса, эреже иштейт. Экинчиси сессиянын бар-жоктугун көрсөтөт, бул «четтетилген, бирок сервер өчүк» жана «четтетилбеген» абалдарын ажыратат.

Текшерүү учурунда аймакты жана кирүү тармагын туруктуу кармаңыз. Ар бир аракетте башка маалымат борборуна түшкөн матч ар башка даректерди жаратат, жана эрежени текшерүүнүн ордуна кыймылдуу бутаны кууп каласыз. Бир дарек менен эки жүргүзүү ар башка даректер менен он жүргүзүүдөн кымбат.

Кийинки жаңыртуудан кийин кайра текшериңиз

Жолго негизделген ар кандай эреженин патч циклдери менен өлчөнгөн жашоо мөөнөтү бар. Оюн бир айдан кийин четтетүүнү сыйлоону токтотсо, биринчи текшериле турган нерсе — аткарылуучу файлдын жылган-жылбаганы, экинчиси — анын жанында жаңы жардамчы процесс пайда болгон-болбогону.

Бир клиент документтештирген колдонмолорду четтетүү модели бул эрежелердин кантип сүрөттөлүшүнө акылга сыярлык шилтеме, бирок деталдар продуктулар арасында айырмаланат. Өзүңүздүкүн окуңуз, колдонгон идентификаторду жазыңыз жана күндү белгилеңиз. Ошол жазуу кийинки жолу иштетүүчү жаңыртуу чыгарганда сырды беш мүнөттүк оңдоого айландырат.

Эгер клиент керектүү чекти такыр билдире албаса, бекитилген кеңири саясат документтештирилбеген өзгөчөлүктөрдүн үймөгүнөн жакшы. Кенен жана түшүнүктүү тар жана катадан жеңет, өзгөчө тар версия баары күчүндө деп ишенген нерсе болгондо.

Тектеш макалалар