پرش به مطلب اصلی
امیرمهدی کوششی
امیرمهدی کوششی
کارشناسی ۱۳۹۸

زنده ماندن در اینترنت داخلی!

موضوع «اینترنت داخلی» یا «ملی‌سازی اینترنت» مفهومی‌ست که ممکن است در کشور ما نیز عملی شود. این ایده فقط مختص ما نیست و کشورهای دیگری هم تجربه‌هایی در این زمینه داشته‌اند. اما دلیل این کار چیست؟ یک‌سری دولت‌ها می‌خواهند جلوی خروج اطلاعات از کشور را در شرایط خاصی بگیرند، مثلاً ممکن است در خطر حمله باشند و یا زیرساخت‌های آن‌ها در حال اتک خوردن باشد. به همین دلیل اینترنت داخلی و یا به‌عبارتی قطع شبکۀ خارجی باعث می‌شود که موارد این‌چنینی تا حدی حل شوند. اما چگونه می‌توان شبکۀ بین‌المللی را قطع کرد، به‌شکلی که نه دیگر شبکۀ داخلی از بیرون قابل‌مشاهده باشد و نه شبکۀ خارجی از داخل قابل‌دسترس باشد؟ برای توضیح بهتر، فرض کنید یک کامپیوتر در خانه دارید که به اینترنت متصل است و IP دارد. اگر این کامپیوتر از طریق کابل LAN به شبکه وصل باشد و روی آن یک وب‌سایت فعال باشد، می‌توان از طریق اینترنت به آن دسترسی داشت. اما اگر کابل LAN را از کامپیوتر جدا کنید، دیگر دسترسی از طریق اینترنت ممکن نخواهد بود. اینترنت داخلی هم دقیقاً همین‌گونه عمل می‌کند. در کشور ما، فقط یک مسیر خروجی برای ارتباط با اینترنت جهانی وجود دارد. اگر این مسیر را قطع کنند —مانند همان کابل LAN— ارتباط کشور با اینترنت جهانی قطع می‌شود. در چنین شرایطی، کاربرانی که خارج از ایران هستند دیگر نمی‌توانند به سرورهای داخل ایران، مانند سایت‌های داخلی، دسترسی پیدا کنند. درخواست‌هایی که از خارج به داخل ارسال می‌شوند، دیگر به مقصد نمی‌رسند و بی‌پاسخ می‌مانند. به‌عبارتی فرض کنید از خارج از کشور دنبال وب‌سایت SSC باشیم. زمانی‌که ما این سایت را سرچ می‌کنیم، نیاز است که درخواست به سرور SSC در داخل دانشکدهٔ کامپیوتر برسد. بسته‌های ارسالی تا نزدیک pop siteهای داخلی می‌رسند، اما زمانی که می‌خواهند وارد شوند، اصلاً نمی‌توانند سرورهای داخلی را پیدا کنند. به‌عبارتی به این شکل نیست که درخواست‌ها رسیده و بلاک شوند، بلکه اصلاً سرورها پیدا نیستند. به‌عبارتی دیگر ما دنبال آدمی هستیم که فقط اسم او را می‌دانیم، اما این آدم اصلاً وجود خارجی ندارد!

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

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

اما در ایران، مشکل اصلی ضعف زیرساخت‌هاست. مثلاً:

  • ما موتور جستجوی داخلی قدرتمندی نداریم. مراکز دادهData Centers به سرورهای بین‌المللی متصل نیستند.
  • بسیاری از خدمات نرم‌افزاری به اینترنت جهانی نیاز دارند. مثلاً اگر بخواهید با Docker یک Image را اجرا کنید، معمولاً باید به رجیستری‌های خارجی متصل شوید که در صورت قطع اینترنت، ممکن نیست.

در این یادداشت سعی داریم که از توانایی زیرساخت‌های فعلی‌مان نهایت استفاده را بکنیم تا در شرایطی که دسترسی به شبکۀ بین‌الملل امکان‌پذیر نبود، بتوانیم حتی‌الامکان سرویس‌مان را بالا نگه‌داریم. اولین نکته، استفاده از Version Control Systemهاست. اکثر سرویس‌های شرکت‌های ایرانی در VSCهایی مانند GitHub یا GitLab نگه‌داری می‌‌شوند که در صورت قطعی، دسترسی به آن‌ها امکان‌پذیر نیست. در صورتی‌که از git سازمانی استفاده می‌کنید، خوب است که در شبکۀ داخلی نیز بتوانید آن را بالا نگه‌دارید، در غیر این‌صورت، می‌توانید از hamgit به آدرس hamgit.ir یا arvangit به آدرس git.arvancloud.ir استفاده نمایید؛ یک Gitlab که بر روی سرورهای داخلی بالا آمده و تمامی امکانات GitLab Enterprise را در اختیارتان قرار خواهد داد.

در صورت اجرای اینترنت ملی، نخستین مشکلی که ایجاد می‌شود مربوط به DNS است. اکثر DNSهای پرکاربرد دنیا مانند Google DNS و Cloudflare در خارج از کشور قرار دارند. در نتیجه اگر سایت شما بخواهد یک آدرس را resolve کند و DNS شما خارجی باشد، دیگر به آن پاسخ نمی‌رسد. شرکت‌هایی مانند ابر آروان اقدام به ارائهٔ DNS Resolverهای داخلی کرده‌اند که می‌توانند این مشکل را تا حدی برطرف کنند. در ادامه تعدادی آدرس resolver که داخلی هستند را در اختیارتان قرار خواهیم داد که در این شرایط بتوانید آن‌ها را جایگزین کنید:

  • 217.218.155.155
  • 5.200.200.200
  • 217.218.127.127

نحوۀ تنظیم آن در این لینک برای Mac ،Ubuntu و Windows آمده است.

مورد دیگری که ممکن است به کارتان بیاید، استفاده از mirrorهای داخلی برای package managerها است. زمانی که شما بخواهید در زمان اینترنت ملی از package managerهای معروف مانند apt استفاده کنید، به مشکل خواهید خورد. زیرا apt نیاز دارد که به mirrorهای Debian متصل شود تا پکیج‌های مربوطه را به‌روز‌رسانی و یا نصب کند. در این شرایط نیز می‌توانید از mirrorهای داخلی استفاده کنید و آن‌ها را جایگزین mirrorهای Debian که در خارج از کشور هستند کنید تا بتوانید پکیج‌های مورد نظرتان را نصب و یا به‌روز‌رسانی کنید. در لینک زیر توضیحات مربوطه به mirrorهای داخلی آمده‌است. البته ممکن است شما بخواهید سرویس خود را build کنید. در این صورت نیاز به یک سری پکیج‌هایی دارید که نمی‌توانید آن‌ها را دانلود کنید، زیرا در خارج از کشور مستقر شده‌اند. برای این امر نیز می‌توانید از mirrorهای این لینک استفاده نمایید.

همان‌طور که بالاتر گفتم، docker یکی از ابزارهای پرکابرد و محبوب برای برنامه‌نویسان است. در زمانی که شبکه داخلی است، امکان استفاده از مخزن‌های خارجی مانند Docker Hub و یا  Google و... نیست. یکی از رجیستری‌های داخلی که شما می‌توانید مخازن خود را با استفاده از آن مدیریت کنید، registry.hamdocker.ir است. همچنین در لینک زیر توضیحات مناسب برای تنظیم رجیستری‌های داخلی جهت pull کردن imageهای آزاد و محبوب آمده‌است که شما می‌توانید آن‌ها را تنظیم کنید تا docker از این مخازن بخواند.

راه‌حل‌هایی برای شرایط قطع اینترنت بین‌الملل:

  • استفاده از DNS داخلی: باید DNS سرورهای خود را به سرویس‌دهنده‌های داخلی تغییر دهید.
  • راه‌اندازی مخزن‌های داخلی: هنگام نصب پکیج‌ها با دستوراتی مثل apt update یا apt install، اتصال به مخزن‌های خارجی باعث اختلال می‌شود. استفاده از mirrorهای داخلی برای Debian، Ubuntu و حتی زبان‌هایی مانند Python (pip) یا JavaScript (npm) ضروری است.
  • راه‌اندازی رجیستری داخلی برای Docker: چون رجیستری‌های اصلی Docker تحریم هستند، استفاده از رجیستری داخلی به‌جای docker.io الزامی است.
  • استفاده از VCSهای داخلی مانند hamgit یا arvangit جهت deploy سرویس‌ها.