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

تصمیم بگیرید که مسیر به سرویس تعلق دارد یا به نشست

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

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

مسیر متصل به نشست به رابط تعلق دارد و آن شماره بدون اطلاع تغییر می‌کند. اتصال دوباره ممکن است نام utun متفاوتی از نشست قبلی به تونل بدهد، که یک فرمان سخت‌کدشده را به مسیری تبدیل می‌کند که به هیچ چیز یا، بدتر، به تونل دیگری اشاره می‌کند.

وضعیت فعلی مسیر و سرویس را بخوانید

با نام‌هایی شروع کنید که سیستم واقعاً استفاده می‌کند. نام سرویس در تنظیمات شبکه شناسه فرمان‌های زیر است و جدول مسیرهای فعلی نشان می‌دهد کلاینت متصل چه نصب کرده است. هر دو را وقتی تونل فعال است بخوانید.

scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5

آن جستجو نشان می‌دهد هسته در این لحظه برای این نشانی کدام دروازه و رابط را انتخاب می‌کند. اگر از قبل تونل را انتخاب می‌کند، پیشوند پوشش داده شده و مسیر جدید زائد است. اگر روتر محلی را انتخاب می‌کند، تونل فاقد آن پیشوند است.

وقتی متصل هستید نشانی همتا را یادداشت کنید. این مقدار دروازه در مسیر متصل به سرویس می‌شود و معمولاً همان مقصدی است که برای مسیر پیش‌فرض تونل در netstat -rn نمایش داده می‌شود.

پیشوند را با networksetup ذخیره کنید

ابزار networksetup مسیرهای اضافی را به یک سرویس شبکه پیوست می‌کند. برای سرویسی به نام OfficeVPN و پیشوند خصوصی که از طریق همتای تونل می‌رسد، شکل آن چنین است:

sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN

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

دروازه باید همتای تونل باشد، نه روتر فیزیکی. مسیری که دروازه محلی را نام می‌برد پیشوند خصوصی را از رابط فیزیکی بیرون می‌فرستد، که همان شکست اولیه با گام‌های اضافی است. همتای کهنه شایع‌ترین دلیل است که مسیری درست‌نما هرگز ترافیکی حمل نمی‌کند. همتا را از وضعیت متصل دوباره بخوانید، نه اینکه نشانی را از یادداشت قدیمی کپی کنید.

از route add فقط برای آزمایش استفاده کنید

مسیر مستقیم برای اثبات کارکرد یک پیشوند پیش از دائمی کردن آن مفید است. شکل رابط از جستجوی دروازه پرهیز می‌کند:

sudo route -n add -net 10.20.0.0/16 -interface utun4

مسیر در اتصال دوباره بعدی ناپدید می‌شود و به شماره رابطی وابسته است که امروز وجود دارد. این آن را به یک تشخیص تبدیل می‌کند، نه استقرار. اگر آزمایش کار کرد و مسیر متصل به سرویس نکرد، نخست مقدار دروازه را مقایسه کنید؛ آن همان فیلدی است که بیشتر از همه اشتباه است.

مراقب توصیه‌هایی باشید که مسیر پیش‌فرض VPN را برای تحمیل رفتار تقسیم جایگزین می‌کنند. کلاینتی که تونل کامل را تحمیل می‌کند می‌تواند پس از اتصال دوباره یا تازه‌سازی سیاست مسیرهایش را دوباره نصب کند، پس تغییر دستی بی‌صدا لغو می‌شود. چند پیشوند خصوصی یک مسئله مسیریابی است؛ نگه داشتن تمام ترافیک اینترنت به‌صورت محلی در برابر سیاست تونل کامل تصمیمی در سمت سرور است.

هوک را فقط وقتی انتخاب کنید که نشانی مذاکره می‌شود

برای پیوندهای مبتنی بر PPP مانند L2TP، macOS پس از برقراری پیوند /etc/ppp/ip-up را اجرا می‌کند. اسکریپت نام رابط و نشانی‌های محلی و راه دور مذاکره‌شده را دریافت می‌کند، پس می‌تواند مسیری بیفزاید که به همتای تخصیص‌یافته از سوی سرور وابسته است. این دقیقاً همان حالتی است که یک مسیر سرویس ثابت نمی‌تواند بیان کند.

ممکن است IKEv2 و کلاینت‌های سازندگان اصلاً از آن مسیر PPP استفاده نکنند، یعنی اسکریپت می‌تواند تمام نشست ساکت بماند. وقتی این پیش می‌آید، وظیفه launchd که scutil --nc status را می‌پرسد و به تغییر وضعیت واکنش نشان می‌دهد مکانیزم معادل است، با تأخیری کوچک.

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

با بررسی مقصد خصوصی، مرور عادی و یک چرخه اتصال دوباره یا خواب تمام کنید. سپس scutil --dns را بررسی کنید، چون حل نام سیاستی جداگانه است و مسیر کارآمد اثبات نمی‌کند که نام‌های خصوصی حل می‌شوند.

مقالات مرتبط