محمد نصیری
بنیانگذار توسینسو ، هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات و عاشق طبیعت

DNS چیست و چگونه کار می کند؟ داستان DNS به زبان طنز

فرآیند تبدیل اسم به IP و برعکس در DNS (دی ان اس) چگونه انجام می شود؟ سرویس DNS دو وظیفه کلی دارد ، تبدیل کردن اسامی به آدرس های IP و همچنین تبدیل کردن آدرس های IP به اسامی ، بدون شک سرویس DNS را می توان حساس ترین و مهمترین سرویس در شبکه های کامپیوتری دانست .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

برای اینکه بتوانید به درستی با این سرویس کار کنید و حساسیت آن را به خوبی درک کنید ابتدا بایستی به خوبی این سرویس را بشناسید. در این مقاله قصد دارم روش کارکرد این سرویس را با استفاده از تعریف یک داستان برای شما تشریح کنم.داستانی که اگر خوب آن را به ذهن بسپارید دیگر مشکلی با DNS نخواهید داشت.

این داستان را من تقریبا سه بار در یک دوره شبکه برای دانشجویان تکرار می کنم ، بنابراین مشخص است که سرویس DNS از چه اهمیتی برخوردار است . حال به سراغ تعریف داستان می رویم ، دقت کنید که داستان کاملا خیالی است و شخصیت های آن برگرفته ای از داستان واقعی نمی باشند فقط در این میان محمد نصیری است که خالق این داستان خیالی است. به مفهوم عملیات دقت کنید DNS یعنی همین داستان که دائما ممکن است در زندگی ما اتفاق بیوفتد.

معرفی سرویس DNS و مفاهیم مرتبط با آن

داستان DNS چیست؟ مکانیزم کاری DNS به زبان زیادی ساده

یکی بود ، یکی نبود ، سالها پیش شخصی به نام محمد نصیری زندگی می کرد که همه او را به اسم Unity می شناختند. Unity مدرس دوره های تخصصی شبکه و امنیت اطلاعات بود و روزی که قرار بود برای تدریس بصورت پروازی به یک شهر دیگر عزیمت کند هرگز فکرش را هم نمی کرد که ممکن است در این سفر چه خطراتی وی را تهدید کند. خلاصه بعد از اینکه به شهری دور برای برگزاری کمپ امنیت رفته بود با یک شرکت در همان شهر که فکر می کنم نامش اهواز بود قرارداد همکاری بست و شروع به کار کرد ، یک هفته کمپ دوره امنیت برگزار شد و قرار شد بعدا حق التدریس دوره برای Unity فرستاده شود.

تا اینجای کار مشکلی نبود تا اینکه از همان شهر Unity تصمیم گرفت به یک مسافرت خارجی به مالزی برود ، سوار بر هواپیما که بود تروریست ها هواپیما را ربودند و آنرا به یک کشور دور افتاده منتقل کردند ، در این میان Unity خواست از خود جانفشانی نشان دهد و مسافران را نجات دهد که متاسفانه تروریست ها به این مسئله پی پردند و یک تیر در سر Unity زدند و به گمان اینکه او مرده است وی را رها کردند ، اما Unity نمرده بود و خوشبختانه یک رهگذر او را پیدا کرد و به بیمارستان آورد ، او مدتی در کما بود تا اینکه به هوش آمد اما متاسفانه حافظه خود را از دست داده بود .

هیچ چیز را به به خاطر نمی آورد تا اینکه یک روز یکی از دانشجویان دوره امنیت او که ویزای کار گرفته بود و در همان کشور اقامت می کرد او را دید ، خلاصه سلام و احوالپرسی کرد اما Unity او را نمی شناخت ، دانشجو به او گفت استاد پول کمپ امنیت را برای شما فرستادند یا خیر ؟ Unity پاسخ داد به خاطر نمی آورم ، دانشجو گفت بهتر است به شهر اهواز برگردید و پول خود را درخواست کنید ، به او یک آدرس دقیق داد که با استفاده از آن به شهر اهواز و محل مورد نظر برود و حق التدریس خود را بگیرد ، آدرس به شکل زیر بود :

ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی

Unity شروع به جستجو کرد اما از کجا باید شروع می کرد ؟ در مرحله اول Unity باید به حافظه اش مراجعه می کرد ( تو ذهنتون داشته باشید این حافظه همون Cache سیستم خواهد بود) ، اما او حافظه خود را پاک کرده بود ( یعنی دستور ipconfig /flushdns را زده بود ) ، گزینه دوم این بود که به دنبال یادداشتی بگردد که در آن شاید آدرس دقیق وجود داشته باشد ( منظور فایل HOSTS سیستم است ) ، اما در جیبش هیچ یادداشتی نبود ، تنها راهکار این بود که آدرس را از یک شخصی که شناخت کافی از آدرس دارد بپرسد ، اولین گام سئوال کردن از اطرافیان نزدیک بود ( درخواست به آدرس DNS سروری که روی کارت شبکه تعریف شده است ارسال می شود ) ، از اولین شخصی که در آنجا دید سئوال کرد :

سلام شما : ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی میشناسید ؟

طرف جواب داد : من ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس طریحی رو نمیشناسم اما می دونم ایران کجاست و شما می تونید برید ایران اونجا ادامه آدرس رو پیدا کنید من اونجا شخصی رو میشناسم که ایران رو خوب بلده و به این ترتیب Unity وارد ایران شد و از نفر بعدی که در ایران بود این سئوال را پرسید :

سلام شما : ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی میشناسید ؟

طرف جواب داد : من ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی رو نمیشناسم ، اما اینجا ایران هست و من می تونم بهت آدرس شخصی که خوب خوزستان رو میشناسه رو بهت بدم و بدین ترتیب Unity وارد خوزستان شد و از شخصی که خوزستان رو خوب میشناخت این سئول رو پرسید :

سلام شما : ایران – خوزستان – اهواز – گلستان –نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی میشناسین ؟

طرف جواب داد : من ایران – خوزستان – اهواز – گلستان نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی رو نمیشناسم اما شخصی رو میشناسم که گلستان رو خوب می شناسه ، آدرس اون رو بهت میدم برو ازش بپرس ، بدین ترتیب Unity وارد گلستان شد و از شخصی که گلستان رو خوب میشناخت این سئوال رو پرسید :

سلام شما : ایران – خوزستان – اهواز – گلستان – نبش سعدی – شرکت داده پردازی آبشار – مهندس مهران طریحی میشناسید ؟

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

  1. دقت کنید در هر بار پرسیده شدن سئوال ، سئوال بصورت کامل پرسیده میشه
  2. بعد از پرسیدن هر سئوال یک آدرس جدید از شخصی که دارای اطلاعاتی در خصوص مقصد هست داده میشه
  3. Unity بعد از رسیدن به مقصد دیگه نیازی نیست برای مراجعه مجدد این مسیر رو طی کنه در حافظش باقی می مونه این مسیر و آدرس
  4. اگر آدرس مهران طریحی عوض بشه متاسفانه Unity هر بار به آدرس قدیمی مراجعه می کنه و دیگه سئوال و جواب نمی کنه
  5. برای اینکه Unity با تغییر آدرس مهران طریحی مجددا بتونه پیداش کنه باید حافظه خودش رو پاک کنه و مراحل رو مجددا انجام بده.

خلاصه Unity به چکش رسید و ماجرا ختم به خیر شد ، توجه کنید که مهندس مهران طریحی از دوستان صمیمی بنده است و این متن صرفا برای شوخی با این دوست خوب تهیه شده است و هیچ واقعیتی در کار وجود ندارد ، در مقاله بعدی همین مراحل را در قالب عملیاتی که DNS سرور انجام می دهد برای شما دوستان تشریح خواهم کرد تا درست مفهوم سرویس DNS درک بشود ، دقت کنید که این مراحل در همه انواع سرورهای DNS یکسان است و این عملیات وابستگی به محصول سرور خاصی ندارد

در ابتدای این مقاله متوجه شدید که شخصی با هویت Unity به دنبال آدرس شخصی به نام مهران طریحی می گشت و در نهایت با طی کردن یک سری مراحل به نتیجه رسید . در این مقاله همین مبحث را به سمت معرفی سرویس DNS می بریم ، داستان قبلی را کاملا در ذهن داشته باشید اما اینبار شخصیت اصلی داستان ما یک کامپیوتر است که در داخل یک شبکه قرار گرفته است و قرار است آدرس IP یک وب سایت اینترنتی را پیدا کند .

می خواهیم بدانیم چه مراحلی طی می شود تا این کامپیوتر در نهایت آدرس IP مربوط به وب سایت مورد نظر را پیدا کند ؟ کامپیوتری که در تصویر زیر مشاهده می کنید آدرس وب سایتی به نام www.tosinso.com را در مرورگر خود وارد می کند به محض اینکه کلید Enter فشرده شد مراحل زیر در کامپیوتر یک که ما آن را به عنوان ITPRO-Client نامگذاری کرده ایم انجام می شود :

روش کار DNS

1- ابتدا کامپیوتر بررسی می کند که آیا قبلا به این آدرس دسترسی پیدا کرده است و در حافظه خود آدرس IP این سرور وب را دارد یا خیر ؟ این دقیقا مشابه موردی است که در داستان قبلی اشاره کردیم ، Unity قبل از هر چیزی به حافظه خود مراجعه می کند. اگر در این لحظه کامپیوتر مورد نظر آدرس IP را در حافظه Cache خود داشته باشد یکراست به سراغ وب سایت مورد نظر خواهد رفت همانطور که در سناریوی قبلی اگر Unity آدرس فرد مورد نظر را در حافظه داشت بلافاصله مستقیما به وی مراجعه می کرد . ما فرض می کنیم که در اینجا آدرس وب سرور مورد نظر در Cache سیستم وجود نداشت.

2-مرحله بعدی بررسی کردن فایلی به نام Hosts می باشد که بر روی سیستم قرار دارد ، سیستم کلاینت بررسی می کند که آیا در این فایل آدرس وب سرور مورد نظر قرار دارد یا خیر ؟ اگر قرار داشته باشد بلافاصله به وب سایت مورد نظر مراجعه می کند و اگر نداشته باشد مرحله بعدی انجام می شود ، این دقیقا مشابه چیزی است که در سناریوی قبلی اشاره کردیم Unity به دنبال یادداشتی بود که در آن آدرس دقیق نوشته شده باشد ، باز هم فرض را بر این می گذاریم که آدرس مورد نظر در فایل Hosts وجود نداشت ، برای کسب اطلاعات بیشتر در خصوص فایل Hosts می توانید به مقاله مهندس سعید خلیفی که بصورت کامل در خصوص فایل Hosts توضیح داده اند در همین لینک مراجعه کنید.

3-در مرحله سوم کامپیوتر با توجه به اینکه هیچ اطلاعاتی از آدرس IP وب سایت مورد نظر در Cache و Hosts فایل خود پیدا نکرد آنرا برای آدرس DNS سروری که روی کارت شبکه آن تعریف شده است ارسال می کند ، این دقیقا مشابه مثال ما در مقاله قبلی است که زمانیکه Unity نتوانست از حافظه و یادداشت های دستی آدرس را پیدا کند از اولین نفری که می شناخت در خصوص آدرس مورد نظر سئوال کرد ، بنابراین درخواست Client به سمت سرور DNS ارسال می شود. در واقع کلاینت از سرور به این شکل سئوال می کنید : آیا شما www.tosinso.com. می شناسید ؟

4-در مرحله بعدی درخواست بصورت کامل به DNS سرور ارسال می شود یعنی کامپیوتر از DNS سرور سئوال می کند که آیا شما آدرس IP مربوط به سرور www.tosinso.com. را می شناسید ؟ دقت کنید همیشه در انتهای اسم وب سایت یک نقطه قرار دارد این نقطه نمایانگر DNS سرورهای ریشه یا نقطه هستند که در واقع مرجع اصلی DNS در دنیا هستند ، خوب در این قسمت DNS سرور نیز یک سری مراحل را برای پیدا کردن آدرس IP اسم مورد نظر شما انجام می دهد .

ابتدا DNS سرور در Zone های خود بررسی می کند که آیا در Zone های خود چنین آدرس ای وجود دارد یا خیر ؟ اگر وجود داشته باشد بلافاصله به کلاینت پاسخ می دهد اگر نداشت به مرحله بعدی می رود ، مرحله بعدی بعد از بررسی Zone ها Cache سرور DNS است ، به یک نکته مهم توجه کنید که در ساختار DNS سرور ابتدا اطلاعات Zone ها بررسی می شود و سپس به سراغ Cache سرور می رویم این دقیقا نکته بسیار مهمی در اولویت بندی کارهای DNS می باشد.

5-اگر در Zone های DNS نیز اطلاعات مورد نیاز وجود نداشت DNS سرور به سراغ مرحله بعدی می رود ، در این مرحله DNS سرور بررسی می کند که آیا برای این اسم Domain یک سرور DNS بصورت دستی تعریف شده است یا خیر ؟ اگر تعریف شده باشد درخواست DNS را یکراست به سمت سرور مورد نظر می فرستد ، در این مثال اگر در این سرور DNS تعریف شده باشد که هر درخواستی که برای Domain ای به شکل tosinso.com دریافت شد را به سرور مورد نظر خاصی ارجاع دهید عملیات به این شکل انجام می شد .

به این حالت در اصطلاح فنی Conditional Forwarding یا ارجاع دستی گفته می شود ، یعنی برای سرور تعریف شده است که در صورت دریافت درخواست Domain خاص ، درخواست را به یک سرور مشخص ارسال کند. این دقیقا مثل این است که هر کدام از افرادی که Unity در مرحله قبلی از آنها سئوال می کرد دقیقا شخص مهندس مهران طریحی را می شناختند ، خوب در چنین شرایطی به نوعی یک Shortcut برای پیدا کردن آدرس ایجاد شده است. فرض را بر این می گذاریم که حتی در سرور DNS یک Conditional Forwarder هم ایجاد نشده است و DNS سرور مجبور است به مرحله بعدی برود.

6-بعد از اینکه Conditional Forwarder ها بررسی شدند و موجودیتی برای مقصد مورد نظر ما وجود نداشت DNS سرور به سراغ Forwarder ها می رود ، تفاوت forwarder و Conditional Forwarder در این است که در Conditional Forwarder شما برای درخواست های خود شرط تعیین می کنید اما در Forwarder شما هر در خواستی که DNS سرور نتواند پاسخگویی کند را به سمت آدرسی که در Forwarder تعیین شده است ارسال می کند ، این مشابه آن است که در سئوال قبلی Unity شخصی که از آن سئوال می کنیم بدون توجه به اینکه درخواست شما چه چیزی است درخواست شما را به سمت فرد دیگری ارسال می کند ، در اینجا باز هم فرض را بر این می گذاریم که Forwarder ای نیز در DNS سرور شما وجود ندارد و DNS سرور به سراغ مرحله بعدی خواهد رفت .

7-در نهایت بعد از اینکه DNS سرور شما نتوانست آدرس مورد نظر شما را با توجه به طی کردن همه مراحل بالا پیدا کند درخواست شما را به سمت DNS سرور های ریشه در اینترنت ارسال می کند ، در واقع DNS سرور اولی شما به کاربر اینگونه پاسخ می دهد ، من www.tosinso.com. را نمی شناسم اما سروری را می شناسم که میزبانی دامین های ریشه یا نقطه را دارد ، آدرس IP آن را دارم از او سئوال می کنم ، و بدین صورت در خواست شما از طریق DNS سرور شبکه داخلی شما به سمت DNS سرور ریشه ارسال می شود .

در واقع DNS سرور شما از DNS سرور ریشه این سئوال را می پرسد : آیا شما www.tosinso.com. می شناسید ؟ در پاسخ به این سئوال Root DNS سرور هم همانند مرحله قبلی موارد را به ترتیب بررسی می کند : آیا در Zone های من وجود دارد ؟ آیا در Cache من وجود دارد ؟ آیا در Conditional Forwarder های من وجود دارد ؟ آیا در Forwarder های من وجود دارد ؟ در این مرحله Root DNS به درخواست به این شکل پاسخ می دهد : من www.tosinso.com. را نمی شناسم اما خودم سرور نقطه ها هستم و آدرس IP سروری را دارم که میزبان دامنه های com است و به DNS سرور شبکه داخلی شما آدرس IP سرور DNS میزبان دامنه های ir را بر می گرداند.

8-DNS سرور داخلی شما که اکنون آدرس IP سرورهای دامنه های .ir را دارد به این سرور میزبان مراجعه می کند و از آن سئوال می کند که آیا شما www.tosinso.com. می شناسید ؟ این DNS سرور مشابه عملیات قبلی را انجام می دهد ، ابتدا اطلاعات Zone هایش را بررسی می کند ، سپس به سراغ Cache سرور می رود ، سپس Conditional forwarder و بعد از آن هم Forwarder ها را بررسی می کند ، DNS سرور دامنه های com به وی پاسخ می دهد که من www.tosinso.com. را نمی شناسم اما خودم سرور com. هستم و سرور DNS ای را می شناسم که دامنه های tosinso.com را میزبانی می کند ، در این زمان آدرس سرور میزبان دامنه های tosinso.com را در اختیار ما قرار می دهد و DNS سرور شبکه داخلی شما با دارا بودن آدرس سرور جدید به سرور tosinso.com مراجعه می کند .

9-در این زمان ما به سرور tosinso.com رسیده ایم و از این سرور سئوال می کنیم که آیا شما www.tosinso.com. می شناسید ؟ سرور در پاسخ ابتدا Zone هایش را بررسی می کند ، در اینجا قطعا پاسخ را دریافت می کنید زیرا سرور به شما می گوید که بله می شناسم این سرور که ما آن را در Zone خود به نام www می شناسیم در فلان آدرس IP قرار دارد و آدرس IP سروری که میزبان این وب سایت است را در اختیار DNS سرور شبکه داخلی شما قرار می دهد و در آخر هم DNS سرور آدرس IP را به کلاینت می دهد و کلاینت وب سایت مورد نظر را باز می کند.

DNS چیست و چگونه کار می کند؟ داستان DNS به زبان طنز قسمت 2

حالا کلاینت آدرس IP سرور مورد نظر را دارد و اگر قرار باشد بار دیگر به این آدرس وب سایت مراجعه کند دیگر نیازی به این فرآیند رفت و برگشتی برای پیدا کردن آدرس IP سرور مورد نظر نخواهد داشت ، دقت کنید که به این فرآیند رفت و برگشتی که انجام می شود در اصطلاح فنی Recursion گفته می شود ، حالا اگر آدرس IP سرور مورد نظر عوض شود چه اتفاقی می افتد ؟ کلاینت با توجه به اینکه از Cache خود برای رسیدن به مقصد استفاده می کند دیگر فرآیند Recursion را انجام نمی دهد ، شما باید در چنین مواقعی Cache کلاینت را حذف کنید تا مجددا فرآیند Recursion انجام شود.

از طرفی به این مسئله دقت کنید که در هر بار پرسیدن سئوال از DNS سرورها سئوال ما بصورت کامل سئوال می شود یعنی می پرسیم www.tosinso.com. چه آدرسی دارد ؟ این دقیقا مشابه داستانی است که Unity در هر بار پرسش سئوال خود را از طرف مورد نظر بصورت کامل می پرسید . کلیات DNS سرور و مفهوم آن به همین شکل است کافیست فقط روال کاری آن را یاد بگیرید تا بتوانید براحتی آن را رفع ایراد کنید و طراحی های لازم خود را انجام دهید ، امیدوارم مورد توجه شما قرار گرفته باشد ، اگر سئوالی دارید می توانید در ادامه مطرح کنید. توسینسو باشید


محمد نصیری
محمد نصیری

بنیانگذار توسینسو ، هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات و عاشق طبیعت

هکر کلاه سفید ، کارشناس امنیت اطلاعات و ارتباطات و کشف جرائم رایانه ای ، بیش از 12 هزار ساعت سابقه تدریس در بیش از 40 سازمان دولتی ، خصوصی و نظامی ، علاقه مند به یادگیری بیشتر و عاشق محیط زیست ، عضو کوچکی از مجموعه توسینسو

27 اردیبهشت 1393 این مطلب را ارسال کرده

نظرات