اتصال یک کنترلگر کوچک به VPN در NetworkManager
فعالسازی یک دسته برمیگرداند، نه نشستی آماده. پروفایل، درخواست و اتصال فعال را جدا نگه دارید و وضعیت را پس از راهاندازی مجدد بازسازی کنید.
برنامه کوچکی که یک VPN موجود را متصل میکند به کنترلگر نیاز دارد، نه به پیادهسازی تازه VPN. موتور پشتیبانیشده باید مذاکره و ترافیک تونل را بر عهده بگیرد؛ برنامه شما باید درخواست کاربر را بیان کند و نتیجه را صادقانه توضیح دهد. در Linux رابط NetworkManager D-Bus به آن کنترلگر مدلی مشخص میدهد که دنبال کند.
چهار بررسی مانع از آن میشوند که کنترلگر یک پروفایل ذخیرهشده، یک درخواست فعالسازی و یک نشست در حال کار را با هم اشتباه بگیرد.
بررسی یکم: کدام هویت انتخاب میشود
UUID پروفایل را بهعنوان هویت پایدار نگه دارید و هنگامی که به مسیر شیء نیاز دارید آن را از طریق مدیر حل کنید. یک نام نمایشی میتواند بین دو پروفایل مشترک باشد و مسیر گذرگاه در زمان اجرا ترجیح کاربری معقولی برای ذخیره نیست. انتخاب را در پیکربندی خودتان بنویسید، نه در توضیحی درباره اینکه کدام ورودی دومی در فهرست بود.
پیش از آنکه آن را تطابق بنامید بررسی کنید مدیر چه برمیگرداند. UUIDی که دیگر وجود ندارد خطای جستوجو تولید میکند و این مسیر کدی متفاوت از پروفایلی است که وجود دارد و از فعالسازی سر باز میزند.
بررسی دوم: فراخوان فعالسازی چه برمیگرداند
فراخوان فعالسازی مستندشده مسیر شیء یک اتصال موجود، مسیر یک دستگاه و یک شیء مشخص را میگیرد. مسیر یک اتصال فعال را برمیگرداند و آن پاسخ یک دسته است نه نتیجه آمادگی. پرچم آمادگی برنامهتان را از مقدار برگشتی تنظیم نکنید؛ بهجای آن به وضعیت و دلیل اتصال فعال مشترک شوید.
برای VPN شیء مشخص اتصال پایه فعال را انتخاب میکند. فرستادن مسیر ریشه انتخاب دستگاه را به NetworkManager میسپارد که هر دستگاهی را که در آن لحظه پیشفرض است برمیگزیند. این تصمیمی درباره بافت مسیریابی است نه یک فیلد گذرواژه، و تغییر میدهد که تونل روی کدام دستگاه لایهبندی شود.
نمونهای عمومی برای افزودن و فعالسازی برندارید و انتظار نداشته باشید پروفایل VPN بسازد. کمککننده مستندشده اتصالهای VPN را کنار میگذارد، پس آمادهسازی یا درونریزی پروفایل گامی جداگانه و بازبینیشده است. این مهم است چون آمادهسازی نیازمند مجوز و بازبینی است که دکمه اتصال آن را فراهم نمیکند. درونریزی را کنشی اداری با خط گزارش و تأییدکننده خودش بدانید.
بررسی سوم: وضعیت چگونه نمایش داده میشود
اتصال فعال از فعالسازی، فعال، غیرفعالسازی و غیرفعال میگذرد و فیلد دلیل میگوید چرا. فشردن همه اینها در یک مقدار بولی به نام loggedIn اطلاعاتی را از دست میدهد که کاربر نیاز دارد و اطلاعاتی که پشتیبانی خواهد خواست. دستکم نشان دهید اتصال در انتظار، برقرار یا ازدسترفته است و رشته دلیل را برای حالت شکست نگه دارید.
پاسخهای ناهمگام را به درخواستی که آنها را پدید آورده گره بزنید. تکمیل دیرهنگام یک تلاش قدیمیتر نباید کنش تازهتر کاربر را بازنویسی کند و فشار دوباره Connect باید یا نادیده گرفته شود یا با سیاستی آشکار بهعنوان لغو و تلاش دوباره تلقی شود.
بررسی چهارم: پس از راهاندازی مجدد چه میشود
وقتی مدیر راهاندازی مجدد میشود یا کنترلگر شما دوباره به گذرگاه متصل میشود، وضعیت مشاهدهشده را از مالک بازسازی کنید. نشستی را که در حافظه پنهان است فعال نشان ندهید فقط چون مسیر شیء قدیمی هنوز در حافظه است. سیگنالهای تغییر وضعیت دقیقاً برای این هستند که کنترلگر بهجای حدس زدن همگامسازی دوباره کند.
انتخاب کنید بستن کنترلگر چه معنایی دارد. باز گذاشتن یک اتصال موجود متعلق به ماشین میتواند درست باشد و برچیدن نشستی که عمداً کوتاهعمر است هم میتواند درست باشد. باز گذاشتن یک اتصال موجود متعلق به ماشین میتواند درست باشد؛ برچیدن نشستی که عمداً کوتاهعمر است هم میتواند درست باشد. آن قرارداد مالکیت را در رابط بنویسید نه اینکه فرض کنید خروج فرایند کنش شبکه را انجام میدهد. کاربران نباید حدس بزنند که بستن پنجره تونلشان را قطع میکند یا نه. پاسخ را در متن رابط بگذارید، نه فقط در توضیح کد.
اختیار و رازها را نزد صاحبانشان نگه دارید
مجوزها بهصورت بله، auth یا خیر برمیگردند و رابط باید تفاوت میان مجاز، مجاز پس از احراز هویت و ردشده را نشان دهد. اجرای کنترلگر با دسترسی root سیاست مجوز را پیاده نمیکند؛ پرسش را حذف میکند.
اعتبارنامهها متعلق به عامل راز پشتیبانیشده یا یکپارچهسازی کارخواه برای روش احراز هویت پیکربندیشده هستند. گذرواژه در کد منبع، در یک آرگومان یا در یک گزارش یک یافته است و مجوز اداری محلی همان رویداد احراز هویت دروازه نیست.
در پایان، وضعیت اتصال را جدا از وظیفهای که کاربر میخواهد انجام دهد گزارش کنید. تونل میتواند فعال باشد در حالی که یک نام خصوصی یا یک برنامه در دسترس نیست و آن شکست دوم پیام خودش و وضعیت خودش را میطلبد. کنترلگری که دقیقاً میگوید کدام لایه شکست خورد سودمندتر از یکی است که میگوید VPN قطع است.