تریگر VPN بهازای برنامه در ویندوز در برابر تونل تقسیمشده: کدام جدا میکند
پروفایل VPN ویندوز که با یک برنامه فعال میشود فقط یک تونل بالا میآورد. تونل تقسیمشده مسیریابیشده تعیین میکند چه چیزی واردش شود، و هرکدام برای یک برنامه به شکلی متفاوت شکست میخورند.
دو تنظیم ویندوز در 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 یا دستگاه دوم جداسازی را صادقانه نگه میدارد به قیمت جابهجا کردن بیش از یک فرایند.
| Shape | What starts the tunnel | What enters it | Pick it when |
|---|---|---|---|
| Trigger plus routed split | Process start | Only pushed or added prefixes | The app's endpoints are stable prefixes and the host should stay direct |
| Trigger plus default route | Process start | Everything, machine-wide | You need one exit for all traffic and accept the wider scope |
| Separate VM or device | Guest boot or login | Everything inside that guest | The 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 حل میشود.
- هیچ تریگر آویزانی پس از حذف پروفایل نمیماند.