اولین باری که Zone File یک دامنه را باز کردم، با فهرستی از خطوط کوتاه روبه‌رو شدم که هر کدام چیزی متفاوت می‌گفتند: یکی IP می‌داد، یکی نام می‌داد، یکی برای ایمیل بود و یکی اصلاً شبیه هیچ‌کدام نبود. آن روز فهمیدم که فایل DNS، در واقع فهرست دفترچه‌ای است که سراسر اینترنت بر اساس آن تصمیم می‌گیرد درخواست‌ها را کجا بفرستد. هر رکورد، یک دستور مشخص است که هم وظیفه‌ی روشنی دارد و هم قواعد دقیقی. این مقاله را برای پاسخ به همان پرسش نوشته‌ام: رکوردهای DNS کدامند، هرکدام چه کاری می‌کنند، و در تنظیم هر یک چه چیزی را باید در نظر گرفت.

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

رکورد DNS دقیقاً چیست؟

DNS (Domain Name System)، سیستم نام‌گذاری و مسیریابی اینترنت است که نام‌های دامنه‌ی خوانا برای انسان را به اطلاعات ماشین‌خوان تبدیل می‌کند. هر رکورد DNS، یک خط از اطلاعات در Zone File است که نوع، نام، مقدار، و مدت اعتبار (TTL) دارد. ساختار کلی هر رکورد، از الگوی استاندارد RFC پیروی می‌کند:

NAME    TTL    CLASS    TYPE    VALUE

که در آن NAME نام میزبان است، TTL مقدار زمان اعتبار (به ثانیه)، CLASS معمولاً IN (Internet)، TYPE نوع رکورد، و VALUE مقدار است. درک این ساختار، به شما امکان می‌دهد هر Zone File را بخوانید و خطاها را سریع تشخیص دهید. اگر با ابزار خط فرمان dig کار می‌کنید، می‌توانید هر رکورد را مستقیماً از سرور Authoritative بپرسید.

قبل از ورود به انواع، یک نکته: تفاوت بین Zone و رکورد را در نظر بگیرید. Zone، مجموعه‌ی کاملی از رکوردهاست که برای یک دامنه تعریف می‌شود. اگر Zoneهای بیشتری دارید — مثلاً برای ساب‌دامین‌ها — هر کدام Zone جداگانه‌ای هستند. برای درک پیکربندی کامل، چگونه DNS دامنه را تنظیم کنیم را ببینید.

هر رکورد DNS، یک دستور است؛ و هر دستور، یک تصمیم که سال‌ها روی رفتار سایت شما اثر می‌گذارد.

رکورد A: آدرس IPv4

رایج‌ترین و بنیادی‌ترین رکورد DNS، رکورد A است که یک نام میزبان را به یک آدرس IPv4 نگاشت می‌کند. رکورد A معمولاً برای دامنه‌ی ریشه و زیر‌دامین‌های استاندارد استفاده می‌شود. مثال یک رکورد A ساده:

example.com.    3600    IN    A    203.0.113.10

در این مثال، درخواست برای example.com به IP 203.0.113.10 هدایت می‌شود. نکات کلیدی رکورد A:

  • فقط IPv4: برای IPv6 باید از رکورد AAAA استفاده کنید.
  • چندین رکورد A: می‌توانید برای یک نام، چند رکورد A داشته باشید (Multi-A) و در واقع یک نوع Load Balancing ساده پیاده کنید.
  • مقدار باید IP معتبر باشد: تایپ اشتباه IP، سایت را از کار می‌اندازد. مسئله‌ای که در مقاله‌ی اشتباهات رایج در تنظیم DNS به‌تفصیل آورده‌ام.
  • قابل ریدایرکت: اگر سرور را تغییر دهید، فقط مقدار IP در رکورد A عوض می‌شود و همه‌ی درخواست‌ها به سرور جدید می‌روند.

رکورد AAAA: آدرس IPv6

رکورد AAAA (که چهار A خوانده می‌شود، به‌خاطر چهار برابر بودن طول آدرس IPv6 نسبت به IPv4) معادل IPv6 رکورد A است. ساختار مشابه دارد اما مقدار، یک آدرس IPv6 است:

example.com.    3600    IN    AAAA    2001:db8::1

سه نکته مهم در مورد رکورد AAAA:

  1. پشتیبانی جهانی: اکثر کاربران امروزی، از طریق شبکه‌های IPv6 متصل می‌شوند یا از حالت dual-stack استفاده می‌کنند. نداشتن رکورد AAAA به‌طور فزاینده‌ای یک نقص محسوب می‌شود.
  2. ترتیب انتخاب: مرورگرها معمولاً ابتدا از طریق IPv6 تلاش می‌کنند و در صورت شکست، به IPv4 برمی‌گردند (Happy Eyeballs).
  3. هماهنگی با سرور: اگر سرور IPv6 را پشتیبانی نکند، داشتن رکورد AAAA فقط تأخیر اضافه می‌کند. همیشه پس از افزودن رکورد AAAA، دسترسی از طریق IPv6 را تست کنید.

رکورد CNAME: نام مستعار

رکورد CNAME (Canonical Name) به‌جای اشاره به یک IP، به یک نام دیگر اشاره می‌کند. به عبارت دیگر، یک نام را به نام دیگری نگاشت می‌کند. مثال:

blog.example.com.    3600    IN    CNAME    example.com.

در این مثال، درخواست برای blog.example.com در واقع به رکورد A برای example.com هدایت می‌شود. کاربردهای اصلی CNAME:

  • ساب‌دامین‌های سرویس‌های SaaS: مثل هدایت shop.example.com به Shopify یا پنل‌های ابری.
  • نسخه‌ی www: در بسیاری از پیکربندی‌ها، www به دامنه‌ی ریشه CNAME می‌شود.
  • تغییر متمرکز: اگر IP سرور تغییر کند، فقط رکورد A اصلی به‌روزرسانی می‌شود و همه‌ی CNAMEها به‌طور خودکار به سرور جدید اشاره می‌کنند.

دو محدودیت مهم CNAME:

  1. روی دامنه‌ی ریشه قابل استفاده نیست: استاندارد DNS اجازه نمی‌دهد دامنه‌ی ریشه CNAME داشته باشد، چون در کنار آن رکوردهای SOA و NS وجود دارند. برای دامنه‌ی ریشه، از A یا در بعضی سرویس‌ها از ALIAS یا ANAME استفاده کنید.
  2. هم‌نشینی محدود: اگر یک نام CNAME دارد، نمی‌تواند رکوردهای دیگری مثل TXT و MX داشته باشد. اگر به هر دو نیاز دارید، CNAME را برای زیر‌دامین دیگری تعریف کنید.

رکورد MX: مسیریابی ایمیل

رکورد MX (Mail Exchange) مشخص می‌کند که ایمیل‌های ورودی برای یک دامنه، باید به کدام سرور تحویل داده شوند. مثال:

example.com.    3600    IN    MX    10    mail1.example.com.
example.com.    3600    IN    MX    20    mail2.example.com.

دو نکته در مورد رکورد MX:

  • عدد Priority: هر رکورد MX یک عدد اولویت دارد. سرور ایمیل با عدد کمتر، اولویت بالاتری دارد. اگر سرور اول پاسخ ندهد، سرور بعدی امتحان می‌شود.
  • مقدار باید نام باشد، نه IP: رکورد MX باید به یک نام میزبان اشاره کند، نه آدرس IP. این نام سپس توسط یک رکورد A یا AAAA resolve می‌شود.

رکورد MX یکی از حساس‌ترین رکوردها است؛ چون اگر اشتباه تنظیم شود، کل ایمیل سازمانی از کار می‌افتد. حتماً پس از هر تغییری، ارسال و دریافت ایمیل را تست کنید. برای درک اثرات کلی تغییر، تغییر DNS چه تاثیری بر سایت و رتبه Google دارد را ببینید.

رکورد TXT: اطلاعات متنی و تأیید

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

۱. تأیید مالکیت دامنه

سرویس‌های مختلف — از Google Search Console و Microsoft 365 گرفته تا سرویس‌های امنیتی — برای تأیید مالکیت دامنه، از شما می‌خواهند یک مقدار TXT خاص را اضافه کنید. مثلاً:

example.com.    3600    IN    TXT    "google-site-verification=abc123..."

۲. SPF، DKIM و DMARC

سه استاندارد ایمیل که برای جلوگیری از جعل و اسپم استفاده می‌شوند و همه در قالب رکورد TXT ذخیره می‌شوند:

  • SPF (Sender Policy Framework): فهرست سرورهای مجاز برای ارسال ایمیل از دامنه.
  • DKIM (DomainKeys Identified Mail): کلید عمومی برای تأیید امضای دیجیتال ایمیل.
  • DMARC (Domain-based Message Authentication, Reporting and Conformance): سیاستی برای برخورد با ایمیل‌های نامعتبر.

۳. اطلاعات عمومی

گاهی برای اهداف توضیحی یا مستندسازی، از TXT برای درج اطلاعات عمومی استفاده می‌شود. اما از آنجا که TXT برای هر کاربر قابل خواندن است، هرگز اطلاعات حساس را در آن قرار ندهید.

رکورد NS: اعلام سرورهای Authoritative

رکورد NS (Name Server) مشخص می‌کند که Zone شما روی کدام سرورها میزبانی می‌شود. این رکورد، در سطح دامنه‌ی والد اعلام می‌شود و به Resolverها می‌گوید برای این دامنه به کدام سرور مراجعه کنند. مثال:

example.com.    86400    IN    NS    ns1.example.com.
example.com.    86400    IN    NS    ns2.example.com.

سه نکته در مورد رکورد NS:

  1. حداقل دو NS توصیه می‌شود: برای مقاومت در برابر outage، حداقل دو Nameserver در دو مکان مختلف داشته باشید.
  2. تغییر NS، خطرناک‌تر از تغییر A است: چون تمام Zone در سرویس جدید باید منتقل شود. تفاوت دقیق این دو را در تفاوت DNS و Nameserver چیست آورده‌ام.
  3. TTL بالاتر برای NS مفید است: چون تغییرات NS به‌ندرت انجام می‌شود، TTL بالاتر (۸۶۴۰۰ ثانیه یا بیشتر) منطقی است.

رکورد SOA: سند اصلی Zone

رکورد SOA (Start of Authority) اولین رکورد هر Zone است و اطلاعات مدیریتی آن را تعیین می‌کند. ساختار آن پیچیده‌تر از رکوردهای دیگر است و شامل این فیلدهاست:

example.com.    86400    IN    SOA    ns1.example.com. admin.example.com. (
                                    2024010101    ; Serial
                                    7200          ; Refresh
                                    3600          ; Retry
                                    1209600       ; Expire
                                    86400         ; Minimum TTL
)

هر فیلد معنای مشخصی دارد:

  • Serial: شماره‌ی نسخه‌ی Zone. هر بار که Zone را تغییر می‌دهید، این عدد باید افزایش یابد تا سرورهای ثانویه متوجه تغییر شوند.
  • Refresh: بازه‌ای که سرور ثانویه باید از سرور اصلی به‌روزرسانی بگیرد.
  • Retry: بازه‌ای که در صورت شکست، سرور ثانویه دوباره تلاش کند.
  • Expire: مدت زمانی که سرور ثانویه می‌تواند بدون پاسخ از سرور اصلی به کار ادامه دهد.
  • Minimum TTL: حداقل TTL برای رکوردهای Zone.

در سرویس‌های DNS ابری مدرن، مدیریت Serial معمولاً خودکار است و نیازی به دخالت دستی ندارید. اما در سرویس‌های سنتی، فراموش کردن افزایش Serial یکی از رایج‌ترین اشتباهات است.

رکورد SRV: سرویس‌های خاص

رکورد SRV (Service) برای اعلام محل سرویس‌های خاص — مثل VoIP، SIP، LDAP و برخی سرویس‌های داخلی — استفاده می‌شود. ساختار آن از الگوی خاصی پیروی می‌کند:

_sip._tcp.example.com.    3600    IN    SRV    10 60 5060 sipserver.example.com.

در این ساختار، چهار مقدار مهم وجود دارد: Priority، Weight، Port و Target. SRV معمولاً در پروژه‌های معمولی وب کمتر کاربرد دارد، اما در پروژه‌های مرتبط با ارتباطات (VoIP، چت و...)، ابزار ضروری است.

رکورد CAA: محدودسازی صدور گواهی

رکورد CAA (Certification Authority Authorization) مشخص می‌کند کدام Certificate Authorityها (CA) مجاز به صدور گواهی SSL برای دامنه‌ی شما هستند. این رکورد، یک لایه‌ی امنیتی اضافه است که جلوی صدور ناخواسته‌ی گواهی توسط CAهای غیرمجاز را می‌گیرد. مثال:

example.com.    3600    IN    CAA    0 issue "letsencrypt.org"

مقدار 0 issue به معنای «اجازه‌ی صدور» است. برای اعلام محدودیت بیشتر، می‌توانید از issuewild برای Wildcard و iodef برای گزارش تخلف استفاده کنید. اگر Wildcard SSL دارید یا در حال تصمیم‌گیری در مورد آن هستید، SSL Wildcard چیست و چه زمانی به آن نیاز داریم را ببینید.

جدول جمع‌بندی: کدام رکورد برای چه کاری؟

جدول زیر، خیلی سریع به شما می‌گوید کدام رکورد به چه کاری می‌آید:

نوع رکوردکاربرد اصلیمثال مقدار
Aنگاشت نام به IPv4203.0.113.10
AAAAنگاشت نام به IPv62001:db8::1
CNAMEنام مستعار برای نام دیگرexample.com.
MXمسیریابی ایمیلmail.example.com.
TXTتأیید دامنه، SPF، DKIM، DMARC"v=spf1 ..."
NSاعلام سرورهای Authoritativens1.example.com.
SOAسند مدیریتی Zoneدارای ۵ فیلد خاص
SRVسرویس‌های خاص مثل SIP10 60 5060 sip.example.com.
CAAمحدودسازی صدور گواهی SSL0 issue "letsencrypt.org"

پرسش‌های پرتکرار درباره رکوردهای DNS

چه تفاوتی بین A و CNAME وجود دارد و کدام را انتخاب کنم؟ اگر می‌خواهید نام را به یک IP مشخص نگاشت کنید، از A استفاده کنید. اگر می‌خواهید نام را به یک نام دیگر نگاشت کنید (مثلاً برای سرویس‌های شخص ثالث)، از CNAME. اگر سرور شما به‌ندرت تغییر می‌کند، A مناسب است؛ اگر می‌خواهید انعطاف داشته باشید، CNAME.

چرا نمی‌توانم روی دامنه‌ی ریشه CNAME داشته باشم؟ چون استاندارد DNS اجازه نمی‌دهد یک نام هم CNAME باشد و هم رکوردهای دیگر (مثل SOA و NS) داشته باشد. راه‌حل، استفاده از A Record یا در بعضی سرویس‌ها ALIAS/ANAME است. برای درک مفاهیم مرتبط، تفاوت دامنه و ساب‌دامین چیست را ببینید.

چطور رکوردهای DNS را تست کنم؟ با ابزارهایی مثل dig یا nslookup روی خط فرمان، یا با سرویس‌های آنلاین DNS Lookup. برای هر نوع رکورد، دستور مخصوص وجود دارد: dig example.com A برای رکورد A، dig example.com MX برای MX و الی آخر. مسیر کامل عیب‌یابی در چگونه DNS را عیب‌یابی کنیم آمده است.

چند رکورد DNS برای یک سایت ضروری است؟ حداقل: یک رکورد A (یا AAAA)، یک رکورد NS برای هر Nameserver، و یک رکورد SOA. اگر ایمیل دارید، رکوردهای MX و SPF و DKIM و DMARC. اگر گواهی SSL دارید، به CAA هم فکر کنید. الگوی حداقلی برای سایت‌های ساده، حداقل ۵ رکورد دارد.

آیا ثبت رکورد اشتباه باعث افتی در سئو می‌شود؟ مستقیم نه، اما اگر خطا باعث outage یا کاهش سرعت شود، رتبه آسیب می‌بیند. برای درک مسیر، HTTPS چه تاثیری بر سئو و رتبه Google دارد را ببینید.

تفاوت رکورد MX و رکورد A چیست؟ رکورد A برای اشاره به سرور وب (HTTP/HTTPS) استفاده می‌شود؛ رکورد MX برای اشاره به سرور ایمیل. این دو مستقل از هم هستند و به همین دلیل، می‌توانید ایمیل و وب را روی سرورهای جدا داشته باشید.

آیا برای ایمیل سازمانی حتماً به رکورد TXT نیاز دارم؟ بله. برای ارسال ایمیل قابل‌اعتماد از دامنه‌ی خودتان، حداقل رکورد SPF ضروری است. برای استاندارد بالاتر، DKIM و DMARC هم توصیه می‌شوند.

رکورد CAA چه فایده‌ی عملی دارد؟ جلوی صدور گواهی SSL توسط CAهای غیرمجاز را می‌گیرد. این مهم است چون اگر یک CA نادرست، گواهی برای دامنه‌ی شما صادر کند، مهاجم می‌تواند خود را جای سایت شما جا بزند. رکورد CAA این در را می‌بندد.

آیا می‌توان رکوردهای DNS را از طریق API مدیریت کرد؟ بله، و این یکی از مزیت‌های سرویس‌های DNS ابری مدرن است. مدیریت رکوردها از طریق API، امکان IaC (Infrastructure as Code) و مدیریت نسخه‌بندی‌شده در Git را می‌دهد. مفهوم DNS ابری را در DNS ابری چیست و چه تفاوتی با DNS سنتی دارد باز کرده‌ام.

چرا برخی رکوردها TTL بالاتر و برخی پایین‌تر دارند؟ به الگوی تغییرشان بستگی دارد. رکوردهای کم‌تغییر مثل NS و MX می‌توانند TTL بالا داشته باشند. رکوردهای پرمتغیر مثل A و CNAME بهتر است TTL پایین‌تری داشته باشند. اگر در حال برنامه‌ریزی مهاجرت هستید، پیش از تغییر TTL را کاهش دهید؛ جزئیات در پروپاگیشن DNS چیست و چقدر طول می‌کشد.

آیا می‌توان یک رکورد DNS را در چند مقدار تعریف کرد؟ بله، و این یکی از قابلیت‌های پرکاربرد است. مثلاً برای یک نام می‌توانید چند رکورد A یا MX تعریف کنید. برای MX، مقدار Priority تعیین می‌کند کدام‌یک اولویت بالاتری دارد؛ برای A، سیستم به‌طور پیش‌فرض به‌صورت Round-Robin بین آن‌ها تقسیم می‌کند.

سه‌گانه‌ی طلایی هر Zone

اگر یک نکته از این مقاله با خود ببرید، بگذارید این باشد: در هر Zone، سه رکورد نقش بنیادی دارند — A (یا AAAA)، NS و SOA. همه‌ی رکوردهای دیگر روی این‌ها سوار می‌شوند. قبل از هر تغییر، ابتدا از این سه مطمئن شوید؛ اگر این‌ها درست باشند، عیب‌یابی بقیه‌ی رکوردها بسیار ساده‌تر است.

در گام بعدی، ایمیل و امنیت اضافه می‌شوند: MX برای مسیریابی ایمیل، TXT برای تأیید و SPF/DKIM/DMARC، و CAA برای امنیت SSL. رکوردهای دیگر — CNAME، SRV و امثال آن — بر اساس نیاز پروژه اضافه می‌شوند. اگر در حال تنظیم یک دامنه‌ی جدید هستید، چگونه دامنه را به هاست متصل کنیم و چگونه DNS دامنه را تنظیم کنیم مسیر کامل را نشان می‌دهد.

برای آشنایی عمیق‌تر با امنیت در رکوردهای DNS، DNS امن چیست و چه مزایایی دارد را ببینید. و اگر در انتخاب انواع رکورد تجربه‌ای دارید — مخصوصاً اگر یک رکورد پنهان یا اشتباه باعث بحران شده — در دیدگاه بنویسید. جزئیات همان یک رکورد، برای نفر بعدی ارزشمند است. 🌐