بلاگ
راهنمای استفاده از Geo DNS در شرایط قطعی اینترنت بینالملل
در زمان قطعی یا اختلال اینترنت بینالملل، شبکه داخلی کار میکند ولی مسیر ارتباط با خارج از کشور قطع یا بسیار محدود میشود. نتیجه برای صاحبان سایت دو مشکل همزمان است: سایتی که روی سرور یا CDN خارجی میزبانی میشود برای کاربران داخل ایران باز نمیشود، و سایتی که روی سرور داخلی است برای کاربران و رباتهای خارج از کشور در دسترس نیست. Geo DNS یکی از راههایی است که میتوان با آن این دو مسیر را از هم جدا کرد، به شرطی که درست و از قبل پیادهسازی شود.
Geo DNS چیست؟
در DNS معمولی، هر نام دامنه به یک (یا چند) آدرس IP ثابت اشاره میکند و همه کاربران همان پاسخ را میگیرند. در Geo DNS، سرور DNS پاسخ را بر اساس موقعیت جغرافیایی درخواستکننده تعیین میکند. برای مثال، یک کاربر ایرانی آدرس سرور داخلی را دریافت میکند و یک کاربر آلمانی یا آمریکایی آدرس سرور خارجی را.
چرا در قطعی اینترنت بینالملل به کار میآید؟
اگر سایت شما فقط یک مبدأ (Origin) خارجی داشته باشد، کاربران داخل کشور هنگام قطعی به آن نمیرسند. اگر فقط یک مبدأ داخلی داشته باشد، مخاطبان خارجی و رباتهای موتور جستجو به آن دسترسی ندارند. راهحل، داشتن دو مبدأ است: یکی داخل ایران و یکی خارج، و هدایت کاربران ایران به مبدأ داخلی از طریق Geo DNS.
معماری پیشنهادی
- مبدأ داخلی: یک هاست یا سرور در ایران که نسخهای از سایت را اجرا میکند و از شبکه ملی در دسترس است.
- مبدأ خارجی: سرور یا CDN فعلی سایت برای مخاطبان خارج از کشور.
- سرویس DNS مبتنی بر موقعیت: درخواستهای ایران را به IP داخلی و بقیه را به IP خارجی میفرستد.
- Health check و Failover: اگر یکی از مبدأها از دسترس خارج شد، پاسخ DNS به مسیر سالم تغییر کند.
مراحل پیادهسازی
۱. انتخاب ارائهدهنده DNS سرویسهایی که مسیریابی مبتنی بر موقعیت جغرافیایی دارند عبارتاند از Amazon Route 53 (Geolocation routing)، Azure Traffic Manager (Geographic routing)، NS1، ClouDNS و Cloudflare با افزونه پولی Load Balancing و Geo Steering. برخی ارائهدهندگان داخلی هم DNS مبتنی بر موقعیت دارند؛ قبل از انتخاب، پشتیبانی GeoDNS را از خود سرویسدهنده بپرس.
۲. نکته حیاتی: در دسترس بودن خود نیمسرورها (Nameserver) اگر تمام Nameserverهای دامنه روی شبکه خارجی باشند، در زمان قطعی بینالملل ریزالورهای داخلی اصلاً به آنها نمیرسند و دامنه برای کاربران ایرانی resolve نمیشود، حتی با Geo DNS. باید حداقل یکی از Nameserverها از داخل کشور قابل دسترس باشد؛ مثلاً با یک ارائهدهنده DNS داخلی بهعنوان Nameserver دوم یا اصلی.
۳. راهاندازی و همگامسازی مبدأ داخلی برای سایتهایی که بیشتر محتوای ثابت دارند (شرکتی، وبلاگ، لندینگ)، یک نسخه کششده یا Mirror کافی است. برای سایتهای پویا (فروشگاه، رزرو) باید برنامه همگامسازی پایگاه داده را از قبل طراحی کنی. هنگام قطعی کامل، همگامسازی بین دو مبدأ ممکن نیست؛ پس بهتر است نسخه داخلی بتواند سفارشها و فرمها را محلی ثبت کند و بعد از وصل شدن اینترنت با نسخه خارجی ادغام شود.
۴. گواهی SSL هر دو مبدأ باید گواهی معتبر برای همان دامنه داشته باشند. صدور یا تمدید گواهی (مثلاً با Let’s Encrypt) به سرویسهای خارجی وابسته است؛ پس گواهی را قبل از قطعی نصب کن و تمدید خودکار را روی روش DNS-01 یا یک مسیر در دسترس تنظیم کن.
۵. پایین آوردن TTL TTL بالا باعث میشود پاسخ DNS مدت طولانی در کش بماند و تغییر مسیر دیر اعمال شود. برای رکوردهای مهم، TTL را از قبل روی مقدار کوتاه (مثلاً ۳۰۰ ثانیه) تنظیم کن.
۶. تنظیم Health check و Failover برای هر مبدأ یک بررسی سلامت تعریف کن تا در صورت از دسترس خارج شدن، DNS به مسیر دیگر برگردد.
۷. تست از داخل و خارج فقط از شبکه خودت تست نگیر. از چند اپراتور داخلی (همراه و ثابت) و از چند کشور خارجی بررسی کن که هر کاربر به مبدأ درست میرسد.
مشکلات رایج و راهحل
وابستگی به منابع خارجی حتی اگر سرور داخلی بالا باشد، صفحه ممکن است کند یا ناقص بالا بیاید، چون فونتهای گوگل، اسکریپتهای آنالیتیکس، کتابخانههای CDN خارجی یا reCAPTCHA از خارج بارگذاری میشوند و درخواستشان بیپاسخ میماند. فونتها و اسکریپتهای حیاتی را روی خود سایت (Self-host) قرار بده.
موقعیت ریزالور و EDNS Client Subnet Geo DNS معمولاً بر اساس IP ریزالور یا (در صورت پشتیبانی) زیرشبکه کاربر تصمیم میگیرد. در زمان قطعی، کاربران ایرانی عملاً از ریزالور ISP داخلی استفاده میکنند و تشخیص موقعیتشان سادهتر است، اما ریزالورهای خارجی ممکن است از داخل در دسترس نباشند.
کش DNS در سمت کاربر حتی با TTL کوتاه، بعضی دستگاهها و مرورگرها پاسخ قبلی را نگه میدارند. تغییرات را از قبل اعمال کن و منتظر اجرای فوری آن در زمان بحران نباش.
سئو و ربات گوگل ربات گوگل از خارج کشور خزش میکند و باید به مبدأ خارجی هدایت شود. نسخه داخلی و خارجی باید محتوای یکسان داشته باشند؛ نمایش محتوای متفاوت به ربات و کاربر (Cloaking) برخلاف دستورالعملهای گوگل است. آدرس canonical هر دو نسخه یکی باشد و تنها تفاوت، مسیر شبکهای باشد.
چکلیست قبل از بحران
- حداقل یک Nameserver قابل دسترس از داخل ایران
- مبدأ داخلی با نسخه بهروز سایت
- گواهی SSL معتبر روی هر دو مبدأ
- TTL کوتاه برای رکوردهای اصلی
- قانون Geo DNS برای ایران و بقیه کشورها
- فونت و اسکریپتهای حیاتی روی خود سایت
- Health check و Failover فعال
- تست از چند اپراتور داخلی و چند کشور خارجی
جمعبندی
Geo DNS بهتنهایی سایت را در قطعی اینترنت بینالملل نجات نمیدهد؛ تنها بخشی از یک معماری دو مبدأیی است که باید از قبل آماده شود. مهمترین نکتهها، در دسترس بودن Nameserver از داخل کشور، همگامبودن دو مبدأ، حذف وابستگی به منابع خارجی و رعایت یکسان بودن محتوا برای موتورهای جستجو است. پیادهسازی در زمان بحران دیر است؛ آمادهسازی باید پیش از آن انجام شود.
عکس بده براش