DNS چیست و چگونه کار میکند؟
چرا تغییر هاست سایت شما چند ساعت طول میکشد تا در سراسر جهان دیده شود و گاهی یک رکورد اشتباه، کل دامنه را زمین میزند؟ راهنمای کامل سیستم نام دامنه، از کوئری تا کش.
اولین باری که برای یک مشتری دامنه را از یک هاست به هاست دیگر منتقل کردم، ساعت ده شب پیام داد که سایت روی گوشیاش باز نمیشود ولی روی لپتاپش کار میکند. یک ساعت تمام دنبال مشکل هاست گشتم، تا اینکه یادم افتاد DNS (Domain Name System) سیستم نام دامنه است و تغییراتش بهصورت لحظهای در سراسر جهان پخش نمیشود. مشکل نه از هاست بود، نه از مرورگر، نه از اینترنت او — مشکل این بود که گوشی او هنوز نسخهٔ قدیمی DNS را در کش داشت. آن شب برای اولین بار جدی گرفتم چیزی را که سالها بدیهی فرض کرده بودم.
DNS را میتوان به دفترچهٔ تلفن اینترنت تشبیه کرد، اما این تشبیه سطحی است. در واقعیت، DNS یکی از پیچیدهترین و در عین حال قابلاعتمادترین سیستمهای توزیعشدهٔ جهان است که هر روز میلیاردها کوئری را در چند میلیثانیه پاسخ میدهد. اگر مدیر سایت، توسعهدهنده یا حتی کاربر علاقهمند به اینترنت هستید، درک DNS نه یک امتیاز است و نه تجمل؛ یک نیاز روزمره است که بارها به کارتان میآید.
DNS چیست و چه مسئلهای را حل میکند؟
DNS یا سیستم نام دامنه، مجموعهای از سرورهای توزیعشده در سراسر جهان است که نامهای دامنهٔ قابلخواندن برای انسان (مثل example.com) را به آدرسهای IP (Internet Protocol) که ماشینها میفهمند (مثل 192.0.2.1) ترجمه میکند. هر بار که آدرسی را در مرورگر خود تایپ میکنید و Enter میزنید، اولین اتفاقی که میافتد یک کوئری DNS است که نام دامنه را به IP تبدیل میکند.
اگر با مفاهیم پایهٔ دامنه آشنا نیستید، دامنه چیست و چگونه ثبت میشود؟ پیشنیاز خوبی است. DNS لایهای است که دامنه را به سرور متصل میکند؛ بدون آن، داشتن دامنه بیمعنی است چون مرورگر نمیداند دامنه را به کدام سرور بفرستد.
واژهٔ DNS هم به پروتکل اشاره میکند، هم به سیستم. بهعنوان یک پروتکل، قواعدی است که سرورهای DNS برای پاسخدادن به کوئریها رعایت میکنند. بهعنوان یک سیستم، شبکهای از میلیونها سرور DNS است که با همکاری، پاسخ کوئریها را در کسری از ثانیه فراهم میکنند. مکانیزم دقیق کاری این سیستم را در DNS و نقش آن در دسترسی به اینترنت هم باز کردهام.
DNS دقیقاً همان چیزی است که اینترنت را برای انسان قابل استفاده میکند. بدون آن، برای هر بازدید از یک سایت باید یک عدد سیزدهرقمی حفظ میکردیم. ارزش واقعی DNS در این است که نه فقط یک بار، بلکه میلیاردها بار در هر ثانیه این ترجمه را انجام میدهد.
چرا به DNS نیاز داریم و IP بهتنهایی کافی نیست؟
سؤال منطقی است: چرا از IP بهتنهایی استفاده نمیکنیم؟ سه دلیل اصلی:
دلیل اول: حافظه انسان محدود است
حفظ کردن 142.250.185.78 برای گوگل و چند ده IP دیگر برای سایر سایتهای محبوب عملاً غیرممکن است. اما حفظ کردن کلماتی مثل google.com آسان است. DNS این بار را از دوش انسان برمیدارد.
دلیل دوم: IP سرورها میتواند تغییر کند
اگر سرور سایت شما از یک دیتاسنتر به دیتاسنتر دیگر منتقل شود، IP آن عوض میشود. اگر همهجا IP استفاده میشد، تغییر آدرس سایت به معنای اطلاعرسانی به تمام کاربران و بروزرسانی همهٔ لینکها بود. با DNS، شما فقط یک رکورد را در پنل خود عوض میکنید و بقیه چیزها خودکار بهروز میشود. این مکانیزم را در مدیریت DNS در cPanel با جزئیات عملی توضیح دادهام.
دلیل سوم: چند IP برای یک دامنه
سایتهای بزرگ معمولاً دهها سرور در جغرافیای مختلف دارند. یک دامنه میتواند بهطور همزمان به چندین IP اشاره کند و DNS بر اساس موقعیت کاربر، سرور مناسب را به او بدهد. این تکنیک، پایهٔ CDN (Content Delivery Network) و سرویسهای توازن بار است. نقش CDN در سرعت سایت را در CDN چیست و چگونه سرعت سایت را بهبود میدهد؟ باز کردهام.
سلسله مراتب DNS: از Root تا Authoritative
DNS بهصورت سلسلهمراتبی سازماندهی شده است تا پاسخدهی به کوئریها مقیاسپذیر و سریع باشد. چهار سطح اصلی وجود دارد:
سطح اول: Root Servers
سیزده گروه سرور Root در سراسر جهان وجود دارد (که هر گروه خودش از صدها سرور فیزیکی با تکنیک Anycast تشکیل شده). این سرورها اطلاعات مستقیم دربارهٔ دامنهها ندارند، اما میدانند هر TLD (Top Level Domain یا دامنهٔ سطح بالا مثل .com، .ir، .org) کجا نگهداری میشود.
سطح دوم: TLD Servers
هر TLD سرورهای اختصاصی خودش را دارد که اطلاعات دامنههای همان TLD را نگه میدارد. مثلاً سرورهای .com میدانند دامنهٔ example.com به کدام Nameserver (سرور نام) اشاره دارد.
سطح سوم: Authoritative Name Servers
این سرورها، مرجع نهایی اطلاعات برای یک دامنهٔ خاص هستند. رکوردهای A، CNAME، MX و بقیه در همین سرورها تعریف میشوند. Nameserverها معمولاً توسط هاستینگ یا ثبتکنندهٔ دامنهٔ شما فراهم میشوند.
سطح چهارم: Recursive Resolvers
سرورهای بازگشتی، واسطهٔ بین کاربر و سلسلهمراتب بالا هستند. ISP شما یا سرویسهایی مثل Google DNS یا Cloudflare این سرورها را اجرا میکنند. کاربر بهجای اینکه خودش سه سطح بالا را طی کند، فقط یک کوئری به Recursive Resolver میفرستد و این سرور، تمام مسیر را طی میکند.
یک کوئری DNS دقیقاً در چند گام انجام میشود؟
وقتی کاربری آدرس example.com را وارد میکند، این هشت گام طی میشود (البته در اکثر موارد، کش باعث میشود که فقط یکی دو گام اجرا شود):
- مرورگر بررسی میکند آیا این دامنه را در کش خودش دارد یا نه (Browser Cache).
- اگر نبود، به کش سطح سیستمعامل میرود (OS Cache).
- اگر نبود، به فایل hosts سیستم مراجعه میکند.
- اگر نبود، به Recursive Resolver پیکربندیشده (معمولاً ISP) کوئری میفرستد.
- Resolver به Root Server میپرسد: TLD این دامنه کجاست؟ Root پاسخ میدهد: TLD آن
.comاست، به سرور.comبرو. - Resolver به TLD Server میپرسد: Nameserver این دامنه کجاست؟ TLD پاسخ میدهد: به سرور فلان برو.
- Resolver به Authoritative Server میپرسد: رکورد A این دامنه چیست؟
- Authoritative Server IP نهایی را برمیگرداند و Resolver آن را در کش خود ذخیره میکند.
این کل چرخه معمولاً کمتر از ۱۰۰ میلیثانیه طول میکشد — بهشرط اینکه در کش نباشد. اگر در کش باشد، پاسخ در یک تا پنج میلیثانیه برمیگردد.
انواع رکوردهای DNS که هر مدیر سایت باید بداند
شش نوع رکورد اصلی وجود دارد که در مدیریت هر سایت به کار میآید:
| رکورد | کاربرد | مثال |
|---|---|---|
| A | نگاشت دامنه به IPv4 | example.com → 192.0.2.1 |
| AAAA | نگاشت دامنه به IPv6 | example.com → 2001:db8::1 |
| CNAME | نگاشت یک دامنه به دامنهٔ دیگر | www → example.com |
| MX | تعیین سرور ایمیل | mail.example.com |
| TXT | نگهداری متن، برای SPF، DKIM، تأییدیهها | v=spf1 ... |
| NS | معرفی Nameserverها | ns1.example.com |
رکوردهای A، CNAME و MX پرکاربردترینها هستند. اگر میخواهید سایت خود را از یک هاست به هاست دیگر منتقل کنید، معمولاً رکورد A را عوض میکنید. اگر ایمیلها را روی سرور جداگانهای دارید، رکورد MX را جدا تنظیم میکنید. تفاوت رکورد A و CNAME را در تفاوت CNAME و A Record در DNS مفصل باز کردهام.
کش DNS و مفهوم TTL
اگر هر بار که کاربری به سایتی مراجعه میکند، کوئری DNS بهصورت کامل طی میشد، اینترنت از پا میافتاد. راهحل: کش و TTL (Time To Live).
هر رکورد DNS یک مقدار TTL دارد که به ثانیه مشخص میشود. مثلاً TTL معادل ۳۶۰۰ یعنی ۳۶۰۰ ثانیه (یک ساعت). به این معنا که Resolver میتواند این رکورد را برای مدت یک ساعت در کش خود نگه دارد، بدون اینکه دوباره از Authoritative Server بپرسد.
TTL سه اثر مهم دارد:
- TTL کوتاه (۵ دقیقه تا نیم ساعت): تغییرات سریع اعمال میشود، اما بار روی سرورهای DNS زیاد میشود.
- TTL متوسط (یک تا دو ساعت): تعادل خوب بین سرعت اعمال تغییرات و بار سرور. برای اکثر سایتها پیشنهاد میشود.
- TTL طولانی (چند روز): بار سرور کم، اما تغییرات دیرتر اعمال میشود.
روش من در پروژهها: TTL را روی یک ساعت تنظیم میکنم. قبل از هر تغییر مهم (مثل مهاجرت هاست)، آن را به ۵ دقیقه کاهش میدهم. بعد از پایان تغییر، به یک ساعت برمیگردانم. روش دقیق تنظیم TTL در تنظیم TTL مناسب برای دامنه آمده است.
پراپاگیشن DNS: چرا تغییرات فوری اعمال نمیشود؟
واژهٔ پراپاگیشن (Propagation) در ادبیات DNS یک نامگذاری کمی گمراهکننده است. اینطور نیست که تغییرات یکجا از یک سرور مرکزی به همهٔ سرورها پخش شود. در واقع چیزی که اتفاق میافتد این است:
- شما رکورد را در Authoritative Server تغییر میدهید.
- سرورهای Recursive که رکورد قبلی را در کش دارند، تا زمانی که TTL آنها تمام نشود، همان نسخهٔ قدیمی را سرو میکنند.
- بعد از پایان TTL، کوئریهای جدید به Authoritative Server میروند و نسخهٔ جدید را برمیگردانند.
یعنی زمان پراپاگیشن، معادل بزرگترین TTL در سراسر سیستم است. در عمل، بین چند دقیقه تا ۴۸ ساعت، بسته به TTL اولیه و کش سرورهای مختلف. اگر میخواهید در فاصلهٔ انتقال هاست، سایت شما برای همه بهیک شکل کار کند، TTL را قبل از انتقال کاهش دهید. این تکنیک را در چگونه سایت وردپرسی را به هاست جدید منتقل کنیم؟ مفصل باز کردهام.
امنیت DNS: از DNS Poisoning تا DNSSEC
DNS ذاتاً یک سیستم مبتنی بر اعتماد است که در دههٔ ۸۰ میلادی طراحی شد، زمانی که امنیت چندان مهم نبود. به همین دلیل، چند نوع حمله در این سیستم وجود دارد:
DNS Poisoning (Cache Poisoning)
مهاجم سعی میکند پاسخهای جعلی را به کش سرور Resolver تزریق کند تا کاربر را به سرور اشتباه بفرستد. نتیجهاش میتواند سرقت رمز عبور، سرقت داده یا نمایش تبلیغات جعلی باشد.
DNS Spoofing
شبیه Poisoning، اما مستقیماً روی ترافیک بین کاربر و Resolver کار میکند. اگر ترافیک رمزگذاریشده نباشد، مهاجم میتواند پاسخ را در میانه راه تغییر دهد.
DNS Amplification (DDoS)
مهاجم با ارسال کوئریهای کوچک با آدرس مبدأ جعلی، پاسخهای بزرگ را به سمت قربانی میفرستد. از این تکنیک برای بزرگکردن حجم حملات DDoS استفاده میشود.
DNSSEC: راهحل رسمی
DNSSEC (DNS Security Extensions) یک لایهٔ امضای دیجیتال به DNS اضافه میکند که اصالت پاسخها را تأیید میکند. اگر دامنهای DNSSEC داشته باشد، مهاجم نمیتواند پاسخ جعلی تزریق کند. فعالسازی DNSSEC در اکثر پنلهای دامنه امروز یک کلیک است.
همچنین سرویسهایی مثل DoH (DNS over HTTPS) و DoT (DNS over TLS) وجود دارند که ترافیک DNS را رمزگذاری میکنند. این سرویسها از حملهٔ Spoofing جلوگیری میکنند. مقایسهٔ سرویسهای امن DNS در DNS امن چیست و چه مزایایی دارد؟ آمده است.
عیبیابی مشکلات DNS در چند دقیقه
مشکلات DNS شایعاند و ابزارهای خط فرمان به سرعت مشکل را شناسایی میکنند. سه ابزار کلیدی:
ابزار nslookup
سادهترین ابزار برای بررسی یک دامنه. مثال:
nslookup example.com
اگر پاسخ را برگرداند، یعنی DNS سالم است. اگر پاسخ ندهد یا پاسخ اشتباه بدهد، مشکل DNS دارد.
ابزار dig
قدرتمندتر از nslookup. امکان بررسی هر نوع رکورد، استفاده از Resolver مشخص، و دیدن TTL:
dig example.com A
dig example.com MX
dig @8.8.8.8 example.com
ابزار ping و traceroute
اگر DNS درست باشد، با ping example.com میتوانید تأیید کنید که IP برگرداندهشده درست است. با traceroute میتوانید مسیر شبکه تا سرور را ببینید.
روش کامل عیبیابی DNS در چگونه DNS را عیبیابی کنیم؟ آوردهام. یک تکنیک شخصی که در پروژهها زیاد به کارم آمده: وقتی سایت روی یک دستگاه باز نمیشود ولی روی دستگاه دیگر باز میشود، اول فایل hosts و کش DNS سیستمعامل را پاک کنید. در ویندوز ipconfig /flushdns و در مک و لینوکس sudo dscacheutil -flushcache این کار را انجام میدهد.
پرسش و پاسخهای رایج درباره DNS
DNS چیست به زبان ساده؟
DNS یا Domain Name System یک سیستم جهانی است که نامهای دامنه قابلخواندن برای انسان (مثل google.com) را به آدرسهای IP که ماشینها میفهمند (مثل 142.250.185.78) تبدیل میکند. هر بار که آدرسی را در مرورگر باز میکنید، مرورگر اول یک کوئری DNS میفرستد تا IP سرور را پیدا کند و بعد به آن سرور وصل میشود.
تفاوت DNS و Nameserver چیست؟
DNS یک سیستم کلی است، Nameserver یکی از سرورهای داخل آن سیستم است که رکوردهای دامنهای شما را نگه میدارد. وقتی میگویید Nameserverهای یک دامنه را تغییر دهید، یعنی به سیستم DNS میگویید از این به بعد اطلاعات این دامنه را از سرورهای دیگری جستجو کن. تفاوت دقیق این دو را در تفاوت DNS و Nameserver چیست؟ باز کردهام.
چرا تغییرات DNS تا چند ساعت اعمال نمیشود؟
چون سرورهای Recursive در سراسر جهان رکورد قبلی را در کش نگه داشتهاند و تا زمانی که TTL تمام نشود، همان نسخهٔ قدیمی را به کاربران میدهند. برای سریعتر شدن، قبل از تغییرات مهم، TTL را به مقدار کم (مثل ۵ دقیقه) کاهش دهید. بعد از پایان انتقال، آن را به مقدار عادی برگردانید.
آیا استفاده از DNS عمومی مثل Google DNS باعث سریعتر شدن اینترنت میشود؟
میتواند سریعتر یا کندتر باشد، بسته به موقعیت جغرافیایی و ISP شما. Google DNS (8.8.8.8) و Cloudflare (1.1.1.1) در اکثر نقاط جهان سریعاند، اما در ایران برخی ISPها DNS داخلی سریعتری دارند. تست تجربی با ابزارهایی مثل GRC DNS Benchmark بهترین راه است.
چطور بفهمم DNS سایت من امن است؟
دو کار انجام دهید. اول، بررسی کنید که DNSSEC روی دامنهتان فعال است یا نه (اکثر پنلهای دامنه گزارش میدهند). دوم، در ترافیک کاربر خود از DoH یا DoT استفاده کنید تا کوئریهای DNS رمزگذاریشده باشند. اثر امنیتی این سرویسها در DNS امن چیست و چه مزایایی دارد؟ آمده است.
آیا تغییر Nameserver با تغییر رکورد A فرق دارد؟
بله و تفاوت مهمی است. تغییر رکورد A فقط IP مقصد را عوض میکند؛ شما همان Nameserver قبلی را نگه میدارید. تغییر Nameserver یعنی همهٔ رکوردها از یک سرور به سرور دیگری منتقل میشود و در عمل، کل تنظیمات DNS شما جابهجا میشود. برای انتقال هاست، معمولاً تغییر رکورد A کافی است؛ تغییر Nameserver را فقط زمانی انجام دهید که با تمام رکوردهای دیگر هم راحت هستید.
چرا گاهی بدون هیچ تغییری، سایت باز نمیشود ولی بعد از چند دقیقه درست میشود؟
در بیشتر موارد این نشانهٔ ناپایداری DNS در یکی از سرورهای مسیر یا ISP شماست. دلایل ممکن: خرابی موقت یکی از Root Serverها، حملهٔ DDoS به یک TLD Server، یا مشکل فنی در Resolver ISP شما. این ناپایداریها معمولاً کوتاهمدتاند و با تغییر موقت DNS به یک سرویس دیگر (مثل Google DNS) حل میشوند.
تصویر نهایی: DNS بهعنوان زیرساخت پنهان اینترنت
DNS را میتوان نامرئیترین زیرساخت اینترنت دانست. اکثر کاربران هرگز نامش را نمیشنوند، اما هر بازدید از هر سایت، هر ایمیل، هر اتصال به سرویس ابری، همه از مسیر DNS میگذرند. برای مدیر سایت، درک DNS به سه چیز تبدیل میشود: توانایی پیشبینی زمان انتقال هاست، توانایی تشخیص سریع مشکلات اتصال، و توانایی تقویت امنیت در لایهای که اکثراً نادیده گرفته میشود.
اگر میخواهید در کار روزمره از DNS بیشترین استفاده را ببرید، پیشنهاد من سه گام است. اول، ابزارهای nslookup و dig را در سیستم خود یاد بگیرید؛ این دو ابزار، صادقترین داوران مشکلات DNS هستند. دوم، در پروژههای مهم، DNSSEC را فعال کنید؛ هزینهای ندارد و امنیت را محسوس افزایش میدهد. سوم، در هر انتقال هاست، TTL را از قبل مدیریت کنید تا انتقال بیدردسر انجام شود.
اگر تجربهای از مشکلات عجیب DNS در پروژههای خودتان دارید — بهخصوص اگر مسئلهای پیش آمده که در این مقاله نگنجیده — برایم بنویسید. بسیاری از مشکلات نادر DNS فقط از تجربههای میدانی کشف میشوند و همین اشتراکگذاریها، دانش جمعی ما را کاملتر میکند. 🌐