انتشار DNS چیست و چرا زمان می‌برد؟ راهنمای کامل TTL و کش

انتشار DNS چیست و چرا بعد از تغییر رکوردها باید ساعت‌ها صبر کنید؟ در این مقاله نقش TTL و کش را بررسی کرده و روش کاهش زمان انتشار قبل از مهاجرت را می‌آموزید.

۷ دقیقه به‌روزرسانی ۱۶ شهریور ۱۴۰۵

انتشار DNS چیست و چرا باید آن را جدی بگیرید؟

وقتی رکوردی مانند A یا MX را در DNS دامنه‌تان تغییر می‌دهید، این تغییر به‌صورت آنی در سراسر اینترنت اعمال نمی‌شود. به این فاصله زمانی که بین لحظه ثبت تغییر در سرور authoritative و لحظه‌ای که همه کاربران دنیا پاسخ جدید را دریافت می‌کنند، انتشار DNS می‌گویند. این فرایند می‌تواند از چند دقیقه تا ۷۲ ساعت طول بکشد و درک آن برای هر مدیر وب‌سایتی که قصد مهاجرت سرور، تغییر هاست یا جابه‌جایی ایمیل را دارد، حیاتی است.

مشکل اصلی این است که DNS یک سیستم توزیع‌شده با میلیون‌ها کش در سراسر جهان است. هر رزولور (resolver) مانند سرویس‌های Google Public DNS یا سرویس‌دهنده اینترنت کاربر، پاسخ‌ها را برای مدتی مشخص نگه می‌دارد تا بار ترافیک کاهش یابد. این مدت زمان توسط مقدار TTL (Time To Live) در رکورد DNS تعیین می‌شود. اگر این مفهوم را درست درک نکنید، ممکن است بعد از مهاجرت، برخی کاربران شما را روی سرور قدیمی ببینند و برخی روی سرور جدید — و این یعنی تجربه کاربری ضعیف و از دست رفتن اعتماد.

ساختار DNS و نقش TTL در انتشار

برای درک انتشار DNS، ابتدا باید بدانید که DNS از چند لایه تشکیل شده است. وقتی کاربر آدرس example.com را در مرورگر وارد می‌کند، درخواست او ابتدا به یک رزولور (مانند 8.8.8.8 یا DNS مخابرات) می‌رود. این رزولور اگر پاسخ را در کش خود نداشته باشد، به سرور ریشه (root server) و سپس به سرور TLD (مثلاً .com) مراجعه می‌کند تا آدرس سرور authoritative دامنه را پیدا کند. در نهایت، پاسخ از سرور authoritative دریافت و به کاربر بازگردانده می‌شود.

مقدار TTL در هر رکورد DNS مشخص می‌کند که هر رزولور مجاز است پاسخ را برای چه مدت در کش خود نگه دارد. این مقدار بر حسب ثانیه تعریف می‌شود. برای مثال:

example.com.  3600  IN  A  185.10.10.10

در این مثال، TTL برابر ۳۶۰۰ ثانیه (یک ساعت) است. یعنی رزولورها تا یک ساعت بعد، آدرس 185.10.10.10 را برای این دامنه به کاربران نشان می‌دهند، حتی اگر شما رکورد را تغییر دهید.

TTL پایین در برابر TTL بالا

انتخاب مقدار TTL یک تصمیم راهبردی است:

  • TTL پایین (۳۰۰ تا ۹۰۰ ثانیه): انتشار سریع‌تر تغییرات، اما بار بیشتر روی سرور authoritative چون درخواست‌های بیشتری به آن می‌رسد.
  • TTL بالا (۸۶۴۰۰ ثانیه یا ۲۴ ساعت): کاهش بار سرور و پاسخ سریع‌تر به کاربران، اما اگر رکوردی را اشتباه تغییر دهید، خطا تا ۲۴ ساعت در سراسر اینترنت باقی می‌ماند.

بیشتر دامنه‌های معمولی از TTL پیش‌فرض ۳۶۰۰ ثانیه استفاده می‌کنند. اما برای رکوردهای حیاتی مانند MX (سرور ایمیل) معمولاً TTL بالاتری در نظر گرفته می‌شود تا پایداری سرویس ایمیل حفظ شود.

چرا انتشار DNS گاهی تا ۷۲ ساعت طول می‌کشد؟

بسیاری از افراد فکر می‌کنند TTL تنها عامل تعیین‌کننده زمان انتشار است. اما واقعیت پیچیده‌تر است. حتی اگر TTL را روی ۶۰ ثانیه تنظیم کنید، برخی رزولورها و سیستم‌های قدیمی به این مقدار احترام نمی‌گذارند. دلایل اصلی تأخیر عبارتند از:

  1. رزولورهای سرکش: برخی ISPهای کوچک یا سازمان‌های دولتی، رزولورهایی دارند که TTL را نادیده می‌گیرند و پاسخ‌ها را برای چند روز کش می‌کنند.
  2. کش مرورگر و سیستم‌عامل: مرورگرها و سیستم‌عامل‌ها نیز پاسخ‌های DNS را در حافظه خود نگه می‌دارند. ویندوز به‌طور پیش‌فرض کش DNS را ۳۶۰۰ ثانیه نگه می‌دارد.
  3. سرورهای authoritative قدیمی: اگر دامنه شما روی سرور DNS قدیمی با نرم‌افزار به‌روز نشده باشد، ممکن است رفتار غیرمنتظره‌ای در انتشار داشته باشد.
  4. ثبت SOA و Refresh: رکورد SOA شامل مقادیر Refresh و Retry است که برای انتقال منطقه (Zone Transfer) بین سرورهای DNS استفاده می‌شود. اگر چند سرور authoritative دارید، این مقادیر نیز بر زمان انتشار تأثیر می‌گذارند.

نکته مهم: زمان انتشار DNS به‌صورت یکسان برای همه کاربران نیست. برای هر کاربر، زمان انتشار برابر است با باقی‌مانده TTL در کش رزولور او. بنابراین کاربری که ۵ دقیقه پیش پاسخ را کش کرده، تا ۵۵ دقیقه دیگر پاسخ قدیمی را می‌بیند، در حالی که کاربر دیگری که همین حالا درخواست داده، پاسخ جدید را دریافت می‌کند.

کاهش TTL قبل از مهاجرت: روش صحیح

اگر قصد مهاجرت به سرور جدید یا تغییر هاست را دارید، باید از قبل برنامه‌ریزی کنید. روش استاندارد به این صورت است:

مرحله ۱: کاهش TTL حداقل ۴۸ ساعت قبل از مهاجرت

حداقل ۴۸ ساعت (و ترجیحاً ۷۲ ساعت) قبل از زمان مهاجرت، TTL تمام رکوردهایی که قرار است تغییر کنند را به مقدار پایین مانند ۳۰۰ ثانیه (۵ دقیقه) کاهش دهید. این کار باعث می‌شود رزولورهای سراسر جهان به‌تدریج پاسخ‌های قدیمی را کنار بگذارند و پس از ۴۸ ساعت، تقریباً همه رزولورها پاسخ را با TTL پایین کش کنند.

example.com.  300  IN  A  185.10.10.10
www.example.com.  300  IN  A  185.10.10.10

مرحله ۲: انجام مهاجرت

پس از گذشت ۴۸ ساعت، تغییر رکوردها را انجام دهید. حالا چون TTL پایین است، حداکثر ۵ دقیقه طول می‌کشد تا همه رزولورها پاسخ جدید را دریافت کنند. در عمل، بیشتر کاربران در کمتر از ۱۰ دقیقه پاسخ جدید را می‌بینند.

مرحله ۳: افزایش TTL پس از اطمینان

پس از ۲۴ تا ۴۸ ساعت از مهاجرت، وقتی مطمئن شدید همه چیز درست کار می‌کند، TTL را به مقدار عادی (مثلاً ۳۶۰۰ یا ۸۶۴۰۰) برگردانید. این کار باعث کاهش بار سرور و بهبود سرعت پاسخ‌گویی می‌شود.

ابزارهای بررسی انتشار DNS

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

  • dnschecker.org: بررسی رکوردها از بیش از ۲۰۰ نقطه جهان.
  • whatsmydns.net: نمایش وضعیت انتشار برای انواع رکوردها.
  • dig و nslookup: ابزارهای خط فرمان برای بررسی مستقیم.

برای بررسی از خط فرمان لینوکس:

dig example.com A +noall +answer
dig example.com A @8.8.8.8

دستور دوم به‌طور خاص از سرور Google DNS می‌پرسد و نشان می‌دهد که آیا این رزولور پاسخ جدید را کش کرده است یا نه.

اشتباهات رایج در انتشار DNS

در سال‌های فعالیت پشتیبانی فنی، رایج‌ترین اشتباهات کاربران را در این زمینه دیده‌ایم:

اشتباه ۱: تغییر TTL همزمان با مهاجرت

برخی افراد TTL را دقیقاً در لحظه مهاجرت کاهش می‌دهند. این کار بی‌فایده است، چون رزولورها هنوز پاسخ قدیمی را با TTL بالا (مثلاً ۲۴ ساعت) در کش دارند و تا ۲۴ ساعت آینده پاسخ جدید را نمی‌گیرند. کاهش TTL باید حداقل ۴۸ ساعت قبل انجام شود.

اشتباه ۲: فراموش کردن رکوردهای ایمیل

هنگام مهاجرت، بسیاری فقط رکورد A را تغییر می‌دهند و رکورد MX را فراموش می‌کنند. اگر سرور ایمیل شما هم جابه‌جا می‌شود، حتماً رکورد MX و SPF را نیز با TTL پایین تنظیم کنید. در غیر این صورت، ایمیل‌های شما برای مدت طولانی به سرور قدیمی ارسال می‌شوند.

اشتباه ۳: بررسی فقط از یک نقطه

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

نکات پیشرفته برای مهاجرت بدون دردسر

برای مهاجرت‌های پیچیده‌تر، این نکات را در نظر بگیرید:

  • آزمایش قبل از تغییر: اگر به سرور جدید دسترسی دارید، قبل از تغییر DNS، فایل hosts سیستم خود را ویرایش کنید تا دامنه به IP جدید اشاره کند و از صحت عملکرد سرور مطمئن شوید.
  • استفاده از TTL جداگانه برای رکوردهای مختلف: رکوردهای حیاتی مانند MX را می‌توانید با TTL بالاتر نگه دارید و فقط رکوردهای A و AAAA را کاهش دهید.
  • مدیریت کش مرورگر: به کاربران خود توصیه کنید کش مرورگر را پاک کنند یا از حالت ناشناس استفاده کنند. این کار به دیدن سریع‌تر نسخه جدید کمک می‌کند.

اگر از سرویس‌دهنده DNS با زیرساخت توزیع‌شده استفاده می‌کنید، معمولاً انتشار سریع‌تر انجام می‌شود. سرویس‌های DNS حرفه‌ای مانند آنچه ServerNet در بسته‌های هاستینگ خود ارائه می‌دهد، از هر دو سرور IPv4 و IPv6 پشتیبانی می‌کنند و امکان مدیریت TTL را به‌صورت دقیق فراهم می‌کنند.

جمع‌بندی

انتشار DNS یک فرایند طبیعی و اجتناب‌ناپذیر است که با درک صحیح TTL و کش می‌توانید آن را مدیریت کنید. قانون طلایی: اگر مهاجرت در پیش دارید، TTL را حداقل ۴۸ ساعت قبل کاهش دهید، مهاجرت را انجام دهید، و پس از اطمینان از پایداری، TTL را به حالت عادی برگردانید. با این روش، زمان انتشار را از چند روز به چند دقیقه کاهش می‌دهید و تجربه کاربری بدون وقفه‌ای را برای بازدیدکنندگان خود فراهم می‌کنید. به یاد داشته باشید که صبر و برنامه‌ریزی، کلید موفقیت در هر مهاجرتی است — و DNS نیز از این قاعده مستثنا نیست.

آیا این مطلب برایتان مفید بود؟