توقف سرویس رابط را حذف می‌کند، حتی وقتی persist-tun تنظیم شده باشد. این همان کارکرد گزینه مطابق مستندات است، نه یک خرابی. گزینه یک مسیر راه‌اندازی مجدد درون یک فرایند در حال اجرا را توصیف می‌کند، و systemctl stop آن مسیر نیست.

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

دو منبع و راه‌اندازی مجددی که به آن تعلق دارند

OpenVPN راه‌اندازی مجدد خودش را در دو موقعیت معمول علامت می‌دهد. یک SIGUSR1 صریح این کار را می‌کند، و یک ping-restart که همتای مرده آن را برمی‌انگیزد همین کار را می‌کند. هر دو فرایند را زنده نگه می‌دارند و راه‌اندازی اتصال را دوباره اجرا می‌کنند، و اینجاست که گزینه‌ها جای خود را به دست می‌آورند.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun at the next start

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

چرا این گزینه‌ها اصلاً وجود دارند

یک سرور سخت‌شده OpenVPN معمولاً به عنوان root آغاز می‌شود، کلیدها و دستگاهش را باز می‌کند، سپس به کاربری بدون دسترسی‌های ویژه می‌افتد. پس از آن افت، برخی عملیات به سادگی از دست می‌روند. خواندن یک فایل کلید با حالت 0600، ساختن یک رابط شبکه یا تغییر مسیرها همه می‌توانند رد شوند.

بدون گزینه‌های persist، همتایی که به اندازه کافی ساکت بماند تا ping-restart را برانگیزد، دقیقاً همان عملیات را تحمیل می‌کرد. اتصال دوباره شکست می‌خورد حتی اگر هیچ چیز در پیکربندی تغییر نکرده بود. فرایند طوری به نظر می‌رسید که بی‌دلیل می‌میرد، و گزارش خطای مجوز را به جای خطای شبکه نشان می‌داد.

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

اولین خطا را بخوانید، نه آخرین را

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

قلاب‌ها کلید خودشان را دارند. راهنمای OpenVPN گزینه‌های persist را با up-restart جفت می‌کند، که تعیین می‌کند اسکریپت‌های up و down پس از راه‌اندازی مجدد دوباره اجرا می‌شوند یا نه. بنابراین یک رابط که بالا مانده هیچ چیزی درباره به‌روز شدن یکپارچه‌سازی resolver شما نمی‌گوید.

# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'

# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0

این جفت فرمان دو حالت خرابی را در چند ثانیه از هم جدا می‌کند. رابطی که وجود دارد ولی مسیرهایش غایب هستند یک مشکل قلاب یا مسیر است. رابطی که ناپدید شده یعنی فرایند واقعاً پایان یافته است.

رابط حفظ‌شده یک kill switch نیست

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

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

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

مقالات مرتبط