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

دکمه حذف پیکربندی واقعاً چه چیزی را پاک می‌کند

هر VPN که اضافه می‌کنید به یک سرویس شبکه تبدیل می‌شود، همان نوع شیء که Wi-Fi یا Thunderbolt Bridge هستند. macOS همه آن‌ها را اینجا نگه می‌دارد: /Library/Preferences/SystemConfiguration/preferences.plist، هر یک با شناسه سرویس، نام نمایشی و یک دیکشنری پیکربندی که نوع تونل، نشانی سرور و شیوه آغاز تونل را توصیف می‌کند.

وقتی تنظیمات سیستم و VPN را باز می‌کنید، روی دکمه اطلاعات کنار یک سرویس کلیک می‌کنید، حذف پیکربندی را انتخاب و تأیید می‌کنید، macOS تونل را متوقف می‌کند، آن شیء سرویس را پاک می‌کند و مخزن را بازنویسی می‌کند. برچیدن برای آنچه سیستم مالک آن است کامل است: سرویس از فهرست رفته و هیچ چیز آن را هنگام ورود آغاز نمی‌کند.

چیزی که دکمه به آن نمی‌رسد، هر چیزی است که زیرسیستم دیگری مالک آن است. بسته برنامه اینجا زندگی می‌کند: /Applications. یک کلاینت NetworkExtension به‌عنوان یک افزونه سیستم اجرا می‌شود که جدا از پیکربندی‌اش ثبت شده است. اعتبارنامه‌ها آیتم‌های کلیدزنجیر با کنترل‌های دسترسی همان کلیدزنجیری هستند که آن‌ها را نگه می‌دارد. یک پروفایل پیکربندی متعلق به سیستم پروفایل است. سرویس را حذف کنید و هر چهار مورد دقیقاً همان‌جا می‌مانند.

فهرست کنید که مک هنوز چه چیزی را نصب‌شده می‌پندارد

پیش از حذف هر چیزی، فهرست‌برداری کنید. سه فرمان سه لایه‌ای را پوشش می‌دهند که همان خرابی مشهود را می‌سازند:

scutil --nc list
networksetup -listallnetworkservices
profiles -P

scutil --nc list نمای معتبر پیکربندی‌های VPN است، با وضعیت اتصال، نام سرویس و شناسه سرویس. اغلب ورودی‌هایی را نشان می‌دهد که هرگز در فهرست تنظیمات دیده نمی‌شوند: سرویس‌های باقی‌مانده از کلاینتی که ماه‌ها پیش حذف کرده‌اید، و پیکربندی‌های بر اساس تقاضا که بی‌صدا آغاز می‌شوند. networksetup -listallnetworkservices سرویس‌های شبکه را با نام‌هایی نشان می‌دهد که ابزارهای خط فرمان انتظار دارند، و همین چیزی است که برای حذف بر اساس نام لازم دارید. profiles -P پروفایل‌های پیکربندی نصب‌شده را فهرست می‌کند؛ روی یک مک مدیریت‌شده، VPN شاید اصلاً سرویسی نباشد که خودتان افزوده‌اید، بلکه یک محموله درون یکی از آن پروفایل‌ها باشد.

فهرست‌ها را با هم بخوانید، نه اینکه به اولی اعتماد کنید. سرویسی که در scutil هست اما در تنظیمات نیست، معمولاً یعنی یک کلاینت شخص ثالث مالک تونل است و آن را در پنجره خودش نمایش می‌دهد. سرویسی که در هر دو نما هست اما در تنظیمات خاکستری است یعنی سیاست. نامی که پس از حذف دوباره ظاهر می‌شود یعنی چیزی آن را بازمی‌سازد، و آن چیز هدف واقعی است.

سرویس را از راه مالکش حذف کنید

برای سرویسی که خودتان افزوده‌اید، در مسیر مستند بمانید: تنظیمات سیستم، VPN، دکمه اطلاعات، حذف پیکربندی. اپل این مسیر را مستند کرده و مخزن پیکربندی را سازگار نگه می‌دارد. ویرایش دستی preferences.plist در حالی که پشته شبکه در حال اجراست، همان راهی است که به سرویس‌های تکراری یا زامبی می‌رسید که هیچ رابطی آن‌ها را حذف نمی‌کند.

از یک ترمینال، سرویس را با نامش حذف کنید با networksetup -removenetworkservice "Service Name"، سپس با این تأیید کنید: scutil --nc list. این فرمان روی همان فهرست سرویسی عمل می‌کند که رابط کاربری، بنابراین نامی که در networksetup -listallnetworkservices نیست، با هیچ‌یک از دو مسیر حذف نمی‌شود. وقتی یک کلاینت مالک تونل است، ابتدا از مسیر حذف یا حذف نصب همان کلاینت استفاده کنید، چون کلاینت دفعه بعد که اجرا شود سرویس را بازمی‌سازد.

اگر VPN از مدیریت دستگاه آمده، شما مالک نیستید. پروفایل‌هایی که MDM نصب می‌کند می‌توانند غیرقابل‌حذف علامت‌گذاری شوند، و حتی یک پروفایل قابل‌حذف هم ممکن است در بررسی بعدی دوباره فرستاده شود. با این تأیید کنید: profiles -P، سپس فرایند خروج سازمان خود را به کار ببرید. حذف محموله به‌صورت محلی یا شکست می‌خورد یا نصب دوباره را برمی‌انگیزد.

باقی‌مانده‌هایی که بدون سرویس دوباره وصل می‌شوند

گزارش معمول «برگشت» بازگشت سرویس نیست، بلکه افزونه‌ای است که مالک آن است. افزونه‌های سیستم ثبت‌شده و افزونه‌های برنامه از نوع افزونه شبکه را فهرست کنید:

systemextensionsctl list
pluginkit -m -p com.apple.networkextension.packet-tunnel

یک کلاینت NetworkExtension ارائه‌دهنده تونل خود را زیر شناسه خودش نصب‌شده نگه می‌دارد، جدا از هر پیکربندی. افزونه می‌تواند پس از رفتن پیکربندی فعال بماند، و عامل نوار منوی کلاینت می‌تواند دفعه بعد که شروع شود پیکربندی تازه‌ای بسازد، و گاهی همان نامی را که تازه حذف کرده‌اید دوباره به کار ببرد. آیتم‌های ورود و کمک‌کننده فروشنده را اینجا بررسی کنید: /Library/LaunchDaemons پیش از آنکه نتیجه بگیرید حذف شکست خورده است.

اعتبارنامه‌ها باقی‌مانده دوم هستند. گذرواژه یا گواهی کلاینت ذخیره‌شده در کلیدزنجیر ورود با سرویس حذف نمی‌شود، و راز مشترک IPSec از نظر تاریخی در کلیدزنجیر سیستم زندگی می‌کند، به همین دلیل حذف و افزودن دوباره گاهی اعلان گذرواژه را رد می‌کند. اگر مک از کنترل شما خارج می‌شود، آیتم را با نام سرویس در Keychain Access پیدا کنید و حسابی، گواهی یا کلید همتایی را که اعتبارنامه ذخیره‌شده نمایندگی می‌کند باطل کنید. A copied configuration file is a live credential even after local removal.

حذف را بررسی کنید و پروفایل بازگشتی را درست بخوانید

حذف زمانی کامل است که سرویس از هر دو نما رفته باشد و پس از راه‌اندازی دوباره هم نرود. با scutil --nc list شناسه سرویس را بررسی کنید، سپس با scutil --dns تأیید کنید که نام‌گزینی از همان حل‌کننده‌ای که انتظار دارید استفاده می‌کند، سپس یک بار راه‌اندازی مجدد کنید، چون قواعد بر اساس تقاضا و عامل‌های ورود دو چیزی هستند که فقط در یک بوت تازه خود را نشان می‌دهند.

اگر هنوز آنجاست، اشیای بیشتری حذف نکنید. مشخص کنید کدام لایه آن را بازساخته است: یک پروفایل MDM سرویس را دوباره می‌فرستد، یک عامل کلاینت آن را بازمی‌سازد، یا سرویس هرگز حذف نشده چون نام مطابقت نداشته. آن پاسخ تعیین می‌کند که به حذف‌کننده فروشنده، تیم IT خودتان یا دور دیگری از همان گفت‌وگوی حذف نیاز دارید. راهنمای حذف اپل مسیر پشتیبانی‌شده برای سرویس‌هایی را که خودتان افزوده‌اید پوشش می‌دهد؛ باقی‌مانده‌ها بخشی هستند که باید خودتان بررسی کنید: remove a VPN configuration.

مقالات مرتبط