زمان تخمینی مطالعه: 10 دقیقه
پروتکل DNS سرنام (Domain Name System) یک پروتکل شبکه است که برای ترجمه نامهای دامنه به آدرسهای آیپی استفاده میشود. DNS به عنوان یک سیستم نامگذاری سلسلهمراتبی عمل میکند که امکان تطابق نام دامنه با آدرس آیپی متناظر را فراهم میکند. زمانی که شما نام یک وبسایت را در مرورگر خود وارد میکنید، مرورگر ابتدا به سرور DNS محلی شما متصل میشود و درخواست برای ترجمه نام دامنه را ارسال میکند. سپس، سرور DNS محلی درخواست را به سرورهای DNS ریشه در اینترنت ارسال میکند تا مکان سرور DNS مربوط به دامنه مورد نظر را پیدا کنند. در این فرآیند، درخواست DNS از سرور DNS ریشه به سرورهای DNS مربوط به دامنه مورد نظر هدایت میشود تا آدرس آیپی متناظر با نام دامنه را برگرداند. سپس، این آدرس آیپی به مرورگر شما ارسال میشود و مرورگر میتواند ارتباط با سرور مورد نظر برقرار کند.
به طور خلاصه، پروتکل DNS نقش مهمی در ترجمه نامهای دامنه به آدرسهای آیپی دارد تا بتوان ارتباط با منابع شبکه را برقرار کرد. این پروتکل کاربرد زیادی در ساختار اینترنت دارد و در اغلب شبکهها و سرویسهای آنلاین استفاده میشود.
معماری پروتکل DNS به چه صورتی است؟
معماری پروتکل DNS بر اساس ساختار سلسله مراتبی و توزیع شده عمل میکند. این معماری شامل چند سطح و نقش اصلی است که شامل موارد زیر میشود:
سرور DNS ریشه Root DNS Servers
سرورهای سامانه نام دامنه ریشه، مجموعهای از سرورهای DNS هستند که در بالاترین سطح سلسله مراتب سیستم نام دامنه قرار دارند. آنها مسئولیت ردیابی و پیدا کردن اطلاعات مربوط به دامنهها هستند. در ساختار سلسله مراتبی سیستم نام دامنه، سرورهای DNS ریشه نقش مرجع اصلی را ایفا میکنند. هنگامی که یک سرور DNS یا کلاینت DNS درخواستی برای یک دامنه میفرستد و اطلاعات مربوط به آن دامنه در سرور DNS محلی موجود نیست، درخواست به سرورهای DNS ریشه ارسال میشود. سرورهای DNS ریشه لیستی از تمام دامنههای سطح بالا را دارند. به عنوان مثال، دامنههای .com، .org، .net، .edu، .gov و … به عنوان برخی از دامنههای سطح بالا در سرورهای DNS ریشه ثبت شدهاند. وظیفه سرورهای DNS ریشه این است که درخواستها را به سمت سرورهای DNS مسئول (Authoritative DNS Servers) برای دامنههای دارای سطح بالاتر هدایت کنند. به این ترتیب، سرورهای DNS ریشه عملکردی مشابه شرکت مخابرات بین دامنههای سطح بالا و سرورهای DNS مسئول دارند.
سرورهای DNS به طور مستمر توسط سازمانهایی مثل ICANN سرنام Internet Corporation for Assigned Names and Numbers، VeriSign و دیگر سازمانها و شرکتهای مربوطه نگهداری میشوند. تعداد سرورهای DNS ریشه معمولا بسیار کم است، زیرا نقش مدیریتی در این زمینه دارند.
سرورهای DNS مربوط به دامنههای Top-Level سرنام (TLD DNS Servers)
سرورهای سامانه نام دامنه فوق، سرورهایی هستند که مسئولیت نگهداری و مدیریت دامنههای سطح بالا را برعهده دارند. هر دامنه سطح بالا (مانند .com، .org، .net و غیره) دارای یک سرور DNS مربوط به خود است. این گروه از سرورها اطلاعات مربوط به دامنههای سطح بالا را در رکوردهای DNS خود ذخیره کرده و پاسخهای صحیح را برای درخواستهای DNS مربوطه ارائه میدهند.
وقتی کاربر یک درخواست DNS برای یک دامنه سطح بالا ارسال میکند، درخواست ابتدا به سرورهای DNS محلی (Local DNS Servers) ارسال میشود. اگر اطلاعات مربوط به دامنه در سرور محلی موجود نباشد، درخواست به سرورهای DNS مربوط به دامنههای سطح بالاتر ارسال میشود.
همانگونه که ممکن است حدس زده باشید، سرورهای این گروه با دامنههای سطح بالا مرتبط هستند و به عنوان سرورهای DNS مسئول برای آنها عمل میکنند. آنها اطلاعات مربوط به نام دامنههای سطح بالا را در رکوردهای DNS خود نگهداری میکنند و پاسخهای صحیح را بر اساس اطلاعات موجود در آنها ارائه میدهند. با این توصیف باید بگوییم که سرورهای این گروه مسئولیت نگهداری و پاسخدهی به درخواستهای DNS برای دامنههای سطح بالا را بر عهده دارند.
سرورهای DNS مربوط به دامنه Authoritative DNS Servers
این سرورها دارای اطلاعات دقیق درباره نام دامنههای خاص هستند و مسئولیت پاسخ دادن به درخواستهای DNS مربوط به آن دامنه را بر عهده دارند. وقتی کاربر یک درخواست DNS برای یک دامنه ارسال میکند، درخواست ابتدا به سرورهای DNS محلی (Local DNS Servers) ارسال میشود. اگر این سرورهای DNS محلی اطلاعات مربوط به دامنه را نداشته باشند، درخواست به سرورهای DNS مسئول میرود.
سرورهای DNS مسئول برای هر دامنه به صورت معمول حداقل دو سرور هستند، اما ممکن است تعداد آنها فراتر رود. این سرورها معمولا توسط مالکان دامنه یا سرویسدهندگان میزبانی وب تنظیم میشوند. آنها اطلاعات مربوط به نام دامنه را در رکوردهای DNS مربوطه ذخیره میکنند و به درخواستهای DNS برای آن دامنه پاسخ میدهند.
وقتی سرور DNS مسئول درخواستی دریافت میکند، به طور مستقیم پاسخ را با استفاده از اطلاعات موجود در رکوردهای DNS مربوطه ارسال میکند. به عبارت دیگر، این سرورها مسئولیت نگهداری رکوردهای DNS دامنه را بر عهده دارند و پاسخهای صحیح را بر اساس اطلاعات موجود در آنها ارائه میدهند. بنابراین، این سرورهای DNS اطلاعات محدود به یک دامنه خاص را دارند و وظیفه اصلی آنها پاسخدهی به درخواستهای DNS برای آن دامنه است.
سرورهای DNS محلی (Local DNS Servers)
این سرورها در شبکههای محلی وجود دارند و درخواستهای DNS کاربران را پردازش میکنند. آنها معمولا اطلاعات DNS را در حافظه خود برای مدت زمانی مشخص نگهداری میکنند تا زمانی که درخواست مشابهی دریافت کنند. سرورهای DNS محلی (Local DNS Servers) نقش مهمی در عملکرد سیستم نام دامنه (DNS) بازی میکنند. این سرورها به عنوان واسط بین کاربران و سرورهای DNS مسئول عمل میکنند و درخواستهای DNS را از کاربران دریافت کرده و به ترتیب آنها را پردازش میکنند.
زمانی که شما در مرورگر وب یا برنامهای درخواستی برای دسترسی به یک دامنه میفرستید، درخواست ابتدا به سرور DNS محلی شما ارسال میشود. سرور DNS محلی در ابتدا بررسی میکند که آیا اطلاعات مربوط به دامنه در حافظه نهان خود (کش DNS) موجود است یا نه. اگر اطلاعات در کش DNS موجود باشد و هنوز بهروز است، سرور DNS محلی پاسخ را برگردانده و به مرحله پایان میرسد.
اگر اطلاعات مربوط به دامنه در کش DNS موجود نباشد یا منقضی شده باشد، سرور DNS محلی برای پیدا کردن اطلاعات مربوطه به سرورهای DNS دیگری درخواست ارسال میکند. در این مرحله، سرور DNS محلی به صورت سلسله مراتبی از سرورهای DNS دیگر میپرسد تا اطلاعات مربوط به دامنه را دریافت کند.
سرور DNS محلی ابتدا به سرورهای DNS ریشه (Root DNS Servers) متصل میشود و از آنها مکان سرورهای DNS مربوط به دامنه بالاترین سطح (Top-Level Domain DNS Servers) را دریافت میکند. سپس، به سرور DNS مربوط به دامنه بالاترین سطح متصل میشوند و از آنها اطلاعات مربوط به دامنه را درخواست میکند.
وقتی سرور DNS محلی پاسخی دریافت میکند، آن را در کش DNS خود ذخیره میکند تا برای درخواستهای آینده از آن استفاده کند. سپس پاسخ را به کاربر ارسال میکند و کار تکمیل میشود.
سرورهای DNS محلی عملکرد سریعتری نسبت به ارتباط مستقیم با سرورهای DNS مسئول دارند، زیرا زمان دریافت پاسخ از سرورهای DNS محلی به طور کلی کوتاهتر است و همچنین میتوانند اطلاعات را در کش خود ذخیره کرده و استفاده مجدد کنند.
چگونه یک سرور DNS را در لینوکس پیکربندی کنیم؟
برای پیکربندی یک سرور DNS در لینوکس، میتوانید از نرمافزار BIND سرنام (Berkeley Internet Name Domain) استفاده کنید. BIND یکی از سرورهای DNS محبوب و قدرتمند است. مراحل پیکربندی سرور DNS BIND در لینوکس به شرح زیر است:
1. نصب BIND: ابتدا باید نرمافزار BIND را روی سیستم لینوکس خود نصب کنید. بستههای BIND در توزیعهای مختلف لینوکس ممکن است با نامهای مختلفی مانند “bind9” یا “named” در دسترس باشند. شما میتوانید از مدیر بستههای سیستم خود (مانند APT در Ubuntu یا YUM در CentOS) برای نصب BIND استفاده کنید. به عنوان مثال، در توزیع لینوکسی اوبونتو (Ubuntu) میتوانید از دستور زیر برای نصب BIND استفاده کنید:
sudo apt-get update
sudo apt-get install bind9
2. پیکربندی فایل named.conf: پس از نصب BIND، باید فایل پیکربندی اصلی BIND که به نام “named.conf” شناخته میشود را پیکربندی کنید. این فایل در مسیر “/etc/bind/” قرار دارد. میتوانید این فایل را با ویرایشگر متنی مانند Vi یا Nano باز کنید و تنظیمات مختلف را در آن اعمال کنید. برای مثال، میتوانید ناحیهها (zones) را تعریف کنید، رکوردهای DNS را تنظیم کنید و تنظیمات دیگر را اعمال کنید. فایل named.conf شامل دستوراتی مانند “zone” برای تعریف ناحیه، “forwarders” برای تنظیم DNSهای پیشفرض، “acl” برای تعریف لیستهای کنترل دسترسی و غیره است. برای اطلاعات بیشتر در مورد ترکیب نحوی و تنظیمات فایل named.conf، به مستندات مربوط به توزیع لینوکسی سرور مراجعه کنید.
3. تعریف ناحیه (Zone): پس از پیکربندی فایل named.conf، باید ناحیههای مورد نظر خود را تعریف کنید. ناحیهها مسئولیت مدیریت نام دامنهها را بر عهده دارند. برای هر ناحیه، شما باید یک فایل پیکربندی جدید ایجاد کنید (با پسوند “.zone“) و مقادیر مورد نیاز را در آن تنظیم کنید. میتوانید از الگوی فایل پیکربندی ناحیه BIND استفاده کنید و مقادیری مانند نام دامنه، رکوردهای DNS، نام سرورهای NS و غیره را در آن ویرایش کنید.
5. اجرای سرویس BIND: پس از پیکربندی فایل named.conf و تنظیمات ناحیهها، شما باید سرویس BIND را راهاندازی کنید. بسته به توزیع لینوکس شما، میتوانید از دستورات مختلفی برای مدیریت سرویس BIND استفاده کنید. به عنوان مثال، در Ubuntu میتوانید از دستور زیر برای راهاندازی سرویس BIND استفاده کنید:
sudo systemctl start bind9
در CentOS، میتوانید از دستور زیر استفاده کنید:
sudo systemctl start named
همچنین، برای اجرای سرویس BIND هنگام بالا آمدن سرور میتوانید آن را به طور خودکار فعال کنید:
sudo systemctl enable bind9 # در Ubuntu
sudo systemctl enable named # در CentOS
6. آزمایش پیکربندی: حالا که سرویس BIND در حال اجرا است، میتوانید از یک سیستم دیگر یا از خود سروری که لینوکس روی آن نصب شده برای آزمایش پیکربندی استفاده کنید. برای این منظور میتوانید از ابزارهایی مانند “nslookup” یا “dig” برای دریافت رکوردهای DNS و بررسی صحت پاسخها استفاده کنید. برای مثال، میتوانید از دستور زیر برای دریافت رکورد A یک دامنه استفاده کنید:
nslookup example.com
یا از دستور “dig” استفاده کنید:
dig example.com
این دستورات اطلاعاتی مانند آدرس آیپی مربوط به دامنه را نشان میدهند و به شما کمک میکنند تا بررسی کنید که سرور DNS شما به درستی پاسخ میدهد یا خیر.
مراحل فوق نمای کلی از نحوه پیکربندی یک سرور DNS BIND در لینوکس است. همچنین، بهتر است قبل از پیکربندی، به مستندات مربوط به توزیع لینوکسی که از آن استفاده میکنید و همچنین BIND مراجعه کنید. دقت کنید که جزییات و تنظیمات میتوانند بسته به توزیع و نسخه BIND متفاوت باشند.
بدون دیدگاه