رفع مشکل

رکورد DNS تغییر کرده ولی اعمال نمی‌شود؛ TTL و Propagation

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۴ دقیقه

AAAATTL 3600DNSTTLPropagationرفع مشکلرکورد DNS تغییر کرده ولیاعمال نمی‌شود؛ TTL وPropagationمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

وقتی رکورد DNS را تغییر می‌دهید، ریزالورهای اینترنت (مثل DNS اپراتور یا 8.8.8.8) تا پایان TTL رکورد قبلی، همان پاسخ قدیمی را از کش خود می‌دهند. برای همین تغییر برای برخی کاربران فوری و برای برخی با تأخیر دیده می‌شود. با dig از سرور نام اصلی (NS) بررسی کنید که رکورد درست ثبت شده؛ اگر درست است، فقط باید صبر کنید. برای جابه‌جایی‌های برنامه‌ریزی‌شده، TTL را از چند ساعت قبل کوتاه کنید.

DNS چطور کار می‌کند؟ (نسخهٔ کوتاه)

  1. مرورگر از سیستم‌عامل می‌پرسد example.com چه آی‌پی دارد.
  2. سیستم‌عامل از ریزالور (DNS اپراتور، مودم یا سرویس‌هایی مثل 1.1.1.1) می‌پرسد.
  3. ریزالور اگر پاسخ را در کش داشته باشد، همان را برمی‌گرداند؛ وگرنه از سرور نام معتبر (Authoritative NS) دامنه می‌پرسد.
  4. پاسخ به‌اندازهٔ TTL در کش ریزالور (و گاهی سیستم‌عامل و مرورگر) می‌ماند.

پس «Propagation» در واقع پخش شدن تغییر نیست؛ منقضی شدن کش‌های قدیمی است.

پرسشارجاعارجاعمرورگرریزالورکش با TTLسرور نام Root/TLDسرور نام دامنهپاسخ نهاییپرسشارجاعارجاعمرورگرریزالورکش با TTLسرور نام Root/TLDسرور نام دامنهپاسخ نهایی
شکل ۱ ریزالور پاسخ را تا پایان TTL کش می‌کند؛ به همین دلیل تغییر رکورد برای همه هم‌زمان دیده نمی‌شود.

TTL چیست؟

TTL (Time To Live) عددی به ثانیه است که روی هر رکورد تعیین می‌کنید و می‌گوید پاسخ تا چه مدت قابل کش کردن است.

TTL معنی مناسب برای
۶۰ تا ۳۰۰ ثانیه تغییرات سریع اعمال می‌شود دورهٔ جابه‌جایی، CDN، سرویس‌های در حال تغییر
۳۶۰۰ ثانیه (۱ ساعت) تعادل بیشتر رکوردها
۸۶۴۰۰ ثانیه (۱ روز) کش طولانی، درخواست کمتر رکوردهایی که تقریباً هرگز تغییر نمی‌کنند

نکتهٔ کلیدی: TTL جدید فقط بعد از انقضای TTL قبلی اثر می‌کند. اگر رکورد TTL یک‌روزه داشته و الان آن را به ۵ دقیقه کم کنید، کسانی که پاسخ قدیمی را کش کرده‌اند تا یک روز همان را می‌بینند.

گام ۱: آیا رکورد درست ثبت شده است؟

اول مطمئن شوید رکورد در سرور نام معتبر درست است:

# سرورهای نام دامنه کدام‌اند؟
dig +short NS example.com

# پرسش مستقیم از یکی از آن‌ها (کش ندارد)
dig @ns1.example-dns.com example.com A +short
dig @ns1.example-dns.com cdn.example.com CNAME +short

در ویندوز:

nslookup -type=NS example.com
nslookup cdn.example.com ns1.example-dns.com
  • اگر پاسخ سرور نام معتبر اشتباه است، رکورد را در جای اشتباهی ویرایش کرده‌اید (مثلاً در پنلی که NS دامنه به آن اشاره نمی‌کند).
  • اگر درست است، مشکل فقط کش است.

گام ۲: مقایسه با ریزالورهای عمومی

dig @1.1.1.1 example.com A +short
dig @8.8.8.8 example.com A +short
dig example.com A            # ریزالور فعلی شما؛ ستون دوم TTL باقی‌مانده است

عدد TTL در پاسخ ریزالور، زمان باقی‌مانده تا انقضای کش را نشان می‌دهد.

me@laptop: ~
$ dig +short example.com @1.1.1.1$ dig +short example.com @8.8.8.8$ dig example.com | grep -A1 'ANSWER SECTION'$ 
شکل ۲ با پرسیدن از چند ریزالور می‌فهمید کدام هنوز پاسخ قدیمی را کش کرده است.

گام ۳: پاک کردن کش‌های سمت خودتان

کجا دستور
ویندوز ipconfig /flushdns
مک sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
لینوکس با systemd-resolved resolvectl flush-caches
کروم آدرس chrome://net-internals/#dns ← Clear host cache

کش ریزالور اپراتور را نمی‌توانید پاک کنید؛ فقط باید صبر کنید یا موقتاً ریزالور دیگری استفاده کنید.

تغییر NS (سرور نام) چرا طولانی‌تر است؟

وقتی سرورهای نام دامنه را عوض می‌کنید (مثلاً DNS را به Cloudflare می‌برید)، رکورد NS در سطح ثبت‌کنندهٔ دامنه و سرورهای پسوند (مثل .com یا .ir) تغییر می‌کند و TTL آن معمولاً طولانی است؛ به همین دلیل ممکن است تا یک یا دو روز طول بکشد. در این مدت رکوردها را در هر دو پنل قدیم و جدید یکسان نگه دارید تا کاربران در هیچ حالتی قطعی نبینند.

جابه‌جایی سرور بدون قطعی: یک برنامهٔ ساده

  1. یک روز قبل: TTL رکوردهای مربوط را به ۳۰۰ ثانیه کاهش دهید.
  2. سرور جدید را آماده و تست کنید (با فایل hosts روی کامپیوتر خودتان می‌توانید دامنه را موقتاً به آی‌پی جدید ببرید).
  3. رکورد A یا CNAME را به مقصد جدید تغییر دهید.
  4. سرور قدیمی را تا چند برابر TTL قبلی روشن نگه دارید تا کاربرانی که کش قدیمی دارند هم سرویس بگیرند.
  5. پس از اطمینان، TTL را دوباره به مقدار عادی برگردانید و سرور قدیمی را حذف کنید.

با صورتحساب ساعتی کلودیفای، نگه داشتن سرور قدیمی برای یکی دو روز اضافه هزینهٔ کمی دارد و ریسک قطعی را حذف می‌کند.

مشکلات رایج

نشانه علت راه‌حل
برای شما باز می‌شود، برای دیگران نه (یا برعکس) کش ریزالورهای متفاوت صبر تا پایان TTL قبلی
سرور نام معتبر هم پاسخ قدیمی می‌دهد ویرایش در پنل اشتباه NS دامنه را بررسی کنید
CNAME ثبت نمی‌شود رکورد هم‌نام دیگری وجود دارد رکورد A/AAAA هم‌نام را حذف کنید
سایت با IPv6 به سرور قدیم می‌رود رکورد AAAA قدیمی باقی مانده AAAA را به‌روز یا حذف کنید
زیردامنه جواب نمی‌دهد ولی دامنهٔ اصلی بله رکورد فقط برای دامنهٔ اصلی ساخته شده برای زیردامنه رکورد جدا بسازید

برای اتصال ساب‌دامنه به CDN، راهنمای اتصال دامنه به CDN با CNAME را ببینید.

سؤالات متداول

Propagation معمولاً چقدر طول می‌کشد؟

برای رکوردهای معمولی به اندازهٔ TTL قبلی (از چند دقیقه تا یک روز). برای تغییر NS ممکن است تا ۴۸ ساعت طول بکشد.

سایت‌های «DNS Checker» دقیق‌اند؟

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

TTL را همیشه روی ۶۰ ثانیه بگذارم؟

لازم نیست؛ TTL خیلی کوتاه تعداد پرسش‌ها را زیاد می‌کند. در دوره‌های تغییر کوتاه و در حالت عادی ۱ ساعت مناسب است.

بعد از تغییر DNS، گواهی SSL خطا می‌دهد؛ چرا؟

اگر کاربر به سرور جدید رسیده و گواهی هنوز روی آن صادر نشده، خطا می‌بیند. گواهی را پیش از تغییر DNS آماده کنید یا از CDN با صدور خودکار گواهی استفاده کنید.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.