Вы дадаяце запускальнік у спіс выключэнняў, загрузка прыкметна паскараецца, а матч усё роўна апынаецца на далёкім серверы. Нішто не зламана. Запускальнік і гульня — гэта два працэсы з двума наборамі сокетаў, і выключэнне аднаго нічога не кажа пра другі. Загрузка паскорылася, бо загрузка была трафікам запускальніка; а матч — гэта чужое злучэнне, адкрытае выканальным файлам, якога вашае правіла ніколі не бачыла.

Адзін усталёўшчык, шмат працэсаў

Сучаснае гульнявое праграмнае забеспячэнне — гэта маленькае сузор'е. Ёсць кліент, які ўваходзіць у сістэму, абнаўляльнік, які спампоўвае кантэнт, запускальнік, які стартуе гульню, і выканальны файл гульні, які сам можа стварыць другі працэс для антычыта або для накладання матчмэйкінгу. Кожны з іх можа трымаць свае злучэнні да сваіх пунктаў прызначэння.

Правіла выключэння звычайна называе адзін з іх. Які менавіта — цалкам залежыць ад ідэнтыфікатара, які падтрымлівае 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

Другая каманда друкуе ідэнтыфікатар працэса, а не імя, таму звядзіце два вынікі па ідэнтыфікатары. Радок, які вы шукаеце, — той, чый далёкі адрас належыць гульнявой службе, а працэс, які ім валодае, — гэта выканальны файл, які павінна назваць вашае правіла.

У Linux тое ж пытанне патрабуе адной каманды на кожны тып сокета, і варта праверыць абодва, бо злучэнне матчу можа быць UDP, пакуль усё астатняе — TCP:

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

Калі гульня працуе ў кантэйнеры або слаі сумяшчальнасці, знойдзены працэс можа быць прамежкавым слоем, а не ўсталяваным бінарным файлам. У такім выпадку важны ідэнтыфікатар — той, які бачыць кліент, і гэта можа быць шлях прамежкавага слоя; ніякае рэдагаванне арыгінальнага файла на гэта не паўплывае.

Супастаўце ідэнтыфікатар, які падтрымлівае ваш кліент

Прачытайце дакументацыю кліента пра правіла выключэння, перш чым нешта дадаваць. Тры тыповыя мадэлі паводзяць сябе па-рознаму, і адна з іх — пастка.

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

Першай камандзе патрэбны адрас, у які развязаўся сервер матчу; яго можа даць журнал злучэнняў гульні або ваш кліент. Калі маршрут называе фізічны інтэрфейс, правіла працуе. Другая паказвае, ці існуе сесія наогул, і гэта аддзяляе «выключана, але сервер не працуе» ад «не выключана».

Трымайце рэгіён і сетку доступу нязменнымі падчас праверкі. Матч, які кожную спробу трапляе ў розны цэнтр апрацоўкі даных, дае розныя адрасы, і вы будзеце ганяцца за рухомай мэтай замест таго, каб праверыць правіла. Два запускі з адным адрасам каштуюць больш за дзесяць з рознымі.

Пераправерце пасля наступнага абнаўлення

Любое правіла на аснове шляху мае тэрмін прыдатнасці, які вымяраецца цыкламі патчаў. Калі праз месяц гульня перастае паважаць выключэнне, першае, што трэба праверыць, — ці перамясціўся выканальны файл, а другое — ці з'явіўся побач новы дапаможны працэс.

Мадэль выключэння праграм, апісаная адным кліентам, — разумная даведка для таго, як апісваюцца гэтыя правілы, хоць падрабязнасці адрозніваюцца паміж прадуктамі. Прачытайце сваю, запішыце выкарыстаны ідэнтыфікатар і адзначце дату. Менавіта гэты запіс ператварае загадку ў пяціхвіліннае выпраўленне наступным разам, калі запускальнік выпусціць абнаўленне.

Калі кліент проста не можа выразіць патрэбную вам мяжу, ухваленая шырэйшая палітыка лепш за купу недакументаваных выключэнняў. Шырокае і зразумелае перамагае вузкае і няправільнае, асабліва калі вузкая версія — гэта тое, што ўсе лічаць укаранёным.

Падобныя артыкулы