Дзве канфігурацыі Windows выглядаюць у «Наладах» аднолькава і паводзяць сябе цалкам па-рознаму. Адна — скапіяваны профіль VPN з трыгерам праграмы, таму запуск аднаго выканальнага файла ўздымае тунель. Другая — профіль з падзеленым тунеляваннем, чый спіс маршрутаў выпадкова пакрывае тое, з чым размаўляе гэтая праграма. Першая адказвае, калі тунель існуе. Другая адказвае, якія пакеты ў яго ўваходзяць, і толькі другая пакідае астатнюю машыну на фізічным канале, пакуль праграма застаецца падключанай.

Трыгер — правіла жыццёвага цыклу, а не правіла маршрутызацыі

Add-VpnConnectionTriggerApplication звязвае шлях да выканальнага файла з імем профілю. Калі гэты працэс запускаецца, дыспетчар падключэнняў аддаленага доступу набірае профіль, і калі ўмова трыгера сканчаецца, злучэнне можа ўпасці. Нішто ў гэтым абмене не правярае сокеты. Камандзе патрэбна падвышаная абалонка, поўны шлях да бінарніка і -Force калі вы замяняеце існуючы запіс. Пераканайцеся, што сувязь захавалася, з дапамогай Get-VpnConnectionTrigger замест таго, каб давяраць запрашэнню; даведнік Microsoft па Add-VpnConnectionTriggerApplication пералічвае параметры і прыклады.

Дзве мяжы тлумачаць большасць паведамленняў «трыгер нічога не робіць». Трыгеры будуюцца вакол профіляў для ўсіх карыстальнікаў, таму вобласць профілю — першае, што трэба ўладкаваць, а шлях праграмы мусіць супадаць з рэальна запусканым бінарнікам, а не з ярлыком ці загрузчыкам, што стварае другі працэс. Другая мяжа наўмысная: у сетцы, якую Windows класіфікуе як давераную, трыгер застаецца бяздзейным, бо профіль разлічаны на працу па-за офісам.

Add-VpnConnectionTriggerApplication -Name "APP_VPN" -ApplicationID "C:\Program Files\Vendor\app.exe" -Force
Get-VpnConnectionTrigger -Name "APP_VPN" | Format-List *
Get-VpnConnection -Name "APP_VPN" | Format-List Name,ConnectionStatus,SplitTunneling,AllUserConnection

Падзелены тунель вырашае, што перасякае тунель

Калі падзелены тунель выключаны, Windows усталёўвае на інтэрфейс VPN класавы маршрут па змаўчанні з нізкай метрыкай. Яму ідзе кожны сокет, уключна з браўзерам і службай абнаўленняў, таму трыгер у такой канфігурацыі рухае ўсю машыну, пакуль профіль падключаны. Трыгер па-ранейшаму толькі правіла жыццёвага цыклу; радыус паражэння прыйшоў ад маршруту.

Калі падзелены тунель уключаны, профіль нясе толькі прэфіксы, якія прасоўвае шлюз або якія вы дадаяце на інтэрфейс VPN. Усё астатняе працягвае выкарыстоўваць фізічны маршрут па змаўчанні. Гэта тая схема, якую звычайна маюць на ўвазе пад «адна праграма праз асобны выхад», і яна ад пачатку да канца з'яўляецца рашэннем пра маршрутызацыю.

Set-VpnConnection -Name "APP_VPN" -SplitTunneling $true
Get-VpnConnection -Name "APP_VPN" | Select-Object SplitTunneling
Get-NetRoute -InterfaceAlias "APP_VPN" | Sort-Object DestinationPrefix

Дзе маршрутызаванае падзяленне перастае ізаляваць праграму

Звычайны збой — прызначэнне, якое так і не з'яўляецца ў спісе маршрутаў тунеля. Праграма, якая ўваходзіць па адным адрасе, а потым стрыміць з CDN або развязвае дзясятак зменных канчатковых кропак, частку злучэнняў пакладзе на інтэрфейс VPN, а астатнія — на Wi-Fi. IPv6 — асобная табліца, таму профіль, які прасоўвае толькі прэфіксы IPv4, можа выглядаць правільным, пакуль трафік праграмы праз IPv6 застаецца лакальным.

Два меншыя эфекты важаць не менш. Перамагае самае доўгае супадзенне прэфікса, таму больш канкрэтны on-link маршрут, /32, прасунуты для хоста кіравання, або падсетка другога адаптара могуць перайграць тунель менавіта для патрэбнага вам адраса. Развязанне імён таксама адбываецца да маршрутызацыі: калі DNS-серверы профілю або правіла NRPT не пакрываюць імя, праграма можа развязаць яго праз фізічны адаптар і потым набраць адрас, якога ніколі не было ўсярэдзіне тунеляваных прэфіксаў.

Тры формы і што кожная дае

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

ShapeWhat starts the tunnelWhat enters itPick it when
Trigger plus routed splitProcess startOnly pushed or added prefixesThe app's endpoints are stable prefixes and the host should stay direct
Trigger plus default routeProcess startEverything, machine-wideYou need one exit for all traffic and accept the wider scope
Separate VM or deviceGuest boot or loginEverything inside that guestThe app's destinations rotate, or the host must keep its own public address

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

Праверце пару за адзін праход

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

$app = Get-Process app | Select-Object -First 1
Get-VpnConnection -Name "APP_VPN" | Select-Object ConnectionStatus
Get-NetTCPConnection -OwningProcess $app.Id -State Established | Select-Object RemoteAddress,RemotePort
Find-NetRoute -RemoteIPAddress 203.0.113.10

Find-NetRoute называе інтэрфейс і наступны скачок, які панёс бы гэтае прызначэнне. Фізічны псеўданім там азначае, што тунель узняты і для гэтага патоку неважны: праверце прасунутыя прэфіксы, потым больш канкрэтныя маршруты, потым IPv6. Калі стан зусім не змяняецца, трыгер не спрацаваў, і шлях да выканальнага файла, вобласць профілю і аперацыйны часопіс кліента VPN — тры месцы, куды глядзець.

Прыбярыце ўсё акуратна, каб наступны тэст быў сумленным

Выдаляйце ў адваротным парадку зборкі: спачатку трыгер праграмы, потым профіль. Выдаленне профілю пры пакінутым трыгеры пакідае вісячую сувязь, якая заблытвае наступную спробу, і Remove-VpnConnection -Force не заўсёды ачышчае запіс тэлефоннай кнігі, створаны па-за камандамі.

Запісы для асобных карыстальнікаў ляжаць у rasphone.pbk карыстальніка ў профілі Roaming; запісы для ўсіх карыстальнікаў ляжаць у ProgramData. Праверце сховішча, што адпавядае вобласці профілю, зноў падключыце захаваны профіль і пераканайцеся, што яго маршруты і DNS паводзяць сябе як раней, каб пазнейшы тэст вымяраў унесеную змену, а не рэшткавы стан.

  • Тунель уздымаецца пры запуску працэсу, а не пры ўваходзе.
  • На інтэрфейсе VPN з'яўляюцца толькі прызначаныя прэфіксы.
  • Сапраўдны аддалены адрас праграмы развязваецца ў псеўданім VPN.
  • Пасля выдалення профілю не застаецца вісячага трыгера.

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