Mirror محلی packageها برای قطعی اینترنت، بخش ۱: مفاهیم، معماری و راه‌اندازی میزبان Mirror

در این مجموعه یک سرور Mirror محلی می‌سازیم: یک نسخه‌ی محلی از مخازن package که داخل شبکه‌ی خودتان قرار می‌گیرد. وقتی اینترنت در دسترس است، این سرور packageها را از بالادست می‌گیرد و به‌روز نگه می‌دارد؛ و وقتی دسترسی به اینترنت قطع می‌شود، همه‌ی سیستم‌های داخلی همچنان می‌توانند وصله‌های امنیتی و packageها را از همین Mirror دریافت کنند. این یعنی حتی هنگام قطعی اینترنت، به‌روزرسانی‌های امنیتی متوقف نمی‌شوند.

محدوده‌ی این مجموعه

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

چرا یک Mirror محلی؟

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

معماری

ایده‌ی اصلی، جداکردن «جمع‌آوری» از «تحویل» است. یک ناحیه packageها را از اینترنت می‌گیرد (هر وقت که اینترنت در دسترس باشد)، و ناحیه‌ی محلی همیشه و مستقل از اینترنت، آن‌ها را به کلاینت‌ها می‌دهد:

Internet · upstreams apt · PyPI · registries unreliable · may be cut internet · intermittent Mirror server nginx · on the LAN syncs upstream when online LAN · always up Clients · servers get patches locally Internet down? clients still pull security updates from the local mirror
معماری دو بخشی: بخش سمت اینترنت هر وقت که اینترنت در دسترس باشد packageها را از بالادست می‌گیرد؛ اما تحویل به کلاینت‌ها روی شبکه‌ی محلی و مستقل از اینترنت انجام می‌شود. به این ترتیب قطعی اینترنت جلوی به‌روزرسانی امنیتی داخل شبکه را نمی‌گیرد.

پیش‌نیازها

یک ماشین لینوکسی (فیزیکی یا مجازی) با فضای دیسک کافی برای نگه‌داری packageها. توصیه می‌شود از یک ماشین مجازی استفاده کنید تا در صورت نیاز بتوانید آن را پاک کرده و از نو بسازید. در این بخش از Ubuntu استفاده می‌کنیم، ولی همین روش روی هر توزیع لینوکسی کار می‌کند.

راه‌اندازی میزبان Mirror

پایه‌ی هر Mirror یک وب‌سرور ساده است که یک پوشه را روی HTTP در اختیار می‌گذارد؛ بعداً بخش‌های مختلف (packageهای سیستم‌عامل، رجیستری، PyPI و ...) همین پوشه را پر می‌کنند. nginx را نصب می‌کنیم و پوشه‌ی /srv/mirror را با فهرست خودکار (autoindex) سرو می‌کنیم:

نصب و پیکربندی nginx برای سرو پوشه‌ی Mirror
نصب nginx، ساخت ساختار پوشه‌ی Mirror، و پیکربندی سرو پوشه‌ی /srv/mirror با autoindex. تست پیکربندی موفق است و سرویس بارگذاری می‌شود.

تحویل به کلاینت‌ها

حالا هر کلاینتی روی شبکه می‌تواند فایل‌ها را با HTTP ساده از Mirror بگیرد. نکته‌ی مهم این است که این مسیر تحویل کاملاً محلی است و به اینترنت بین‌الملل کاری ندارد؛ پس چه اینترنت وصل باشد چه قطع، یکسان کار می‌کند:

دریافت فایل از سرور Mirror با curl و wget از سمت کلاینت
یک کلاینت روی شبکه‌ی محلی، فایل‌ها را با curl و wget از Mirror می‌گیرد. همین مسیر ساده، پایه‌ی تحویل packageها در بخش‌های بعد است.

آزمایش از یک کلاینت روی شبکه‌ی داخلی

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

آزمایش Mirror از یک کلاینت بدون اینترنت روی شبکه‌ی داخلی
کلاینتی که هیچ دسترسی‌ای به اینترنت ندارد: درخواست به اینترنت با timeout روبه‌رو می‌شود، اما همان کلاینت از Mirror روی آدرس محلی 10.10.0.1 فایل‌ها را می‌گیرد. این همان رفتاری است که در زمان قطعی اینترنت به آن نیاز داریم.

جمع‌بندی و بخش بعد

در این بخش دیدیم چرا یک Mirror محلی برای تاب‌آوری در قطعی اینترنت حیاتی است، معماری دو بخشی آن را مرور کردیم و میزبان Mirror را با nginx راه انداختیم. تا اینجا Mirror یک پوشه‌ی خالی را سرو می‌کند؛ از بخش بعد آن را پر می‌کنیم.

در بخش بعد مهم‌ترین قطعه را می‌سازیم: Mirror packageهای سیستم‌عامل (apt و dnf) تا وصله‌های امنیتی حتی در قطعی اینترنت در دسترس بمانند.

بخش‌های این مجموعه

← بازگشت به وبلاگ