مشکلات DNS (Domain Name System یا سیستم نام دامنه) یکی از شایع‌ترین و در عین حال گمراه‌کننده‌ترین خطاهای وب هستند. پاسخ کوتاه به پرسش «چگونه DNS را عیب‌یابی کنیم» این است: ابتدا با دستور nslookup یا dig وضعیت رزولوشن دامنه را بررسی کنید، سپس در سه لایه — دستگاه محلی، شبکه و سرور DNS — منشأ مشکل را جدا کنید. اکثر خطاهای DNS از یکی از این چهار منشأ می‌آیند: پیکربندی اشتباه رکورد، کش محلی، سرور DNS معیوب یا انتشار ناقص. در این نوشته، همین مسیر را در پنج گام باز می‌کنم.

DNS چیست و چگونه کار می‌کند؟

DNS یک سیستم نام‌گذاری است که نام‌های دامنه قابل خواندن برای انسان (مثل example.com) را به آدرس‌های IP قابل فهم برای ماشین تبدیل می‌کند. بدون DNS، کاربر باید آدرس عددی هر سایت را حفظ می‌کرد. این سیستم به‌صورت سلسله‌مراتبی کار می‌کند: سرورهای ریشه، سرورهای TLD و سرورهای معتبر (Authoritative) در سه سطح، پاسخ رزولوشن را می‌سازند. اگر می‌خواهید تصویر کامل این مکانیزم را از پایه بشناسید، نوشته DNS چیست و چگونه کار می‌کند نقطه شروع درستی است. انواع رکوردهای DNS نیز در رکوردهای DNS کدامند باز شده است.

در عیب‌یابی DNS، مهم‌ترین کار این است که مشخص کنید مشکل در سمت شماست، سمت شبکه یا سمت سرور DNS؛ تا این لایه روشن نشود، هر اقدامی در واقع حدس است.

علائم رایج مشکلات DNS کدامند؟

علائم شایع مشکلات DNS در پنج دسته قرار می‌گیرند: اول، خطای «DNS_PROBE_FINISHED_NXDOMAIN» که نشان‌دهنده نبود یا اشتباه رکورد است. دوم، خطای «ERR_NAME_NOT_RESOLVED» که معمولاً از کش یا پیکربندی شبکه است. سوم، نمایش سایت از یک IP اشتباه که رکورد A نادرست یا کش قدیمی را نشان می‌دهد. چهارم، عدم دریافت ایمیل که به رکورد MX مربوط است. پنجم، کندی محسوس در باز کردن سایت که به سرور DNS کند یا TTL نامناسب اشاره دارد. همین علائم، نقطه شروع عیب‌یابی هستند. اگر در بستر وردپرس هستید، نوشته مدیریت DNS در cPanel راهنمای عملی ارائه می‌دهد.

گام اول: بررسی رزولوشن دامنه

اولین گام در عیب‌یابی DNS، بررسی رزولوشن دامنه با دستور nslookup یا dig است. برای این کار در ترمینال دستور nslookup example.com را اجرا کنید. اگر پاسخ آدرس IP درست باشد، مشکل در لایه شبکه محلی یا مرورگر است. اگر پاسخ NXDOMAIN باشد، رکورد دامنه وجود ندارد یا اشتباه پیکربندی شده. اگر پاسخ Timeout باشد، مشکل از سرور DNS یا شبکه است. همین یک دستور، اولین و مهم‌ترین اطلاعات را فراهم می‌کند. مشابه این دستور را می‌توانید با dig example.com +short هم اجرا کنید که خروجی خالص‌تری می‌دهد.

برای بررسی سرورهای نام (Nameserver) دامنه، دستور nslookup -type=ns example.com اجرا می‌شود؛ این دستور نشان می‌دهد سرورهای DNS مسئول دامنه کدامند. تفاوت DNS و Nameserver در تفاوت DNS و Nameserver چیست باز شده است.

گام دوم: تفکیک مشکل محلی از سرور

دومین گام، تفکیک مشکل محلی از مشکل سرور است. سه آزمون ساده این تفکیک را انجام می‌دهد. اول، امتحان دامنه از یک شبکه دیگر (مثلاً اینترنت موبایل)؛ اگر آنجا سایت باز می‌شود، مشکل از شبکه محلی است. دوم، امتحان با سرور DNS عمومی (مثل nslookup example.com 8.8.8.8)؛ اگر پاسخ درست بیاید، سرور DNS محلی معیوب است. سوم، پاک‌کردن کش DNS محلی با دستور ipconfig /flushdns در ویندوز یا sudo systemd-resolve --flush-caches در لینوکس. اگر پس از پاک‌کردن کش، سایت باز شد، مشکل از کش محلی بود. همین سه آزمون، در اکثر موارد منشأ را روشن می‌کند.

گام سوم: بررسی رکوردهای DNS

سومین گام، بررسی رکوردهای DNS است. سه رکورد اصلی که باید بررسی شوند: رکورد A که دامنه را به آدرس IPv4 نگاشت می‌کند، رکورد AAAA که به IPv6 نگاشت می‌کند و رکورد CNAME که یک نام را به نام دیگر نگاشت می‌کند. برای بررسی رکورد A، دستور nslookup -type=a example.com اجرا می‌شود. اگر آدرس IP بازگشتی با آدرس سرور فعلی متفاوت است، مشکل در پیکربندی رکورد است. تفاوت CNAME و A Record در تفاوت CNAME و A Record در DNS باز شده است.

نکته مهم در این گام: هنگام تغییر هاست یا سرور، رکورد A باید به‌روزرسانی شود. اگر به‌روزرسانی نکرده‌اید، سایت از سرور قدیمی نمایش داده می‌شود. برای بررسی رکورد MX (مرتبط با ایمیل)، دستور nslookup -type=mx example.com اجرا می‌شود؛ اگر سایت ایمیل ندارد یا مشکل دریافت ایمیل دارید، این رکورد را بررسی کنید.

گام چهارم: بررسی انتشار (Propagation)

چهارمین گام، بررسی انتشار DNS است. وقتی رکوردهای DNS را تغییر می‌دهید، این تغییرات باید در سرورهای DNS سراسر جهان منتشر شوند. زمان این انتشار به مقدار TTL (Time To Live) رکورد بستگی دارد که معمولاً بین ۳۰۰ ثانیه تا ۸۶۴۰۰ ثانیه (یک روز) تنظیم می‌شود. اگر چند ساعت پس از تغییر، سایت هنوز از سرور قدیمی نمایش داده می‌شود، انتشار کامل نشده. ابزارهای بررسی انتشار DNS به شما اجازه می‌دهند که وضعیت انتشار را از نقاط مختلف جهان بررسی کنید. اگر می‌خواهید تصویر کامل این لایه را ببینید، نوشته پروپاگیشن DNS چیست و چقدر طول می‌کشد و TTL چیست و چگونه بر کش تأثیر می‌گذارد راهنمای دقیقی ارائه می‌دهند.

در عیب‌یابی DNS، اکثر مشکلاتی که به نظر «پیچیده» می‌رسند، در عمل یا از کش محلی هستند یا از انتشار ناقص؛ همین دو لایه را اول بررسی کنید.

گام پنجم: رفع مشکل و رفع کش

پنجمین گام، رفع مشکل و پاک‌سازی کش است. بر اساس منشأ مشکل، یکی از این اقدام‌ها انجام می‌شود: اگر رکورد DNS اشتباه است، از پنل مدیریت DNS اصلاح می‌شود؛ اگر کش محلی معیوب است، دستور flush DNS اجرا می‌شود؛ اگر کش سرور DNS معیوب است، با تغییر سرور DNS یا انتظار برای انقضای TTL حل می‌شود؛ اگر Nameserver دامنه اشتباه است، از پنل ثبت‌کننده دامنه اصلاح می‌شود. پس از هر تغییر، سه آزمون گام اول و دوم را تکرار کنید تا مشکل حل شده باشد. برای تغییر صحیح Nameserver، نوشته چگونه DNS دامنه را تنظیم کنیم و چگونه هاست را به دامنه متصل کنیم راهنمای دقیقی ارائه می‌دهند.

ابزارهای تشخیص DNS

ابزارهای تشخیص DNS در سه دسته اصلی قرار می‌گیرند:

دستهابزارکاربرد
خط فرمانnslookup، dig، hostبررسی رکورد و رزولوشن
وب‌محورDNS Checker، IntoDNSبررسی انتشار جهانی
مرورگرDevTools Networkبررسی سرور DNS پیش‌فرض

در تجربه من، ترکیب dig خط فرمان و DNS Checker وب‌محور، برای اکثر پروژه‌ها کافی است. اگر با ابزارهای شبکه آشنایی ندارید، نوشته افزونه‌های ضروری مرورگر برای توسعه‌دهندگان و لاگ‌های دیتابیس چگونه بررسی می‌شوند نمونه‌های عملی ارائه می‌دهند.

پرسش‌های متداول

چرا سایت برای من باز نمی‌شود اما برای دیگران باز می‌شود؟ این معمولاً نشانه کش محلی یا سرور DNS معیوب است؛ با ipconfig /flushdns و تغییر سرور DNS به 8.8.8.8 یا 1.1.1.1 مشکل حل می‌شود.

چرا پس از تغییر هاست، سایت از سرور قدیمی نمایش داده می‌شود؟ به دو دلیل: کش مرورگر که با Ctrl+F5 پاک می‌شود، یا انتشار ناقص DNS که با کاهش TTL پیش از تغییر هاست قابل پیشگیری است.

آیا می‌توانم سرور DNS را تغییر دهم؟ بله، سرور DNS در تنظیمات شبکه دستگاه یا روتر قابل تغییر است؛ این تغییر بر همه رزولوشن‌های دامنه اثر می‌گذارد.

چرا خطای NXDOMAIN می‌گیرم؟ این خطا یعنی دامنه یا زیر‌دامنه در DNS وجود ندارد؛ معمولاً از پیکربندی ناقص رکورد یا نبود انتشار کافی است.

آیا تغییر Nameserver فوری اثر می‌کند؟ نه؛ تغییر Nameserver پس از تأیید از طرف ثبت‌کننده، بین ۲ تا ۴۸ ساعت منتشر می‌شود.

اشتباهات رایج در عیب‌یابی DNS

چهار اشتباه شایع در عیب‌یابی DNS:

  • تغییر رکوردها پیش از بررسی کش: بسیاری از مشکلات DNS از کش مرورگر یا سیستمعامل است. ابتدا کش را پاک کنید و بعد رکورد را بررسی کنید.
  • نادیده‌گرفتن TTL پیش از تغییر: اگر TTL روی ۸۶۴۰۰ ثانیه باشد و رکورد را تغییر دهید، کاربران تا ۲۴ ساعت نسخه قدیمی را می‌بینند. پیش از هر تغییر بزرگ، TTL را کاهش دهید.
  • گرفتن نتیجه فقط از یک نقطه: استفاده از یک ابزار DNS Checker نتیجه یک نقطه است. از چند نقطه برای اطمینان از انتشار استفاده کنید. اگر می‌خواهید تصویر کامل این لایه را ببینید، اشتباهات رایج در تنظیم DNS راهنمای دقیقی است.
  • نادیده‌گرفتن کش سرور میانی: برخی CDNها و سرورهای میانی کش جداگانه دارند که پس از تغییر DNS نیاز به پاک‌سازی دستی دارند؛ مسیر این لایه در راه‌اندازی CDN برای سایت وردپرسی و چگونه سرعت DNS را بهبود دهیم آمده است.

نگاه مهندسی به عیب‌یابی DNS

برای مخاطب فنی، عیب‌یابی DNS سه لایه تخصصی دارد. لایه اول، مدل رزولوشن: فرآیند رزولوشن DNS سلسله‌مراتبی است — از کش محلی، سرور رزولور، سرور ریشه، سرور TLD و سرور Authoritative. هر مرحله می‌تواند منبع مشکل باشد. تجربه من این است که استفاده از ابزارهایی که کل مسیر رزولوشن را نشان می‌دهند (مثل dig +trace)، لایه مشکل‌دار را سریع‌تر آشکار می‌کند. اگر می‌خواهید تصویر کامل این لایه را ببینید، نوشته چگونه مشکلات DNS را عیب‌یابی کنیم، تفاوت DNS و Nameserver چیست و DNS امن چیست و چه مزایایی دارد نقطه شروع درستی هستند.

لایه دوم، مدل کش: کش DNS در چهار لایه ذخیره می‌شود — کش مرورگر، کش سیستم‌عامل، کش سرور DNS محلی و کش سرور DNS رزولور. همین لایه‌بندی توضیح می‌دهد چرا پاک‌سازی یک لایه کافی نیست و گاهی پاک‌سازی همه لایه‌ها لازم است. همین موضوع را در چارچوب کش محتوای سایت نیز باید در نظر گرفت؛ نوشته بهترین افزونه‌های کش وردپرس برای افزایش سرعت و DNS ابری چیست تصویر تکمیلی خوبی ارائه می‌دهند. لایه سوم، مدل امنیت: حملات DNS مثل Cache Poisoning و DNS Spoofing می‌توانند نتایج رزولوشن را دستکاری کنند. استفاده از DNSSEC و سرورهای DNS امن، این لایه را تقویت می‌کند؛ جزئیات در DNS امن چیست و چه مزایایی دارد آمده است. اگر این لایه را در چارچوب امنیت کلی سایت می‌خواهید ببینید، نوشته بهترین روش‌های امنیت وب و چگونه امنیت وب‌سایت را افزایش دهیم راهنمای دقیقی ارائه می‌دهند.

لایه ظریف دیگری هم وجود دارد که در پروژه‌های سازمانی به آن رسیده‌ام: مدل هماهنگی چند سرور. در سیستم‌های توزیع‌شده، تنظیم چند سرور DNS و هماهنگی میان‌شان نیازمند یک الگوی معماری مشخص است. اگر می‌خواهید این لایه را از منظر معماری ببینید، نوشته سرور چیست و چگونه کار می‌کند، انواع سرور از نظر کاربرد کدامند و چگونه عملکرد سرور را بهبود دهیم نقطه شروع خوبی هستند. برای درک لایه اتصال دامنه به هاست، نوشته چگونه دامنه را به هاست متصل کنیم، انتقال دامنه چگونه انجام می‌شود و تمدید دامنه چه مراحلی دارد را توصیه می‌کنم. در بستر وردپرس، خطاهای مرتبط با اتصال و HTTPS نیز می‌توانند به شکل مشکل DNS ظاهر شوند؛ برای تفکیک دقیق، نوشته رفع خطای SSL در وردپرس، خطای SSL چیست و چگونه رفع می‌شود و رفع خطای Internal Server Error در وردپرس تصویر تکمیلی خوبی ارائه می‌دهند.

جمع‌بندی کوتاه

عیب‌یابی DNS در پنج گام خلاصه می‌شود: بررسی رزولوشن با nslookup، تفکیک مشکل محلی از سرور، بررسی رکوردها، بررسی انتشار و رفع نهایی با پاک‌سازی کش. در اکثر موارد، مشکل در یکی از دو لایه — کش محلی یا انتشار ناقص — حل می‌شود. اگر امروز فقط یک کار می‌کنید، دستور nslookup example.com 8.8.8.8 را روی دامنه خودتان اجرا کنید؛ اگر پاسخ درست بیاید اما از شبکه محلی پاسخ ندهد، مشکل کش محلی است و با flushdns حل می‌شود. اگر تجربه‌ای از یک مشکل DNS داشته‌اید که با یک اقدام ساده برطرف شده — یا برعکس، پرونده پیچیده‌ای بوده — در دیدگاه‌ها بنویسید؛ همین داده‌های واقعی، تصویر دقیق‌تری از عیب‌یابی DNS در بافت ایرانی می‌سازند. 🌐