اتصال دوبارهٔ کلاینت OpenVPN: سه ابزار کنترل، سه دامنه
قطع یک نشست، اطلاعرسانی به همهٔ کلاینتهای UDP و راهاندازی دوبارهٔ دیمن عملیات متفاوتی هستند. نخست دامنه را تعیین کنید، سپس نشست تازه را بررسی کنید.
کسی میخواهد کلاینت VPN دوباره متصل شود، و این درخواست میتواند سه چیز متفاوت باشد. ممکن است به معنای قطع یک نشست تأییدشده، اطلاعرسانی به همهٔ کلاینتها که یک سرور UDP در حال رفتن است، یا راهاندازی دوبارهٔ خود دیمن باشد. هر یک شعاع تأثیر متفاوتی دارد و انتخاب اشتباه، یک اصلاح برای یک کاربر را به قطع سرویس تبدیل میکند. دامنه همان تصمیم است و فرمان از آن برمیآید.
پیش از پرسیدن اینکه کدام ابزار کنترل را به کار ببرید، بپرسید چه کسی باید تحت تأثیر قرار گیرد.
یک نمونه: رابط مدیریت
یک رابط مدیریت پیکربندیشده میتواند نمونههای متصل را فهرست کند و دقیقاً یکی از آنها را قطع کند. هر نشست یک شناسهٔ کلاینت دارد، و client-kill CID بهجای یک نام مشترک همان شناسه را هدف میگیرد. شناسهٔ زنده را از خروجی وضعیت فعلی بخوانید، چون مقداری که از یک گزارش قدیمیتر کپی شده باشد به نشستی اشاره میکند که دیگر وجود ندارد. قطع نمونه فقط همان اتصال را پایان میدهد و هیچ چیز دیگر.
این کار اتصال تازهای را تضمین نمیکند. اینکه کلاینت بازگردد به تنظیمات تلاش دوبارهٔ آن، ورودیهای راهدور باقیمانده، الزامات احراز هویت و به این بستگی دارد که برنامهٔ ناظر هنوز در حال اجرا باشد. کلاینتی که بازمیگردد شناسهٔ تازه میگیرد و به همین دلیل مقایسهٔ شناسهها تنها راه مطمئن برای تمایز قدیم از جدید است.
اعلان خروج UDP فرمانی برای هر کلاینت نیست
explicit-exit-notify یک دستور پیکربندی دربارهٔ رویدادهای خروج و راهاندازی دوباره است. روی کلاینت UDP به همتا میگوید که نشست در حال پایان است و آرگومان عددی کنترل میکند اعلان چند بار تکرار شود. وقتی سرور روی UDP کار میکند پیام کنترل راهاندازی دوباره را به کلاینتهای متصل خود میفرستد و مقادیر مستند، اتصال دوباره به همان سرور را از جابهجایی به ورودی راهدور دیگر متمایز میکنند. این یک سیگنال چرخهٔ عمر با مخاطبان گسترده است.
هیچ چیزی در آن یک کلاینت دلخواه را در لحظهای دلخواه انتخاب نمیکند. برخورد با آن بهعنوان دکمهٔ اتصال دوباره، یکجا به همهٔ نشستهای متصل میرسد.
سیگنالها روی فرایند اثر میگذارند، نه روی نشست
SIGUSR1 از فرایند در حال اجرا میخواهد اتصال خود را بدون خواندن دوبارهٔ پیکربندی راهاندازی کند، و گزینههای ماندگاری تعیین میکنند چه چیزی از آن راهاندازی دوباره جان سالم به در میبرد. SIGHUP جلوتر میرود: پروندهٔ پیکربندی را دوباره میخواند و منابع خود را باز میکند. SIGTERM و SIGINT خاموشی منظم را درخواست میکنند. اینها عملیات سطح فرایند هستند: روی سروری با چند کلاینت بر همهٔ نشستهایی که فرایند حمل میکند اثر میگذارند، نه بر نشست نامبرده در تیکت.
وقتی فرایند زیر یک مدیر سرویس اجرا میشود، از کنترل خود مدیر استفاده کنید نه اینکه به PIDی که در فهرست فرایندها یافتهاید سیگنال بفرستید. واحد را بخوانید تا ببینید مدیر چه سیگنالی میفرستد، چون راهاندازی دوباره و بارگذاری دوباره کارهای متفاوتی با همان دیمن میکنند.
پیش از انتخاب ابزار کنترل، دامنه را تعیین کنید
سه پرسش آن را روشن میکند. چه کسی باید تحت تأثیر قرار گیرد: یک کاربر، همهٔ کلاینتهای یک سرور، یا دیمن و هر چیزی که حمل میکند. چه چیزی باید بماند: پیکربندی، وضعیت تونل، یا هیچکدام. چه کسی مجاز به انجام آن است: یکپارچهسازی مدیریت، مالک سرویس، یا اپراتور شبکه که اعلان خروج را کنترل میکند. به اینها پاسخ دهید و تنها یک ابزار کنترل مناسب است.
افزودن یک شنوندهٔ کنترل بدون احراز هویت برای گرفتن دکمهٔ اتصال دوباره، بسیار بیشتر از آن دکمه را به هر کسی که به درگاه برسد میدهد.
نشست تازه را بررسی کنید، نه قطع اتصال را
رویداد قطع اتصال ثابت میکند نشست قدیمی پایان یافته است. هیچ چیزی دربارهٔ نشست تازهای نمیگوید که احراز هویت میشود، نشانی میگیرد، مسیرها را نصب میکند یا به منبعی میرسد که کاربر لازم داشت. ابتدا شناسهٔ تازه، سپس وضعیت تونل، سپس یک منبع واقعی را بررسی کنید. همان سه گام تفاوت میان اتصال دوباره و اتصالی است که کار میکند.
دامنه را در سابقهٔ تغییر بنویسید. جملهٔ «کلاینت را دوباره متصل کردم» توصیف نیست وقتی کلاینت یکی از چهل نفر روی یک سرور مشترک بوده است.