تو این نوشته میخوایم در مورد اینکه چطور میتونیم یه DNS سرور داشته باشیم صحبت کنیم. سناریوای که میخواییم پیاده سازیش کنیم از این قراره که یه دی ان اس سرور مستر داریم که این سرور به اینترنت دسترسی داره و میتونه همه چیو از اینترنت Resolve کنه. در کنار این سرور یه DNS سرور اسلیو هم داریم که به اینترنت دسترسی نداره و ازش برای کم کردن لود روی سرور اصلی استفاده خواهیم کرد و یه سرور دیگه هم داریم که مثل یه کلاینت ساده س که به عنوان مثال میخواد Google.com رو ریزالو کنه.راستی کلاینت هم اینترنت نداره و فقط به دی ان اس سرور اسلیو دسترسی شبکه ای داره.
خب تو اولین مرحله سرور مستر رو روش DNSرو پیاده سازی میکنیم:
بعد از نصب پکیج های مورد نیاز، باید کانفیگشون کنیم. با ادیتور vim فایل کانفیگشو باز میکنیم.(با غیر vim باز کنید حلالتون نمیکنم :) ) .
vim /etc/named.conf
کانفیگتون باید شبیه عکس بالایی بشه. تو کانفیگ هاش خط های زیر تغییر کردن.
listen-on port 53 { 127.0.0.1; any; }; allow-query { localhost; any; }; dnssec-enable no; dnssec-validation no;
تو اولین خط به دی ان اس سرورمون میگیم که روی هر آی پی ای که سیستم داره روی پورت 53 به درخواست هایی میاد گوش بده و بهشون جواب بده.
وقتی یه کلاینت میخواد مثلا Google.com رو Reslove کنه به دی ان اس سرور ما query میزنه و میپرسه . خط دوم میگه که چه کلاینت هایی با چه رنج آی پی ای میتونن کوئری بزنن رو دی ان اس سرور ما.
خط سوم و چهارم برای امضای ریسپانس هایی که سرور به کلاینت برمیگردونه استفاده میشه و ما برای این آموزش نیازی به اینا و روبه رو شدن با چالش هاش نداریم پس غیرفعالشون میکنیم.
قدم بعدی اینه که سرویس رو استارت کنیم و تستش کنیم.
سرویس استارت شد و Enable هم شد . حالا میریم که تستش کنیم. برای تست فایل /etc/resolve.conf رو باز میکنیم و آی پی سرور مستر(192.168.1.172) رو جلوی nameserver مینویسیم و بعدش مثل عکس پایینی تستش میکنیم که اوکیه یا خیر.
همانطور که بالاتر میبینید آدرس گوگل کامل ریزالو میشه و سروری که این کار رو انجام داده سروری با آی پی 192.168.1.172 ئه(سرور مسترمونه- اون پایین پایینا نوشته این آی پی رو).
پس مسترمون درست کار میکنه . الان میریم سراغ سرور اسلیو که کانفیگش کنیم. اول از همه bind و bind-utils رو روش نصب میکنیم و میریم تا کانفیگش کنیم مثل عکس پایینی.
تغییراتی که دادیم ایناست:
listen-on port 53 { 127.0.0.1; any; }; allow-query { localhost; any; }; forwarders { 192.168.1.172; }; dnssec-enable no; dnssec-validation no;
خط سوم به دی ان اس سرور اسلیو ، دی ان اس سرور مستر رو معرفی میکنه. وقتی کلاینتی چیزی از سرور اسلیو بپرسه ؛ اگه اون جوابشو بدونه برمیگردونه وگرنه فورواردش میکنه به دی ان اس مستر و از اون میپرسه.
حالا تقریبا تموم شده همه چی . بریم یه ماشین تستی بیاریم بالا و وصلش کنیم به دی ان اس سرور اسلیو ببینیم همه چی اوکیه یا خیر (مگه دست خودشه اوکی نباشه؟ :) ).
رو سرور کلاینت تستی فایل /etc/resolve.conf رو باز میکنین و تغییرش میدید به دی ان اس سرور اسلیومون(192.168.1.102).مثل عکس زیری باید باشه.
و بعد :
همونطور که میبینید همه چی ردیفه . حالا بیایید یکم ور بریم باهاش و ببینیم این cache کردن ها دقیقا چطور کار میکنن.
ما اومدیم رو سرور کلاینت تستی مون یه آدرس رو ریزالو کردیم و مبینید که در عرض 0 میلی ثانیه جواب داده به کوئریمون. خب این نشون میده که سیستم کش کردنمون درست کار میکنه. حالا یه سوال جدید. بیایین کش دی ان اس سرور مسترمون رو پاک کنیم به کل .ببینیم نتیجه رو کلاینت چطوریه.
با دستور بالایی میتونید کش دی ان اس تون رو پاک کنید. بعدش دوباره میریم رو کلاینت و همون کوئری قبلی رو اجرا میکنیم.
دوباره 0 میلی ثانیه. پس این نشون میده که دی ان اس سرور اسلیو درست داره به کار کش کردنش عمل میکنه و هر چیزی رو نمیفرسته سمت مستره. حالا بیایین کش اسلیو رو هم پاک کنیم ببینیم نتیجه چی میشه.
و بعد روی کلاینت اجرای کوئری قبلی برای ریزالو یک آدرس url .
نتیجه رو میبینید که در عرض 1144 میلی ثانیه برمیگردونه. به عبارتی کلاینت از اسلیو پرسید و وقتی دید جوابی نداره اسلیوه، اسلیو میره از مستر میپرسه و وقتی میبینه اونم جوابی نداره (تو cache جوابی نداره ) میره از دی ان اس سرور های سطح اینترنت میپرسه و جواب رو برمیگردونه و این میشه که طول میکشه.
حالا من یه تست دیگه کردم و یادم رفت اسکرین شات بگیرم . اونم این بود که رو اسلیو فلاش بزنیم ولی تو کش مستر داشته باشیم جواب رو. وقتی این کارو میکردیم کوئری در عرض 34 میلی ثانیه جواب داده میشد.
خودم قصد دارم تو نوشته بعدی یا یکی از نوشته های بعدیم در مورد ریکورد های DNS و Zone اینا بنویسم تو DNS و توضیح بدمشون. ایشالا تو اولین فرصت
امیدوارم مفید بوده باشه نوشتهام. تا درودی دیگر بدرود :)