تونل بالا می‌آید، آیکون سبز می‌شود و شبکه محلی ناپدید می‌شود: چاپگرها، NAS و روتر دفتر همه از پاسخ دادن باز می‌مانند. FortiClient همان کاری را می‌کند که پروفایل خواسته است. دروازه یک مسیر پیش‌فرض فرستاده، کلاینت آن را نصب کرده و اکنون هر بسته‌ای مسیری به داخل تونل دارد. تعمیر، ویرایش جدول مسیریابی است با یک ویرایش DNS در پشت آن، و ترتیب این ویرایش‌ها تعیین می‌کند که دستگاه بهتر یا بدتر از کار دربیاید.

کلاینت چه نصب کرد و چرا LAN ناپدید شد

با خواندن جدول شروع کنید، نه رابط کلاینت. در macOS، netstat -rn کل جدول را چاپ می‌کند و route -n get default رابط و متریکی را نام می‌برد که اکنون برنده است؛ در Linux این جفت ip route show و ip route get 8.8.8.8 است. هر دو به یک پرسش پاسخ می‌دهند: کدام ورودی بسته‌ای را حمل می‌کند که با چیز مشخص‌تری مطابقت ندارد.

نام دستگاه تونل ثابت نیست. پروفایل IKEv2 در macOS معمولاً utun را با یک شماره نشان می‌دهد، کلاینت SSL VPN ppp0 را نشان می‌دهد و OpenVPN tun0 را. دو مسیر پیش‌فرض هم می‌توانند همزمان با متریک‌های متفاوت وجود داشته باشند، و ورودی کلاینت ممکن است تنها پس از اتصال دوباره کنترل را بگیرد، نه در لحظه‌ای که ظاهر می‌شود. به همین دلیل دو خروجی از جدول که پنج دقیقه فاصله دارند می‌توانند داستان‌های متفاوتی تعریف کنند.

چرا مسیر پیش‌فرض تونل باید اول برود

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

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

توالی در macOS و در Linux

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

sudo route delete -net default -interface utun4
sudo route add -net 0.0.0.0 -interface en0
sudo route add -net 10.20.0.0 -netmask 255.255.0.0 -interface utun4

در Linux همین ترتیب از ابزار دیگری استفاده می‌کند: دروازه LAN برای مسیر پیش‌فرض و دستگاه تونل برای پیشوند دفتر. فرمان قدیمی route هنوز نحو قدیمی را می‌پذیرد، اما ip route همان شکلی است که با مستندات کنونی مطابقت دارد.

sudo ip route del default dev tun0
sudo ip route add default via 192.168.50.1
sudo ip route add 10.20.0.0/16 dev tun0

وقتی مسیر به جای دستگاه به یک گام بعدی نیاز دارد، peer را از خروجی کلاینت بگیرید. حدس زدن یکی از دو خطا را می‌دهد و معنای آنها متفاوت است: دروازه اشتباه فوراً network unreachable می‌دهد، در حالی که مقصد اشتباه تونل یک وقفه زمانی می‌دهد. پیش از تغییر دوباره فرمان، بخوانید کدام را گرفته‌اید.

پیشوندها، حل‌کننده و DMZ که تاریک می‌ماند

یک پیشوند به ندرت کل کار را پوشش می‌دهد. سرورهای برنامه، شبکه‌های مدیریت، DMZ و خود سرورهای DNS می‌توانند هر یک در محدوده‌ای متفاوت باشند، پس پیش از شروع هر محدوده‌ای را که می‌توانید نام ببرید فهرست کنید و کنار هر ping یک جست‌وجو را بیازمایید. مقصدی که در میانه آزمون کشف می‌شود همانی است که در سابقه تغییرات فراموش می‌شود. مسیری که با نشانی پاسخ می‌دهد اما با نام شکست می‌خورد معمولاً مشکلی در حل‌کننده است که لباس مسیریابی پوشیده.

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

کلاینت SSL در Linux یک شکست مخصوص یک فیلد دارد که دانستنش ارزشمند است: تونل وصل می‌شود، LAN دفتر پاسخ می‌دهد و یک محدوده DMZ تاریک می‌ماند. قطعه گمشده مسیری برای آن محدوده از دروازه تونل است و دروازه بین دستگاه‌ها متفاوت است، بنابراین نشانی سخت‌کدشده همان چیزی است که لپ‌تاپ بعدی را می‌شکند. آن را از وضعیت کلاینت استخراج کنید و فرمان را خودمستند نگه دارید:

PEER=$(ip -4 addr show dev ppp0 | awk '/peer/ {print $4}' | cut -d/ -f1)
sudo ip route add 192.168.30.0/24 via "$PEER"

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

پس از اتصال بعدی و زمانی که باید این کار را به‌صورت محلی متوقف کنید

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

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

فهرست بررسی کوتاه است: جدول را بخوانید، مسیر پیش‌فرض تونل را حذف کنید، مسیر پیش‌فرض LAN را بازگردانید، هر پیشوند را اضافه کنید، حل‌وفصل را جداگانه درست کنید و انتظار داشته باشید مسیرها هنگام اتصال دوباره برگردند.

مقالات مرتبط