دو تنظیم ویندوز در Settings یکسان به نظر می‌رسند و اصلاً یکسان رفتار نمی‌کنند. یکی پروفایل VPN کپی‌شده با تریگر برنامه است، بنابراین اجرای یک فایل اجرایی تونل را بالا می‌آورد. دیگری پروفایل تونل تقسیم‌شده است که فهرست مسیرهایش تصادفاً همان چیزی را پوشش می‌دهد که آن برنامه با آن صحبت می‌کند. اولی پاسخ می‌دهد تونل کِی وجود دارد. دومی پاسخ می‌دهد کدام بسته‌ها واردش می‌شوند، و فقط دومی بقیه ماشین را روی پیوند فیزیکی می‌گذارد در حالی که برنامه متصل می‌ماند.

تریگر یک قاعده چرخه عمر است، نه قاعده مسیریابی

Add-VpnConnectionTriggerApplication مسیر فایل اجرایی را به نام پروفایل گره می‌زند. وقتی آن فرایند شروع می‌شود، مدیر اتصال‌های دسترسی دور پروفایل را می‌گیرد، و وقتی شرط تریگر تمام شود اتصال ممکن است قطع شود. هیچ‌چیز در آن تبادل سوکت‌ها را بررسی نمی‌کند. این دستور به یک shell ارتقایافته، مسیر کامل فایل دودویی و -Force وقتی ورودی موجودی را جایگزین می‌کنید نیاز دارد. تأیید کنید که پیوند زنده ماند با Get-VpnConnectionTrigger به‌جای اعتماد به اعلان؛ مرجع Microsoft درباره Add-VpnConnectionTriggerApplication پارامترها و مثال‌ها را فهرست می‌کند.

دو محدودیت بیشتر گزارش‌های «تریگر هیچ کاری نمی‌کند» را توضیح می‌دهد. تریگرها حول پروفایل‌های همه کاربران ساخته می‌شوند، پس دامنه پروفایل اولین چیزی است که باید روشن شود، و مسیر برنامه باید با فایل دودویی که واقعاً اجرا می‌شود بخواند، نه با میانبر یا راه‌اندازی که فرایند دومی می‌سازد. محدودیت دیگر عمدی است: در شبکه‌ای که ویندوز آن را قابل‌اعتماد طبقه‌بندی می‌کند، تریگر بیکار می‌ماند، چون پروفایل برای کار بیرون دفتر ساخته شده است.

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

تونل تقسیم‌شده تعیین می‌کند چه چیزی از تونل عبور کند

با خاموش بودن تونل تقسیم‌شده، ویندوز یک مسیر پیش‌فرض مبتنی بر کلاس با متریک پایین روی واسط 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 نام را پوشش دهند، برنامه می‌تواند از واسط فیزیکی حل کند و سپس نشانی‌ای را بگیرد که هرگز داخل پیشوندهای تونل‌شده نبوده است.

سه شکل، و هرکدام چه می‌خرد

جدول همان بخشی است که به دیوار می‌چسباندم، چون تصمیم درباره شعاع اثر است نه ویژگی‌ها. اگر مقصدهای برنامه پیشوندهای پایداری هستند که می‌توانید فهرست کنید، تقسیم مسیریابی‌شده جداسازی با کوچکترین رد پا را می‌دهد. اگر نه، پروفایل با مسیر پیش‌فرض پشت یک VM یا دستگاه دوم جداسازی را صادقانه نگه می‌دارد به قیمت جابه‌جا کردن بیش از یک فرایند.

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

چیزی که هیچ‌کدام ارائه نمی‌دهند اتصال در سطح سوکت روی میزبان است. کلاینت کلاسیک 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 حل می‌شود.
  • هیچ تریگر آویزانی پس از حذف پروفایل نمی‌ماند.

مقالات مرتبط