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

دو نوع وضعیت، یکی دورانداختنی است

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

بپرسید کدام یک از فایل‌های VPN شما ورودی اعلام‌شده است و کدام تصادفی:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

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

bind mount، volume نام‌دار یا secret: هر یک از چه چیزی محافظت می‌کند

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

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

bind mount یک مسیر میزبان را نگاشت می‌کند، پس فایل به همان اندازه آن مسیر محافظت‌شده است و به همان اندازه که مجوزهای میزبان اجازه می‌دهد قابل مشاهده است. volume نام‌دار توسط runtime مدیریت می‌شود و از حذف کانتینر جان سالم به در می‌برد، که آن را به گزینه پیش‌فرض امن‌تر برای حالتی تبدیل می‌کند که استقرار مالک آن است. سازوکار secret برای موادی است که نمی‌خواهید در image یا متغیر محیطی باشد.

هر متغیر محیطی و هر فایل میزبان را محافظت هم‌ارز ندانید، چون این‌طور نیست.

ویرایش داخل کانتینر همان تله است

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

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

همین باز کردن است که راحتی در کانتینر را به افشای میزبان تبدیل می‌کند.

آگاهانه بازسازی کنید، سپس چهار چیز را بررسی کنید

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

تأیید کنید کدام وضعیت تولیدشده زمان اجرا باید بازسازی شود نه ذخیره. کلیدهایی که تونل در نخستین شروع تولید کرد وضعیت هستند، و اینکه آن‌ها را نگه دارید یا از نو بسازید تصمیمی است با پیامد برای هر peer که کلید عمومی قدیمی را می‌شناسد.

پس از بازسازی کنترل‌شده، هویت، مسیریابی، DNS و بلوک خطای مورد نیاز را بررسی کنید. فرایندی که بدون خطا شروع می‌شود هیچ‌یک از این چهار مورد را اثبات نمی‌کند. آن را هنگام فعال بودن تونل و دوباره پس از متوقف کردنش بررسی کنید، چون بلوک خطا فقط وقتی تونل از بین می‌رود خود را نشان می‌دهد.

نسخه بازیابی را بیرون از کانتینر نگه دارید

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

اگر کانتینری که مالک VPN است جایگزین شود، برنامه‌هایی را که پشته شبکه آن را شریک هستند در چرخه عمر پشتیبانی‌شده runtime هماهنگ کنید.

همین هماهنگی تفاوت میان یک راه‌اندازی مجدد و یک قطعی است. استقرار باید توضیح دهد پیکربندی از کجا می‌آید، و مستندات volume جایی است که بررسی می‌کنید runtime واقعاً چه چیزی را حفظ می‌کند.

مقالات مرتبط