چگونه بررسی کنیم که تونل VPN لینوکس واقعاً برپا است
پرچمهای رابط، جستوجوهای مسیر، جدول 220 و مُهرهای زمانی دستدهی به پرسشهای متفاوتی پاسخ میدهند. هر گام اسکریپت را به آزمونی مشروط کنید که فرض آن را اثبات میکند.
Cron هر ده دقیقه یک VPN کاملاً سالم را دوباره راهاندازی میکند و همان کار یک VPN مرده را یک هفته روشن میگذارد. هر دو شکست از آن میآید که «برپا» یک واقعیت تکی شمرده شود، حال آنکه دستکم چهار واقعیت است. یک دستگاه میتواند از نظر مدیریتی فعال، درست مسیریابیشده و کاملاً رمزگذاریشده باشد و باز هیچ چیز سودمندی حمل نکند. نخست مشاهدهها را جدا کنید، آنگاه بررسی تقریباً خودش نوشته میشود.
پرچمهای پیوند دستگاه را توصیف میکنند، نه مسیر را
بررسیای که همه کپی میکنند به دنبال نشانی سختافزاری از جنس صفر محض است. این ترفند در برخی درایورها رابط واقعی را از یک جانشین جدا میکند و در بقیه چیزی را اثبات نمیکند، چون دستگاه tun از پایه هیچ MAC برای گزارش دادن ندارد. ip -brief link show tun0 در عوض پرچمها را میدهد: UP یعنی مدیر دستگاه را فعال کرده است، و LOWER_UP یعنی درایور پیوند را قابل استفاده میداند. این دو را که با هم بخوانید میگویند دستگاه وجود دارد و از نظر مدیریتی خاموش نیست. هیچیک از آنها نمیگوید بسته جایی برای رفتن دارد.
OpenVPN دستگاه tun خود را پیش از نصب مسیرها میسازد، پس پرچمها میتوانند بیعیب به نظر برسند در حالی که هیچ چیز مسیریابی نشده است. آنها را پیششرط بگیرید، هرگز پاسخ نه.
بپرسید بسته به کجا میرود
جستوجوی مسیر به پرسشی پاسخ میدهد که پرچمها نمیتوانند. ip route get 10.8.0.1 from 10.8.0.2 رابط، نشانی مبدأ و جدولی را که هسته به کار میبرد نام میبرد، و این دقیقاً همان چیزی است که تونل شکافته باید با آن سنجیده شود. بدون نشانی مبدأ چیز دیگری میپرسید، و با مسیریابی سیاستمحور پاسخ میتواند به ازای هر مبدأ متفاوت باشد. این ارزانترین آزمون صادقانه است، چون همان قواعدی را میپرسد که ترافیک شما به کار خواهد برد.
برای WireGuard، دستدهی را هم اضافه کنید. wg show برای هر همتا مُهر زمانی آخرین دستدهی را چاپ میکند، و مُهری که از پیش رفتن بازمانده باشد یعنی همتا رفته است، هر چه پرچمهای رابط بگویند. رابط پیکربندیشده بدون دستدهی تازه یکی از رایجترین مثبتهای کاذب در پایش دستساز است.
جدول 220 داستان IPsec را میگوید
strongSwan وقتی نصب مسیر فعال است، مسیرهای گزینندههای مذاکرهشده را در جدول 220 نصب میکند. ip route list table 220 پس مذاکرهشده را از مسیریابیشده جدا میکند: جدول خالی در کنار پیوند بارگذاریشده یعنی SAهای IKE و CHILD بالا آمدهاند ولی هیچ ترافیکی به سوی آنها هدایت نمیشود. بررسی کنید ip xfrm state را در کنارش، چون پیوندهای امنیتی نصبشده و نقاط پایانی آنها را فهرست میکند.
سیاست تله همان حالتی است که باید مراقبش باشید. به جای مسیریابی، منتظر ترافیک جالب میماند، پس جدول خالی میماند تا چیزی تونل را فعال کند.
وضعیت مدیر و وضعیت دیمن دو فهرست متفاوتاند
NetworkManager تنها پیوندهایی را که مالک آنهاست فهرست میکند. nmcli -t -f NAME,TYPE connection show --active برای تونلی که مستقیم با wg-quick یا با یک دیمن OpenVPN راه افتاده باشد چیزی برنمیگرداند.
این تمایز وقتی اهمیت دارد که اسکریپت باید تصمیم بگیرد کدام یک از دو مدیر را بپرسد. آنکه واقعاً مالک تونل روی این میزبان است برگزید و سکوت دیگری را نادیده بگیرید. اگر هر دو وجود دارند، تصمیم بگیرید کدام مرجع است و دومی را غیرفعال کنید، چون دو مدیری که مسیرها را روی یک رابط بازنویسی میکنند خرابیهایی میسازند که هیچکس نمیتواند بازتولید کند. مدخل غایب اطلاعاتی دربارهٔ مدیر است، نه دربارهٔ تونل.
گام بعدی را به آزمونی مشروط کنید که لازم دارد
کاویدن یک درگاه UDP دربارهٔ آمادگی چیزی اثبات نمیکند، چون UDP دستدهی ندارد و nc -u بهمحض خروج بسته کامیاب میشود. آنچه گام بعدی واقعاً مصرف میکند را بسنجید: یک اتصال TCP به درگاه هدایتشده، درخواستی به میزبانی درون تونل، نامی که فقط همانجا حل میشود. انتظار را با یک مهلت و شمار کوششها محدود کنید و وقتی تمام شد بلند شکست بخورید.
قلابها وقتی کارخواه آنها را عرضه کند از کاوش بهترند. --up و --down اسکریپتهای OpenVPN پس از تغییر وضعیت رابط اجرا میشوند، که مسابقه را کاملاً حذف میکند، ولی با امتیازاتی اجرا میشوند که دیمن نگه داشته است. اگر OpenVPN از راه user و group به حسابی بیامتیاز فروافتاده باشد، قلاب با همان حساب اجرا میشود. راهاندازی دوبارهٔ یک خدمت سامانه آنگاه sudo میخواهد تا دقیقاً همان فرمان را اجازه دهد. کوشش دوباره را به مدیر خدمت بسپارید نه به حلقهٔ cron: سیاست راهاندازی دوبارهٔ کراندار با حد شروع، تونل شکسته را آشکار میکند، حال آنکه حلقهٔ بیکران آن را بیپایان پنهان میکند.