پرش به محتوا
دامنه

رکورد DNS چیست؟ تفاوت A، CNAME، MX و TXT با مثال

۱۲ دقیقه مطالعه

رکورد DNS یه خط اطلاعات توی تنظیمات دامنه است که مشخص می کنه هر بخش از دامنه کجا بره. توی این مطلب A، CNAME، MX و TXT رو با مثال ساده کنار هم گذاشتیم.

نمودار ساده مسیر درخواست از مرورگر تا سرور سایت در توضیح رکورد DNS

رکورد DNS چیست؟ یه خط اطلاعات توی تنظیمات دامنه است که به اینترنت می گه هر بخش از دامنه ات کجا بره. رکورد A آدرس سایت رو مشخص می کنه، CNAME یه نام رو به نام دیگه وصل می کنه، MX مسیر ایمیل رو تعیین می کنه و TXT برای تأیید هویت و امنیت دامنه به کار می ره. توی این راهنما هر نوع رو با یه مثال عملی نشون می دیم تا موقع تنظیم دامنه سردرگم نشی.

برای مثال ها از دامنه فرضی example.ir و آی پی های نمونه مثل 192.0.2.10 استفاده می کنیم. اینا واقعی نیستن و فقط برای فهمیدن مثال ها هستن.

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

دامنه رو مثل اسم یه مجتمع اداری در نظر بگیر و رکوردها رو مثل تابلوهای داخل ساختمان. یه تابلو می گه ساختمان کجاست (A). یکی نوشته «این واحد همون واحد فلانه» (CNAME). یکی می گه نامه ها رو کجا تحویل بدن (MX). آخری هم مثل کارت شناسایی کنار در نصب شده (TXT).

مرورگر برای وصل شدن آی پی لازم داره، نه اسم. DNS همین ترجمه رو انجام می ده. وقتی کسی example.ir رو تایپ می کنه، یه سرویس واسطه به اسم Resolver می ره از سرورهای دامنه می پرسه و جواب رو برمی گردونه. این جواب از روی رکوردها ساخته می شه.

رکوردها توی چیزی به اسم «زون DNS» نگهداری می شن. زون روی نیم سرورها (Nameserver) قرار داره و دامنه به همون نیم سرورها اشاره می کنه. نتیجه اش یه قاعده ساده ولی پراشتباهه: رکورد رو باید همون جا ویرایش کنی که نیم سرورهای فعال دامنه هستن، نه هر پنلی که اتفاقی جلوت باز شد.

هر رکورد چهار تا جزء داره

  • نام (Host): اینکه رکورد برای کدوم بخش دامنه است. علامت @ یعنی خود دامنه (example.ir) و www یعنی www.example.ir.
  • نوع (Type): A یا CNAME یا MX یا TXT و بقیه.
  • مقدار (Value): مقصد یا محتوای رکورد، مثلاً یه آی پی یا یه نام.
  • TTL: مدتی (به ثانیه) که بقیه سرورها اجازه دارن جواب رو نگه دارن و دوباره نپرسن.

نیم سرور رو کجا عوض می کنن؟

نیم سرور رو همون جایی تعیین می کنی که دامنه رو ثبت کردی. برای دامنه های .ir هم معمولاً از پنل همون سرویسی که دامنه رو ازش گرفتی عوض می شه و تغییر بعدش به ثبت مرکزی (ایرنیک) می ره. اگه دامنه رو از ثبت دامنه ما گرفتی، این قسمت توی پنل خودته.

با این دستور سریع می بینی نیم سرورها الان کجان:

nslookup -type=NS example.ir

اگه نیم سرورها مال سرویس دیگه ای بودن (مثلاً یه CDN)، ویرایش رکورد توی پنل هاست هیچ اثری نداره. یکی از رایج ترین دلیل های «تغییر دادم ولی هیچی عوض نشد» همینه.

رکورد DNS چیست؟ تفاوت A، CNAME، MX و TXT با مثال

رکورد A: آدرس واقعی سایتت

رکورد A یه نام رو به آی پی نسخه ۴ وصل می کنه. ساده ترین و مهم ترین رکورده، چون بدون اون مرورگر نمی دونه سایتت رو از کدوم سرور بگیره.

فرض کن سایت فروشگاهی ات روی سروری با آی پی 192.0.2.10 بالاست. زونش این شکلی می شه:

Name   Type   Value         TTL
@      A      192.0.2.10    3600
www    A      192.0.2.10    3600

خط اول می گه example.ir بره سمت اون آی پی. خط دوم همین کار رو برای www.example.ir می کنه. هر دو رو لازم داری، چون کاربرها هر دو شکل رو تایپ می کنن. بعدش یکی رو به اون یکی ریدایرکت کن تا برای سئو دو آدرس مجزا نداشته باشی.

اگه سرورت آی پی نسخه ۶ هم داره، رکورد جداگانه ای به اسم AAAA می سازی. تا مطمئن نشدی سرور IPv6 رو درست جواب می ده، AAAA اضافه نکن. AAAA غلط بدتر از نبودنشه، چون بعضی کاربرها به آدرسی هدایت می شن که جواب نمی ده.

وقتی آی پی عوض می شه، فقط DNS مهم نیست

رکورد A ساده و سریعه، ولی آی پی رو خودت باید نگه داری. اگه سایتت رو به سرور جدید ببری، باید تک تک رکوردهای A رو دستی عوض کنی.

یه چیز دیگه هم هست که زیاد فراموش می شه. بعضی درگاه های پرداخت فقط از آی پی ثبت شده سرور درخواست قبول می کنن. اگه سرور رو عوض کنی و آی پی جدید رو اعلام نکنی، ممکنه گرفتن توکن پرداخت خطا بده، در حالی که کدت هیچ مشکلی نداره. پس اگه پرداخت آنلاین داری، آی پی جدید رو به بانک یا شرکت درگاهی بدم. دقت کن آی پی که اون ها می خوان آی پی خروجی سروره و لزوماً با آی پی رکورد A یکی نیست، مخصوصاً وقتی جلوی سایت CDN گذاشتی. اگه این بخش برات تازگی داره، CDN برای سایت؛ آیا جای هاست قوی را می گیرد؟ رو بخون.

CNAME: «این اسم همون اسم اونه»

CNAME یه نام رو به نام دیگه وصل می کنه، نه به آی پی. مثل اینکه روی یه در بنویسی «این واحد همون واحد شماره ۵ است». هر آدرسی که واحد ۵ داشته باشه، این هم همون رو داره.

مثلاً می خوای shop.example.ir به یه پلتفرم فروشگاه ساز وصل بشه که خودش آی پی هاش رو مدیریت می کنه:

Name   Type    Value                    TTL
shop   CNAME   stores.provider.example.   3600

فایده اش اینه که اگه اون پلتفرم آی پی هاش رو عوض کرد، تو لازم نیست کاری بکنی. نگهداری ات راحت تر می شه.

حالا بده بستان ها:

  • هر CNAME یه جستجوی اضافه می خواد. تفاوتش معمولاً محسوس نیست، ولی زنجیره های بلند (CNAME به CNAME به CNAME) هم کندتر می شن هم عیب یابی رو سخت می کنن.
  • روی خود دامنه (@) معمولاً نمی تونی CNAME بذاری، چون رکوردهایی مثل MX و NS همیشه روی ریشه دامنه هستن و با CNAME جمع نمی شن. بعضی سرویس ها راه دور زدن دارن (ALIAS یا CNAME flattening)، ولی همه پنل ها پشتیبانی نمی کنن.
  • نامی که CNAME داره نباید رکورد دیگه ای داشته باشه. اگه برای mail هم CNAME گذاشتی و هم MX یا TXT، این ترکیب درست نیست و رفتار سرورها قابل پیش بینی نیست.
  • مقدار CNAME باید نام باشه، نه آی پی. اگه آی پی بذاری، پنل یا قبول نمی کنه یا چیز بی معنی می سازه.

جمع بندی خودمونی: اگه سرور مال خودته و آی پی ثابته، A ساده تر و قابل پیش بینی تره. اگه مقصد مال سرویس بیرونیه و آدرسش ممکنه عوض بشه، CNAME انتخاب بهتریه.

MX: ایمیل ها کجا تحویل داده بشن؟

MX (Mail Exchanger) به سرورهای ایمیل دنیا می گه نامه های @example.ir رو کجا بفرستن. بدون MX درست، سایتت عالی بالاست ولی ایمیل ها برمی گردن یا گم می شن.

فرض کن ایمیل سازمانی رو روی سرور mail.example.ir راه انداختی و یه سرور پشتیبان هم داری:

Name    Type   Priority   Value               TTL
@       MX     10         mail.example.ir.    3600
@       MX     20         mail2.example.ir.   3600
mail    A      -          192.0.2.20          3600
mail2   A      -          192.0.2.21          3600

عدد Priority اولویته و هرچی کوچک تر باشه، اولویت بیشتره. اول به سرور اولویت ۱۰ تحویل می دن و اگه جواب نداد، سراغ ۲۰ می رن. مقدار MX باید نامی باشه که خودش رکورد A داره (همون mail و mail2 توی مثال). گذاشتن مستقیم آی پی توی MX درست نیست.

اشتباهی که زیاد پیش میاد

سایت رو به هاست جدید می بری و نیم سرورها رو عوض می کنی. زون جدید فقط رکورد A داره و MX قدیمی توش نیست. از همون لحظه ایمیل ها دیگه به سرور قبلی نمی رسن و تا کسی شکایت نکنه، متوجه نمی شی. قبل از هر جابه جایی، همه رکوردها (مخصوصاً MX و TXT) رو از زون قدیمی کپی کن. این ماجرا رو توی تغییر DNS؛ چرا سایت برای بعضی کاربران باز نمی شود؟ هم از زاویه دیگه ای توضیح دادیم.

TXT: کارت شناسایی دامنه

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

  • SPF: فهرست سرورهایی که اجازه دارن به اسم دامنه ات ایمیل بفرستن.
  • DKIM: امضای دیجیتال ایمیل. مقدارش رو سرویس ایمیل ات می ده و خودت نمی سازی.
  • DMARC: قانونی که می گه اگه ایمیلی از بررسی SPF و DKIM رد نشد، گیرنده باهاش چه کار کنه.

علاوه بر ایمیل، خیلی از سرویس ها (مثل ابزارهای وبمستر) برای اینکه ثابت کنی دامنه مال خودته، ازت می خوان یه TXT با مقدار مشخص بسازی.

یه نمونه:

Name      Type   Value                                        TTL
@         TXT    "v=spf1 ip4:192.0.2.20 ~all"                 3600
_dmarc    TXT    "v=DMARC1; p=none; rua=mailto:reports@example.ir"   3600

خط اول می گه فقط سروری با آی پی 192.0.2.20 مجازه از طرف دامنه ایمیل بفرسته و بقیه مشکوک حساب می شن (~all یعنی «نرم»، نه رد قطعی). خط دوم DMARC رو روی p=none می ذاره، یعنی فقط گزارش بگیر و چیزی رو رد نکن.

چند نکته که کلی کمک می کنه

  • برای هر دامنه فقط یک رکورد SPF بساز. اگه دو تا TXT با v=spf1 داشته باشی، SPF خطا می ده. اگه چند سرویس از دامنه ات ایمیل می فرستن، همه رو با include: توی یه رکورد جمع کن.
  • DMARC رو از p=none شروع کن و گزارش ها رو چند هفته نگاه کن. بعد کم کم به quarantine و بعدش reject برو. اگه یه سرویس مجاز رو فراموش کرده باشی و یکدفعه reject بذاری، ایمیل های خودت هم رد می شن.
  • بعضی پنل ها مقدار TXT رو خودشون داخل کوتیشن می ذارن. اگه خودت هم بذاری، مقدار خراب می شه.

اگه ایمیل وردپرس «ارسال موفق» می زنه ولی به مقصد نمی رسه، اغلب یکی از همین سه رکورد مشکل داره. ارسال ایمیل وردپرس؛ چرا پیام موفق است ولی نمی رسد؟ و اسپم شدن ایمیل؛ مشکل از هاست است یا فرستنده؟ رو ببین تا بدونی از کجا شروع کنی.

رکورد DNS چیست؟ تفاوت A، CNAME، MX و TXT با مثال

چهار رکورد کنار هم

این جدول فقط برای مرور سریعه:

نوعبه چی اشاره می کنهمثالکاربرد اصلی
Aآی پی نسخه ۴@ به 192.0.2.10باز شدن سایت
CNAMEیه نام دیگهshop به stores.provider.example.وصل کردن زیردامنه به سرویس بیرونی
MXسرور ایمیل (با اولویت)10 mail.example.ir.تحویل ایمیل ورودی
TXTمتن دلخواهv=spf1 ...SPF، DKIM، DMARC و تأیید مالکیت

TTL: چرا تغییر فوراً دیده نمی شه؟

TTL مدت نگه داشتن جواب توی حافظه موقت (کش) سرورهای واسطه است. اگه ۳۶۰۰ ثانیه گذاشته باشی، یعنی حدود یک ساعت. پس بعد از تغییر آی پی، بعضی کاربرها تا یک ساعت (یا بیشتر، بسته به رفتار سرویس دهنده شون) هنوز سرور قدیمی رو می بینن. برای همینه که ممکنه برای تو سایت جدید باز بشه و برای مشتری هنوز قدیمی.

بده بستان TTL این شکلیه:

  • TTL کم (مثلاً ۳۰۰ ثانیه): تغییرها سریع تر اثر می کنن، ولی تعداد پرسش ها از سرور DNS بیشتر می شه.
  • TTL زیاد (مثلاً ۸۶۴۰۰ ثانیه): سبک تر و پایدارتره، ولی اگه اشتباه کنی، اصلاحش دیر دیده می شه.

روش معمول اینه که یکی دو روز قبل از جابه جایی TTL رو بیاری پایین و بعد از تأیید همه چیز دوباره بالا ببری. توی ایران ممکنه بعضی سرویس دهنده ها TTL رو کامل رعایت نکنن، پس انتظار نداشته باش همه جا همزمان درست بشه. تغییر رو توی ساعت کم ترافیک انجام بده و اگه سایت پرداخت آنلاین داره، زمان بندی اش رو با پشتیبانی درگاه هم هماهنگ کن.

برای چک کردن از چند جا:

dig +short example.ir A
nslookup example.ir

گام به گام: سایت رو به سرور جدید ببر

فرض کن می خوای سایت example.ir رو به سرور جدید با آی پی 192.0.2.30 منتقل کنی و ایمیل ات روی سرویس جدا بمونه.

  1. نیم سرور فعال رو پیدا کن. با nslookup -type=NS example.ir ببین زون دست کیه.
  2. از همه رکوردهای فعلی یه نسخه بگیر. A، AAAA، CNAME، MX، TXT، همه رو. اسکرین شات هم کافیه.
  3. TTL رکورد A رو بیار پایین. مثلاً ۳۰۰ ثانیه، و صبر کن تا TTL قبلی تموم بشه.
  4. سایت رو روی سرور جدید آماده کن و قبل از تغییر DNS تست کن. با فایل hosts یا یه آدرس موقت.
  5. رکورد A دامنه و www رو به 192.0.2.30 تغییر بده. به MX و TXT دست نزن.
  6. اگه سایتت پرداخت آنلاین داره، آی پی جدید رو به بانک یا شرکت درگاهی اعلام کن. ثبتش فقط از طرف اون ها انجام می شه و با تغییر کد جبران نمی شه.
  7. از چند شبکه چک کن. اینترنت موبایل، ADSL یا فیبر، و اگه می تونی یه سرور بیرونی.
  8. بعد از یکی دو روز TTL رو دوباره بالا ببر.

اگه نمی خوای خودت این مراحل رو بری یا وسط کار گیر کردی، پشتیبانی فنی ما کمک می کنه.

اشتباه هایی که زیاد می بینیم

  • نقطه آخر نام: بعضی پنل ها خودشون دامنه رو به آخر نام اضافه می کنن. اگه توی همچین پنلی mail.example.ir بنویسی، ممکنه بشه mail.example.ir.example.ir. بعضی پنل ها هم نقطه آخر رو لازم دارن. یه بار نمونه خود پنل رو نگاه کن.
  • CNAME روی @: اغلب پذیرفته نمی شه و اگه بشه، MX و TXT دامنه رو خراب می کنه.
  • دو SPF: همون که بالا گفتیم.
  • فراموش کردن www: سایت با example.ir باز می شه ولی با www نه، یا برعکس.
  • تغییر نیم سرور بدون کپی رکوردها: معمولاً اول ایمیل خراب می شه و بعد سایت.
  • ویرایش توی پنل اشتباه: رکورد رو توی هاست عوض می کنی ولی نیم سرور جای دیگه است.

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

رکورد DNS چیست و چه فرقی با نیم سرور داره؟

رکورد DNS یه خط اطلاعاته که مشخص می کنه هر بخش از دامنه کجا بره. نیم سرور جایی است که این رکوردها روش نگهداری می شن. نیم سرور رو مثل دفتر ثبت در نظر بگیر و رکورد رو مثل خط های توی دفتر.

برای ایمیل و سایت می تونم از یک پنل DNS استفاده کنم؟

آره، به شرطی که همه رکوردها توی همون زون باشن. سایت با A و ایمیل با MX و TXT توی یک زون کنار هم کار می کنن. فقط موقع جابه جایی هاست دقت کن MX و TXT از قلم نیفتن.

بعد از تغییر رکورد چقدر باید صبر کنم؟

بستگی به TTL و کش سرویس دهنده ها داره. معمولاً از چند دقیقه تا چند ساعت، و گاهی بیشتر. اگه می خوای تغییر سریع دیده بشه، قبل از انجامش TTL رو کم کن.

CNAME بهتره یا A؟

اگه مقصد آی پی ثابت داره و کنترلش دست خودته، A ساده تر و مطمئن تره. اگه مقصد مال یه سرویس بیرونیه و ممکنه آی پی اش عوض بشه، CNAME راحت تره. روی ریشه دامنه (@) معمولاً فقط A ممکنه، یا یه راه جایگزین مثل ALIAS.

SPF و DMARC رو حتماً باید بذارم؟

اگه از دامنه ات ایمیل می فرستی، خیلی بهتره بذاری. بدون اون ها احتمال اسپم شدن و رد شدن ایمیل بیشتر می شه. با p=none شروع کن تا ببینی چی از دامنه ات ایمیل می فرسته و بعد قانون رو سخت تر کن.

قبل از ذخیره کردن، این سه چیز رو چک کن

اول مطمئن شو توی پنل درست هستی، یعنی نیم سرور فعال همونیه که داری ویرایشش می کنی. دوم، قبل از هر تغییر یه نسخه از همه رکوردها بگیر، مخصوصاً MX و TXT. سوم، TTL رو با زمان بندی تغییرت هماهنگ کن. با همین سه کار، بیشتر ماجراهای «سایت بالا اومد ولی ایمیل ها نمی رسن» اتفاق نمی افته.

اگه از معماری کلی سایت و سرویس ها مطمئن نیستی، مشاوره و معماری هم می تونه کمک کنه.

  • DNS
  • دامنه
  • رکوردهای دامنه
  • تنظیمات دامنه
  • هاست

مقاله‌های مرتبط

ادامه همین موضوع در وبلاگ.

همه مقاله‌ها
کمک فنی

برای اجرای این کار کمک می‌خواهید؟

تیم فنی Wbweb از طراحی سایت تا هاست و سرور کنار شماست؛ درخواستتان را ثبت کنید یا تیکت بزنید.