در میان تمام رکوردهایی که بهطور معمول دربارهٔ دامنه اعمال میشوند، رکورد CNAME کمی ناشناختهتر است. همین ناشناختگی باعث میشود گاهی فکر کنیم که کاربرد خاصی هم ندارد و میتوانیم آن را با سایر رکوردها یا روشها جایگزین کنیم. اما برخلاف این تصور، کارهای زیادی هست که میتوان با این رکورد انجام داد. پس تا انتهای مطلب با ما باشید و بخوانید رکورد cname در dns چیست و نحوهٔ کار با آن چطور است.
🟢 در ضمن اگر هنوز با مفهوم رکوردها آشنایی ندارید، بهتر است مقالۀ «DNS چیست» را نیز بخوانید.
رکورد CNAME چیست؟
رکورد Cname یا canonical name یکی از انواع رکوردهای DNS است که در واقع نام مستعار را به نام دامنه واقعی ارجاع میدهد. به بیان دیگر دامنهای با رکورد CNAME مانند سرنخی است که میتواند شما را به سرنخ دیگری (دامنه دیگری با رکورد CNAME) یا منبع اصلی (دامنه ای با رکورد A) هدایت کند.
یک مثال برای اینکه راحتتر درک کنید:
فرض میکنیم که یک زیر دامنه مانند www.blog.mydomain.com دارید و آن را بهعنوان نام مستعار برای نام دامنه اصلی تنظیم میکنید. در این مثال، سابدامین www.blog.mydomain.com یک رکورد CNAME خواهد داشت که به دامنۀ ریشه، یعنی mydomain.com اشاره میکند.
آناتومی رکورد CNAME
ساختار یک رکورد CNAME از تعریف فرمت top-level استاندارد تعریف شده RFC 1035 پیروی میکند. بخش RDATA از یک المان تشکیل شده است، این المان عبارت است از:
CNAME <domain-name>
که در آن <domain-name> یک نام دامنه کاملاً واجد شرایط و معمولی مثل example.com است. حالا یک چنین رکوردی در DNS با المانهای قابل تنظیم زیر نمایش داده میشود:
NAME: نام میزبان رکورد، بدون دامنه.
TTL یا (Time to Live) : مدت زمانی که که رکورد مجاز است توسط یک مترجم ذخیره شود.
Type: نوع رکورد که قاعدتاً در اینجا CNAME است.
Value: هر رکورد CNAME با دونوع مقدار (Value) ذخیره میشود. اول نام مستعاری که در حال ایجاد رکورد برای آن هستید که معمولاً ساب دامین است، دوم دامنهای که نام مستعار باید به آن اشاره کند را مشخص میکند.
کاربردهای CNAME Record
زمانی که یک مترجم DNS به دنبال یک رکورد معمولی میگردد تا آن را به IP ترجمه کند و با رکورد CNAME مواجه میشود؛ به ناچار وارد یک مسیر طولانیتر میشود. یعنی ابتدا رکورد مستعار CNAME را دنبال میکند تا به رکورد اصلی برسد سپس بهجای راهاندازی مجدد جستجو، همان IP که برای رکورد اصلی ثبت شده است را بهعنوان نتیجه برمیدارد.
گیج کننده بود؟ بیایید با یک مثال پروسه را کمی شفافتر کنیم. فرض کنید یک منطقه DNS به شرح زیر وجود دارد:
NAME TYPE VALUE
--------------------------------------------------
bar.example.com. CNAME foo.example.com.
Foo.example.com. A ۱۹۲.۰.۲.۲۳
حالا وقتی یک جستجوی رکورد برای bar.example.com انجام شود، مترجم رکورد CNAME را میبیند و بررسی را در foo.example.com شروع میکند و سپس ۱۹۲.۰.۲.۲۳ را برمیگرداند.
اما چرا باید از این رکورد استفاده کرد تا این پروسه پیچیده طی شود؟
همانطور که تاکنون احتمالاً متوجه شدهاید، از CNAME برای ایجاد alias name یا نام مستعار برای یک Host A استفاده میشود. این «نام مستعار» دقیقاً همانچیزی است که فکر میکند. اگر نخواهیم نام هاست اصلی هویدا شود یا مثلاً هاست چندین سرویس را اجرا کند، میتوانیم برای هریک به صورت جداگانه و با کمک CNAME نامهای مستعاری ایجاد کنیم که همگی به یک هاست اشاره دارند.
علاوهبر اینها در برخی فرآیندهای گوگل نیز ممکن است به این رکورد نیاز پیدا کنید. برخی از این فرآیندها عبارتند از:
- تایید مالکیت دامنه برای ثبت محصول در Google Cloud
- سفارشیسازی یک آدرس برای یک سایت با Google Sites
- سفارشیسازی یک آدرس برای سرویسهای Gmail، Google Calendar یا Google Cloud و سایر ابزارهای گوگل
- بازیابی رمز عبور در سرچ کنسول
نحوۀ مدیریت رکوردهای CNAME توسط DNS
حالا که بهاندازهٔ کافی دربارهٔ این رکورد میدانید بیایید به سراغ مراحل ایجاد و سپس نحوه مدیریت آن برویم.
برای ایجاد یک رکورد نام مستعار مراحل زیر را پشت سر بگذارید:
۱. وارد کنترل پنل خود شوید و از بخش مدیریت DNS گزینهٔ Zone editor را انتخاب کنید.
۲. در این بخش روی تب +CNAME کلیک کنید و طبق راهنما در فیلد اول آدرس رکورد جدید و در بخش دوم دامنه بدون پیشوند یا CNAME را وارد کنید.
(راهنمای تصویر زیر و بخش آناتومی به شما کمک میکنند اطلاعات را برای آدرس خود بهخوبی تشخیص بدهید.)
۳. با این اقدامات معمولاً کار تمام میشود. اما اگر از شما درخواست مقداری برای TTL شد، میتوانید آن را روی پیشفرض ۳۶۰۰ بگذارید.
مدیریت CNAME در کنسول DNS
اگر قصد دارید CNAME را در کنسول DNS مدیریت کنید، این بخش را از دست ندهید و قدم به قدم با آموزش همراه باشید.
۱. در کنسول DNS Manager به سراغ zone مورد نظرتان بروید.
۲. روی رکورد مورد نظر در Forward Lookup Zones کلیک راست کنید و New Alias (CNAME) را انتخاب کنید.
۳. در پنجرهای که باز میشود اطلاعات زیر را وارد کنید:
- Alias name: نام مستعار رکورد
- FQDN : این فیلد با درج نام مستعار بهطور خودکار پر میشود.
- FQDN for target host: میزبانی که رکورد CNAME به آن اشاره میکند را وارد کنید. (میتوانید با کلیک روی Browse از بین گزینههای موجود انتخاب کنید.)
- در بخش پایین میتوانید TTL پیشفرض ۳۶۰۰ یا میزان دلخواه را وارد کنید.
حالا میتوانید در صورت نیاز و تسلط خودتان، تنظیمات پیشرفتهتر را در PowerShell ادامه بدهید.
فرایند ترجمه DNS برای رکوردهای CNAME
هنگامی که کاربر یک نام دامنه را در مرورگر خود وارد میکند، مرورگر ابتدا به سرور DNS محلی خود متصل می شود و یک درخواست Resolve یا ترجمه برای این نام دامنه ارسال میکند. در این مرحله سرور DNS محلی بهطور پیشفرض به سرور DNS یا ISP شرکت میزبان متصل میشود تا آدرس IP مربوط به نام دامنه را پیدا کند.
اگر نام دامنه حاوی یک رکورد CNAME باشد، سرور DNS باید بهجای یافتن مستقیم آدرس IP، نام دامنه دیگری را برای ترجمه جستجو کند.
برای انجام این کار، سرور DNS از اطلاعات موجود در رکورد CNAME برای یافتن نام دامنه جدید مورد استفاده برای تفکیک استفاده میکند و یک درخواست ترجمه برای نام جدید به سرور DNS دیگری ارسال میکند.
این فرآیند میتواند ادامه یابد تا زمانی که نام دامنهٔ جدید بدون داشتن سابقه CNAME به یک آدرس IP اختصاص داده شود. در این حالت، سرور DNS نتیجه ترجمه را به سرور DNS محلی برمیگرداند و سرور DNS محلی آن را به مرورگر کاربر ارسال میکند تا از آدرس IP مربوطه برای بارگذاری صفحه وب استفاده کند.
آیا یک رکورد CNAME میتواند به رکورد CNAME دیگری اشاره کند؟
طبق نظر سایت Cloudflare learning از لحاظ تئوری بله، شدنی است. اما از منظر کاربرد، اشارهکردن یک رکورد CNAME به یک رکورد CNAME دیگر تقریباً ناکارآمد است. چرا که قبل از بارگیری دامین، لازم است جستجوهای متعددی در DNS انجام شود که خب این کار سرعت و تجربه کاربری را تحت تأثیر قرار میدهد. اما ممکن است یک دامنه مثل blog.example.com یک رکورد CNAME داشته باشد که به رکورد CNAME دیگری مثل www.example.com اشاره کند که مورد دوم به رکورد A در example.com اشاره دارد.
چند مثال از رکورد CNAME
خیلی خب! تا بهحال یکریز دربارهٔ رکورد CNAME حرف زدهایم اما یک رکورد کامل را هم بررسی نکردهایم. چطور است که در این بخش برخی مثالها را بررسی کنیم تا تکلیف این رکورد برایتان معلوم شود؟
مثالی از CNAME از زیر دامنه به زیر دامنه :
NAME TYPE VALUE
--------------------------------------------------
old.example.com. CNAME new.example.com.
new.example.com. A 192.162.100.101
مثالی از CNAME از زیر دامنه به دامنه ریشه دیگر:
NAME TYPE VALUE
--------------------------------------------------
other.example.com. CNAME www.other.com.
در این مثالها فرض کردهایم که یک رکورد A برای دامنه “www.other.com” در یک فایل DNS دیگر ارائه شده است.
محدودیتهای CNAME Record چیست؟
با وجود تمام کاربردهایی که برای CNAME برشمردیم باید بگوییم که این رکورد با محدودیتهایی هم مواجه است:
- CNAME ها نمیتوانند به آدرس IP اشاره کنند.
- CNAME ها نمیتوانند با هیچ داده دیگری سینک شوند، زیرا نمیتوانند هم نام مستعار باشند و هم چیز دیگری را ارائه کنند.
- هیچ دو رکورد NS و MX هرگز نباید به نام مستعار CNAME نگاشت شوند.
پیکربندی زیر نباید استفاده شود:
example.com. MX 0 mailhost.
mailhost. CNAME host.example.com.
host.example.com. A 192.0.1.1
اگرچه این محدودیت ها تا حدی قابلیت استفاده از این رکوردها را محدود میکند، اما گاهی راههای میانبری برای دور زدن این محدودیتها نیز وجود دارد.
نحوه تغییر رکورد CNAME
برای ایجاد تغییر، دو راه دارید: میتوانید رجیسترار خود را پیدا کنید و در سایت آنها حساب بسازید و از طریق آن حساب اقدام کنید. که خب راه سختی است و همین حالا میگذاریمش کنار.
راه دوم این است که از طریق کنترلپنل هاست وارد مدیریت DNS شوید. اگر کنترلپنل شما دایرکت ادمین باشد که کار بسیار ساده است. از مسیر Account Manager > DNS Management بروید و رکورد موردنظر را پیدا و ویرایش کنید.
اما اگر کنترلپنل هاست شما Cpanel باشد، رکوردهای A و CNAME را مستقیم در لیست رکوردها پیدا نمیکنید.
در واقع برای پیدا کردن این رکوردها در لیست، باید درخواست بدهید. اگر سرور اختصاصی دارید و دسترسی به سرور لینوکس برای شما باز است، میتوانید مستقیماً کد زیر را در ترمینال خود کپیپیست کنید:
grep -P "\b(:?A|CNAME)\b" /var/named/domain.tld.db
domain.tld. 14400 IN A 10.2.50.222
mail 14400 IN CNAME domain.tld.
www 14400 IN CNAME domain.tld.
ftp 14400 IN A 10.2.50.222
whm 14400 IN A 10.2.50.222
webdisk 14400 IN A 10.2.50.222
cpcontacts 14400 IN A 10.2.50.222
cpanel 14400 IN A 10.2.50.222
webmail 14400 IN A 10.2.50.222
cpcalendars 14400 IN A 10.2.50.222
اما اگر کاربر هاست اشتراکی هستید و دسترسی ندارید، بایستی به پشتیبان هاست خود تیکت بزنید و درخواست بدهید این کار را برایتان انجام بدهند.
انواع رکوردهای جایگزین CNAME
میتوان گفت که دونوع از رکوردهای دیگر هم تقریباً کار CNAME یعنی اشاره به منبع دیگر را انجام میدهند، اما تفاوتهایی دارند:
- رکورد A:
رکورد A هم میتواند یک دامنه را به منبع دیگری ارجاع بدهد. با این تفاوت که این رکورد برای IPها کاربرد دارد. در صورتی که رکورد CNAME برای ارجاع یک میزبان به میزبان دیگر یا رکورد دیگر کاربرد دارد.
- رکورد ALIAS:
شباهت رکورد ALIAS و رکورد CNAME در نوع نگاشت آنها است که هر دو میزبانی را به میزبان دیگر ارجاع میدهند. با این تفاوت که ALIAS Record این امکان را دارد که سایر رکوردهای DNS در همان نام میزبان را فراهم کند. اما CNAME چنین امکانی را ندارد. علاوهبر این رکورد ALIAS میتواند در دامنهٔ روت (DNS zone apex) نیز اعمال شود، اما CNAME چنینی امکانی را ارائه نمیکند.
سوالات پرتکرار
۱. تعریف cname در کلودفلر چیست؟
از منظر Cloudflare رکورد CNAME یکی از رکوردهای DNS است که بهنوعی نام مستعاری برای رکورد A به حساب میآید. یعنی برای کاربردهای خاصی به جای اشاره به یک آدرس IP به یک رکورد دیگر اشاره میکند.
۲. تفاوت A record و cname در چیست؟
رکورد A برای اشاره به یک IP ایجاد میشود، اما رکورد CNAME برای اشاره به سایر دامنهها یا میزبانی سایر رکوردها تنظیم میشود.
۳. نحوه استفاده از cname چیست؟
اگر برای سفارشیسازی یا تایید مالکیت سایت در ابزارهای گوگل به مشکل برخوردهاید به رکورد CNAME نیاز دارید. برای ایجاد این رکورد مثل هر رکورد دیگری میتوانید از طریق کنترلپنل یا سامانه DNS اقدام کنید. مدیریت این رکورد در پنل DNS manager انجام میشود.
این پایان رکورد CNAME نیست!
تاکنون دانستیم که cname record چیست و چطور کار میکند. با نحوهٔ ایجاد و کاربردهای آن آشنا شدیم. لازم است به شما هشدار بدهیم که پس از هر تغییری در دامنهٔ اصلی یا میزبان واسطه، بررسی کنید که آیا ریکورد CNAME هنوز به درستی کار میکند یا خیر.
چرا که هربار تغییری در مبدأ و مقصد ایجاد شود، CNAME بهعنوان یک واسطه، تحتتاثیر قرار میگیرد. از مشکلات رایج دیگری که عموم افراد با CNAME دارند، عدم دسترسی به URL جدید است. اگر بعد از ایجاد این رکورد نتوانستید به URL دسترسی پیدا کنید ـ در صورتی که پیکربندی را به درستی رعایت کرده باشید ـ مشکل با پاک کردن کش مرورگر حل میشود.
با تمام این توضیحات اگر هنوز سوال یا ابهامی دارید، میتوانید از بخش نظرات زیر همین پست از ما بپرسید و پاسخ بگیرید. همچنین میتوانید تجربیات مفید خود را با سایر کاربران به اشتراک بگذارید.
برای نوشتن این مقاله از سایتهای زیادی استفاده کردهایم که مهمترین آن ns1 resources است.
دیدگاه ها
اولین نفری باشید که دیدگاه خود را ثبت می کنید